Está en la página 1de 13

Protocolo de transferencia de

hipertexto (HTTP)

Esquema (scheme): identificar el protocolo al que accede el cliente (http o https)

Info. Del usuario (user): componente opcional que contiene credenciales en el formulario; se
utiliza para identificar el host (anfitrión)

Anfitrión (host): ubicación del recurso. Puede ser nombre del host o dirección IP. Dos puntos
separan el host y un puerto

Puerto (port): las URL sin un puerto especificado apuntan al puerto predeterminado 80. Si el
puerto del servidor HTTPS no se está ejecutando en el puerto 80, se puede especificar en la
URL

Camino (path): esto es el recurso en el que se accede, puede ser un archivo o una carpeta, si
no se especifica la ruta, el servidor devuelve el índice predeterminado alojado por el (por
ejemplo, index.html)

Cadena de consulta (query string): la cadena de consulta esta precedida por un signo de
interrogación (?). Este componente puede ser opcional ya que se utiliza para pasar información
del recurso. Una cadena de consulta consta de un parámetro y un valor. En el ejemplo
anterior, el parámetro es login y value es verdadero. Puede variar los parámetros separados
por un ampersand (&)

Fragmentos (fragment): esto lo procesan los navegadores en el lado del cliente para ubicar
secciones dentro del recurso principal
No siempre se requieren todos los componentes para acceder a un recurso. Pero una URL
debe contener al menos un esquema y un host para realizar una solicitud adecuada

El HTTP tiene inconvenientes de seguridad haciendo que todos los datos transferidos por el
mismo estén sin cifrar haciendo que sea inseguro y fácil de hackear, utilizando herramientas
como Wireshark que son capases de analizar el tráfico de red haciendo que los datos sean
capaces de usarse con fines maliciosos, una forma para evitar esto fue la creación del
protocolo HTTPS (HTTP secure) que elimina estos problemas del anterior protocolo cifrando
los datos almacenados. El puerto predeterminado de este protocolo es 443

Sin embargo esto no es del todo seguro ya que dependiendo de las circunstancias, un atacante
puede realizar un ataque de degradación HTTP, que degrada la comunicación HTTPS a HTTP,
pudiendo logar evitar el cifrado de los datos. Esto se hace configurando un ataque man-in-the-
middle (MITM) y proxy pasando todo el tráfico del host del atacante sin el consentimiento del
usuario

Solicitud y respuesta
Burp Suite

Burp Suite es una herramienta que actúa cono servidor proxy y se puede utilizar para examinar
y modificar solicitudes HTTP. Proporciona un proxy que puede enrutar el tráfico desde el
navegador atreves del proxy y ver las diversas solicitudes y respuestas entre el cliente y el
servidor web

Solicitud HTTP

La imagen de arriba muestra la solicitud HTTP GET a la URL


Método (HTTP Method): el primer campo representa el método HTTP, que especifica el tipo de
acción a realizar

Camino (path): el segundo campo es la ruta al recurso al que se accede. Este campo también
pu8ede tener un sufijo con una cadena de consulta

Versión (HTTP version): el tercer y último campo se utiliza para indicar la versión HTTP

Respuesta HTTP sin procesar

Similar a la solicitud, una respuesta HTTP también contiene encabezados. La primera línea es la
versión HTTP mientras que la segunda denota el código de respuesta HTTP, estos códigos se
utilizan para determinar si la solicitud se realizo correctamente o no. El cuerpo de la respuesta
generalmente se define con código HTML aunque también puede responder con otros tipos de
códigos como JSON, hojas de estilo, scripts, un documento o incluso un pdf

Encabezados
Los encabezados HTTP proporcionan una forma adicional de pasar información entre el cliente
y el servidor. Hay encabezados específicos para solicitudes y respuestas, así como encabezados
comunes para ambos. Los encabezados pueden tener uno o mas valores anexados después del
nombre del encabezado y separados por 2 puntos (:). Hay muchos encabezados que se utilizan
para diferentes propósitos las cuales se dividen en diferentes categorías:

1. General Headers
2. Entity Headers
3. Request Headers
4. Response Headers
5. Security Headers

1-Encabezados Generales (General Headers)


Estos encabezados no pertenecen específicamente a una solicitud o respuesta. Son
contextuales y se utilizan para describir el mensaje en lugar de su contenido.

Para más información sobre estos encabezados visitar el siguiente link

https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html

Encabezamiento Descripción
Date El encabezado Date contiene la fecha y hora en que se originó el
mensaje. Se prefiere convertir la zona horaria UTC estándar

Connection El encabezado Connection dicta si la conexión de red actual debe


permanecer activa después de que finalice la solicitud. Dos valores de
uso común para este encabezado son close y keep-alive. El valor close
del cliente o servidor significa que les gustaría terminar la conexión,
mientras que al keep-alive indica que la conexión debe permanecer
abierta

Ejemplo

Encabezados Generales – Ejemplo

Jakers@htp[/htp]$ curl –I –X GET https://www.intelanefreight.com

<SINP>
Date: Sun, 06 Aug 2020 08:49:37 GMT
Connection: Keep-alive

2-Encabezados de entidad (Entity Headers)


Al igual que los encabezados generales, los encabezados de entidad pueden ser comunes tanto
en la solicitud como en la respuesta. Estos encabezados se utilizan para describir el contenido
(entidad) que se transfiere mediante un mensaje. Por lo general, se encuentran en respuestas
y solicitudes POST o PUT (por ejemplo, la carga de un archivo).

Para más información sobre estos encabezados visitar el siguiente link


https://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html

Encabezamient Descripción
o
Content-Type Este encabezado se utiliza para describir el tipo de recurso que se
transfiere. Los navegadores agregan automáticamente el valor en el lado
del cliente y lo devuelven en la respuesta del servidor.
Media-Type El media-type describe los datos que se pasan. Por ejemplo, el tipo de
medio de un PDF es application/pdf, mientras que en el tipo de una
imagen PNG es image/png. Este encabezado puede jugar un papel crucial
para que el servidor interprete nuestra entrada. El campo charset denota
el estándar de codificación, como UTF-8
Boundary La directiva boundary actúa como un creador para separar contenido
cuando hay mas de uno en el mismo mensaje
Content-Length El encabezado Content-Length contiene el tamaño de la entidad que se
pasa. Este encabezado es necesario ya que el servidor lo usa parta leer
datos del cuerpo del mensaje
Content- Los datos pueden sufrir múltiples transformaciones antes de pasar. Por
Encoding ejemplo, se pueden comprimir grandes cantidades de datos para reducir
el tamaño del mensaje> el tipo de codificación que se utiliza debe
especificarse con el encabezado Content-Encoding

Ejemplo

Encabezados de entidad: ejemplo

Jakers@htp[/htp]$ curl –I –X GET https://www.intelanefreight.com

<SNIP>
Content-Length: 26012
Content-Type: text/html; charset=ISO-8859-4
Content-Encoding: gzip

3-Encabezados de solicitud (Request Headers)


El cliente envía encabezados de solicitud en una transacción HTTP. Están definidos en RFC
2616. Estos encabezados se utilizan en una solicitud HTTP y no se relacionan con el contenido
del mensaje. Los encabezados como Accept, Accept-* y IF-* permiten solicitudes
condicionales. Los encabezados como Cookie o User-Agent se envían para que el servidor
pueda adaptar la respuesta.

Para más información para estos encabezados visitar el siguiente link


https://tools.ietf.org/html/rfc7231#section-5

Los siguientes encabezados se ven comúnmente en las solicitudes HTTP

Encabezamiento Descripción

Host El encabezado Host se utiliza para especificar


el host al que se le solicita el recurso. Puede
ser un nombre de dominio o una dirección IP.
Los servidores HTTP se pueden configurar
para alojar diferentes sitios web, que se
revelan en función del nombre de host. Esto
hace que el encabezado del host sea un
objetivo de enumeración importante
User-Agent El encabezado User-Agent se utiliza para
describir al cliente que solicita recursos. Por
ejemplo, un navegador o na biblioteca. Este
encabezado puede revelar mucho sobre el
cliente, como el navegador, su version y el
sistema operativo
Accept El encabezado Accept describe que tipos de
medios puede comprender el cliente. Puede
contener varios tipos de medios separados
por comas. El valor */* significa todos los
tipos de medios
Cookie El encabezado Cookie debe contener pares
de valor de cookie en el formato
name=value. HTTP es un protocolo sin
estado, lo que significa que el servidor no
tiene forma de identificar a los clientes que
se conectan a él. Este es un problema cuando
se alojan recursos y contenido protegidos.
Una cookie es un dato almacenado en el
cliente y el servidor, que actúa como un
identificador. Estos se pasan al servidor por
solicitud, manteniendo así el acceso del
cliente. Las cookies también pueden servir
para otros fines, como guardar las
preferencias del usuario o el seguimiento de
la sesión. Puede haber varias cookies en un
solo encabezado separadas por un punto y
coma.
Referer El encabezado Referer indica donde proviene
la solicitud actual. Por ejemplo, hacer clic en
un enlace de los resultados de búsqueda de
Google haría que el remitente
https://google.com. Confiar en este
encabezado puede ser peligroso, ya que
puede manipularse fácilmente y tener
consecuencias no deseadas
Authorization El encabezado Authorization HTTP es otra
forma en que el servidor identifica a los
clientes. Después de una autentificación
exitosa, el servidor devuelve un token
exclusivo para el cliente. A diferencia de las
cookies, los tokens se almacenan solo en el
lado del cliente y el servidor los recupera por
solicitud. Existen varios tipos de tipos de
autentificación según el servidor web y el
tipo de aplicación utilizados

Ejemplo

Encabezados de solicitud: ejemplo

Jakers@htp[/htp]$ curl –I –X GET https://www.intelanefreight.com

Host: www.inlanefreight.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS x 10_14_5) AppleWebkit/605.1.15
(KHTML, like Gecko)
Cookie: cookie1=298zf09hf012fh2; cookie2=u32t4o3tb3gg4
Accept: text/plain
Referer: https://www.hackerthebox.eu/
Authorization: BASIC cGFzc3dvcmQK
<SNIP>

4-Encabezados de respuesta (Response Headers)


Los encabezados de respuesta HTTP se pueden usar en una respuesta HTTP y no se relacionan
con el contenido del mensaje. Ciertos encabezados de respuesta cono Age Location y server se
utilizan para proporcionar más contexto a la respuesta.

Para mas información sobre este encabezado visitar el siguiente link

https://tools.ietf.org/html/rfc7231#section-6

los siguientes encabezados se ven comúnmente en las respuestas HTTP

Encabezamiento Descripción

Server El encabezado Server contiene información


sobre el servidor HTTP, que manejo la
solicitud. Se puede utilizar para obtener
información sobre el servidor, como su
version, y aumentarlo mas
Set-Cookie El encabezado Set-Cookie contiene las
cookies necesarias para la identificación del
cliente. Los navegadores analizan las cookies
y las almacenan para futuras solicitudes. Este
encabezado sigue el mismo formato el
encabezado Cookie
WWW-Authenticate Este encabezado notifica al cliente sobre tipo
de autentificación requerida para acceder al
recurso solicitado

Ejemplo

Encabezados de respuesta: ejemplo

Jakers@htp[/htp]$ curl –I –X GET https://www.intelanefreight.com

<SNIP>
Server: Apache/2.2.14 (Win32)
Set-Cookie: name1=value1, name=value2; Expires=wed, 09 Jun 2021 10:18:14 GMT
WWW-Authenticate: BASIC realm=”Localhost”

5-Encabezados de seguridad (Security Headers)


Con el aumento en la variedad de navegadores y ataques a la web, fue necesario definir ciertos
encabezados que mejoran la seguridad. Los encabezados de seguridad HTTP son una clase de
encabezados de respuesta que se utiliza para especificar ciertas reglas y políticas que debe
seguir el navegador al acceder al sitio web.

El proyecto de encabezados seguros de OWASP es un gran recurso para leer mas sobre las
diversas posibilidades de encabezados de seguridad HTTP

Encabezamiento Descripción

Content-Security-Policy El encabezado de CSP dicta la política del sitio


web con respecto a los recursos inyectados
externamente. Puede ser código JavaScript y
recursos de secuencias de comandos. Este
encabezado indica al navegador que acepte
recursos solo de ciertos dominios de
confianza, evitando así ataques como Cross-
site scripting
Strict-Transport-Security La política de seguridad de transporte estricta
HTTP de un sitio web evita que el navegador
acceda al sitio web a través del protocolo
HTTP de texto sin formato. Toda la
comunicación se realiza a través del
protocolo seguro HTTPS. Esto evita que los
atacantes rastreen el trafico web y accedan a
información protegida como contraseñas u
otros datos confidenciales
Referrer-Policy Este encabezado dicta si el navegador debe
incluir el valor especificado a través del
encabezado Referer o no. Puede ayudar a
evitar revelar URL e información confidencial
mientras navega por el sitio web

Ejemplo

Encabezado de seguridad: ejemplo

Jakers@htp[/htp]$ curl –I –X GET https://www.intelanefreight.com

<SNIP>
Content-Security-Policy: script-src ‘self’
Strict-Transport-Security: max-age=31536000
Referrer-Policy: origin

La anterior lista cubre algunos de los encabezados HTTP que se ven comúnmente. Sin
embargo, hay ,muchos mas encabezados contextuales que se pueden utilizar durante la
comunicación. También es posible que las aplicaciones definan encabezados personalizados
según sus requisitos. Puede encontrar una lista completa de encabezados HTTP estándar en el
siguiente link

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

Mé todos y có digos HTTP


En el protocolo HTTP, existen varios tipos de métodos de solicitud que permiten que el
navegador envié información como formularios o archivos al servidor. Estos métodos se
utilizan, entre otras cosas, para decirle al servidor como procesar la solicitud que enviamos y
como responder

Algunos de los métodos mas utilizados son los siguientes:

Método Descripción

GET Este es el método HTTP más común, que


solicita un recurso especificado. Se pueden
pasar datos adicionales al servidor a través de
cadenas de consulta
POST Este es otro método común utilizado para
enviar datos al servidor. Puede manejar
varios tipos de entrada, como texto, archivos
PDF y otras formas de datos binarios. Estos
datos se adjuntan en el cuerpo de la solicitud
presente después de los encabezados. El
método POST se usa comúnmente al enviar
información (formularios, inicios de sesión) o
cargar datos a un sitio web, como imágenes o
documentos
HEAD Este método solicita los encabezados que se
devolverían si se realizan una solicitud GET al
servidor. No devuelve el cuerpo de la
solicitud y generalmente se hace para
verificar la longitud de la respuesta antes de
descargar los recursos
PUT Este método es similar a POST, ya que se usa
para crear nuevos recursos n el servidor.
Permitir este método sin lis controles
adecuados puede llevar a la adición de
recursos maliciosos (es decir, cargar un
archivo malicioso en el servidor)
DELETE Este método permite a los usuarios eliminar
un recurso existente en el servidor web.
Puede conducir a la Denegación de Servicio
(DoS) sin los controles adecuados
OPTIONS Este método devuelve información sobre el
servidor, como los métodos que acepta

Nota: Tanto “PUT” como “DELETE” suelen estar asociados con servidores WebDAV,
de los que hablaremos más adelante

La lista anterior destaca solo algunos métodos, la disponibilidad de un método en particular


depende del servidor y de la configuración de la aplicación

Có digos de respuesta
El servidor utiliza los códigos de estado HTTP para decirle al cliente si la solicitud se proceso
correctamente. Un servidor HTTP puede devolver cinco tipos de códigos de respuesta:

Tipo Descripción

1xx Generalmente proporciona información y


continua procesando la solicitud
2xx Los códigos de respuesta positivos se
devuelven cuando una solicitud se realiza
correctamente
3xx Devuelto cuando el servidor redirige el
cliente
4xx Esta clase de códigos significa solicitudes
indebidas del cliente. Por ejemplo, solicitar
un recurso que no existe o solicitar un
formato incorrecto
5xx Se devuelve cuando hay algún problema con
el servidor HTTP

Veamos algunos códigos de respuesta HTTP comunes y su significado

Tipo Descripción

200 OK Se devuelve en una solicitud y la respuesta


generalmente contiene el recurso solicitado
302 Found Este código redirige al cliente a otra URL. Por
ejemplo, redirigir al usuario a su panel de
control después de iniciar sesión
correctamente

Un ejemplo común de ver re direccionamientos es durante las compras en línea, donde los
sitios web lo re direccionan a la pasarela de pago

Tipo Descripción

400 Bad Request Por lo general, se devuelve al encontrar


solicitudes con formato incorrecto, como
solicitudes con terminadores de línea
faltantes
403 Forbidden Este código significa que el cliente no tiene el
acceso adecuado al recurso. También se
puede devolver cuando el servidor detecta
una entrada maliciosa del usuario
La imagen de arriba muestra un error 403 Forbidden devuelto por Apache

Tipo Descripción

404 Not Found Se devuelve cuando el cliente solicita un


recurso que no existe en el servidor

Tipo Descripción

500 Internal Server Error Como su nombre lo describe, este código lo


devuelve cuando el servidor no puede
procesar la solicitud
La imagen muestra la página predeterminada devuelta por IIS cuando encuentra un error en el
servidor. Además de los códigos HTTP estándar, varios servidores proveedores como
Cloudflare o AWS implementan sus propios códigos

Mé todo GET
El método HTTP más utilizado es el método GET el cual tiene como objetivo principal es
solicitar un recurso determinado y recuperarlo. Es posible enviar datos a través de la solicitud
GET con la ayuda de parámetros de consulta. Pero son limitados estos datos y debe utilizar
post si se necesita más información

Ejemplos básicos que demuestran solicitudes GET

N/T: el dominio “http://inlanefreight.com” se utiliza como ejemplo, debe reemplazar con la


dirección IP de su objetivo

También podría gustarte