Web Request
HyperText Transfer Protocol (HTTP)
Protocolo HTTP:
Es un protocolo a nivel de aplicación para acceder a recursos en la World Wide Web.
"Hipertexto" incluye enlaces a otros recursos y es de fácil interpretación para los usuarios.
Arquitectura Cliente-Servidor:
El cliente solicita un recurso al servidor.
El servidor procesa la solicitud y devuelve el recurso correspondiente.
Puertos y Configuración:
Puerto predeterminado: 80.
Puede configurarse para usar otros puertos según las necesidades del servidor web.
Navegación por la Web:
Se utiliza un Fully Qualified Domain Name (FQDN) como parte de una URL para acceder a sitios web especÃficos, p. ej., www.hackthebox.com.
URL
Los recursos a través de HTTP se acceden mediante una URL, que ofrece muchas más especificaciones que simplemente indicar un sitio web que deseamos visitar. Veamos la estructura de una URL.
Acceso a Recursos por HTTP:
Se realiza mediante una URL (Localizador Uniforme de Recursos).
Las URL no solo especifican sitios web, sino que también contienen detalles adicionales.
Estructura de una URL:
El análisis de su estructura será clave para entender cómo se acceden los recursos y cómo se manejan las solicitudes HTTP.
URL como Conjunto de Componentes:
Cada URL está formada por múltiples elementos que especifican cómo y dónde acceder a un recurso.
Elementos Clave:
Esquema: Define el protocolo (HTTP, HTTPS).
Host y Puerto: Localizan el recurso, utilizando nombres de host o IPs, y puertos especÃficos.
Ruta y Consulta: Identifican el recurso exacto y permiten incluir parámetros dinámicos.
Fragmentos: Facilitan la navegación dentro de recursos extensos.
HTTP Flow
Resolución DNS:
Las URLs deben ser traducidas a direcciones IP mediante un servidor DNS.
El navegador primero busca registros en
/etc/hosts
antes de contactar servidores DNS externos.
Solicitud HTTP:
Una solicitud GET se envÃa al servidor utilizando la dirección IP obtenida.
Se solicita la ruta raÃz
/
al puerto predeterminado (normalmente 80 para HTTP).
Respuesta del Servidor:
El servidor web procesa la solicitud y devuelve un archivo de Ãndice por defecto (p. ej.,
index.html
).Incluye un código de estado HTTP, como 200 OK, para indicar el resultado de la solicitud.
Renderizado en el Navegador:
El contenido devuelto (p. ej.,
index.html
) es interpretado y mostrado al usuario por el navegador.
Este flujo es fundamental para comprender cómo ocurre la comunicación básica entre cliente y servidor en HTTP.
cURL
Herramientas clave:
Navegadores web: Renderizan contenido como HTML/JavaScript/CSS.
cURL: LÃnea de comandos para enviar solicitudes HTTP y otros protocolos; no renderiza, pero muestra el código en bruto.
Ventajas de cURL para pentesters:
Mayor control y rapidez al manejar solicitudes y respuestas HTTP.
Ideal para automatización y scripting en pruebas de penetración.
Uso de cURL:
Guardar respuesta en archivo:
O
: Guarda el contenido usando el nombre remoto del archivo.o
: Permite especificar un nombre para el archivo de salida.
Silenciar estados: Usar el indicador
s
para evitar la impresión de mensajes de estado en la terminal.
Aplicación práctica:
Descargar páginas o archivos de servidores remotos.
Inspeccionar solicitudes y respuestas sin interferencias visuales.
HyperText Transfer Protocol Secure (HTTPS)
Limitaciones de HTTP:
Transferencia de datos en texto claro.
Vulnerable a ataques Man-in-the-Middle (MiTM).
Ventajas de HTTPS:
Cifra las comunicaciones, asegurando que los datos no puedan ser leÃdos por terceros.
Protege la integridad y confidencialidad de los datos transferidos.
Tendencia actual:
HTTPS es el estándar actual para la seguridad en internet.
HTTP está en proceso de eliminación, y los navegadores restringirán su uso en el futuro.
HTTPS Overview
Si examinamos una solicitud HTTP, podemos observar las consecuencias de no implementar comunicaciones seguras entre un navegador web y una aplicación web. Por ejemplo, a continuación se muestra el contenido de una solicitud de inicio de sesión HTTP:
Podemos observar que las credenciales de inicio de sesión se pueden ver en texto claro. Esto facilitarÃa que alguien en la misma red (como una red inalámbrica pública) capture la solicitud y reutilice las credenciales con fines malintencionados.
En contraste, cuando alguien intercepta y analiza el tráfico de una solicitud HTTPS, verÃa algo como lo siguiente:
Como podemos observar, los datos se transfieren como un flujo único cifrado, lo que dificulta enormemente que alguien capture información como credenciales u otros datos sensibles.
Los sitios web que implementan HTTPS se pueden identificar mediante https://
en su URL (por ejemplo, https://www.google.com
, asà como por el Ãcono de candado en la barra de direcciones del navegador, a la izquierda de la URL.
Limitación del cifrado HTTPS:
Aunque los datos están cifrados, el DNS tradicional puede revelar las URLs visitadas, ya que estas consultas no están protegidas.
Recomendaciones para mayor seguridad:
Servidores DNS cifrados: Utiliza opciones como
8.8.8.8
(Google DNS) o1.1.1.1
(Cloudflare DNS) para proteger las consultas DNS.Uso de VPN: Asegura que todo el tráfico, incluidas las consultas DNS, esté cifrado y no sea visible para terceros.
Beneficio de estas prácticas:
Protege la privacidad del usuario, especialmente en redes públicas o no confiables.
HTTPS Flow
Redirección de HTTP a HTTPS:
Una solicitud inicial al puerto 80 (HTTP) es detectada por el servidor, que redirige al cliente al puerto 443 (HTTPS) mediante el código 301 Moved Permanently.
Proceso de establecimiento de conexión HTTPS:
Client hello: El cliente envÃa información al servidor.
Server hello: El servidor responde, seguido de un intercambio de claves.
Verificación mutua: El cliente verifica el certificado del servidor y envÃa uno propio.
Handshake cifrado: Confirma que el cifrado y la transferencia funcionan correctamente.
Continuación de la comunicación:
Tras el handshake, las solicitudes HTTP se transmiten cifradas.
Importancia:
Este proceso garantiza la confidencialidad e integridad de la comunicación.
Ataque de degradación HTTP:
Propósito: Forzar que la comunicación pase de HTTPS (cifrado) a HTTP (texto claro).
Método: Uso de un proxy MITM para interceptar y redirigir el tráfico a través del atacante.
Impacto:
El atacante puede capturar datos sensibles que de otro modo estarÃan cifrados, como credenciales o información personal.
Protecciones modernas:
Navegadores y servidores actuales implementan mecanismos de defensa, como:
HSTS (HTTP Strict Transport Security): Obliga a los navegadores a usar HTTPS incluso si el usuario intenta acceder a HTTP.
Validación de certificados SSL/TLS.
Bloqueo de conexiones a servidores que no soportan HTTPS correctamente.
Conclusión:
Aunque es una amenaza teórica, las medidas de seguridad modernas dificultan su ejecución en entornos actualizados.
cURL for HTTPS
Comportamiento de cURL con HTTPS:
Maneja automáticamente el handshake seguro y el cifrado/descifrado de datos.
Garantiza que las comunicaciones sean seguras sin intervención manual.
Rechazo de certificados no válidos:
Motivo: Proteger contra ataques MITM que puedan explotar certificados no válidos o caducados.
Impacto: Evita la conexión con sitios potencialmente peligrosos.
Casos comunes de rechazo:
Certificados expirados.
Certificados autofirmados sin reconocimiento por autoridades confiables.
Discordancias entre el dominio y el certificado.
Soluciones (usadas con precaución):
Si es absolutamente necesario, el uso de
k
o-insecure
en cURL permitirá ignorar los errores de certificado:
Esto debe evitarse en entornos no controlados, ya que expone al usuario a posibles riesgos de seguridad.
Recomendación:
Siempre validar la autenticidad del certificado antes de proceder con conexiones manuales.
HTTP Requests and Responses
Componentes clave de la comunicación HTTP:
Solicitud HTTP (HTTP Request):
Realizada por el cliente (cURL, navegador, etc.).
Incluye detalles como:
Recurso solicitado: URL, ruta, parámetros.
Datos de solicitud: Información enviada al servidor.
Encabezados y opciones: Configuraciones adicionales.
Respuesta HTTP (HTTP Response):
Enviada por el servidor.
Contiene:
Código de respuesta: Indica el resultado del procesamiento.
Datos del recurso: Si el solicitante tiene permiso de acceso.
Flujo de comunicación:
Cliente → EnvÃa solicitud HTTP → Servidor.
Servidor → Procesa la solicitud → EnvÃa respuesta HTTP.
Importancia:
La interacción cliente-servidor se basa en este ciclo.
Los códigos de respuesta ayudan a interpretar el estado de la comunicación.
Exploración futura:
Detalles sobre códigos de respuesta y cómo analizarlos.
Opciones avanzadas en solicitudes HTTP para personalizar interacciones.
HTTP Request
La primera lÃnea de cualquier solicitud HTTP contiene tres campos principales separados por espacios:
Método HTTP: Define la acción que el cliente desea realizar (por ejemplo,
GET
,POST
,PUT
, etc.).Ruta o URL: Especifica el recurso al que se quiere acceder en el servidor.
Versión del protocolo HTTP: Indica la versión del protocolo utilizada en la comunicación (por ejemplo,
HTTP/1.1
oHTTP/2
).Encabezados HTTP:
Son lÃneas adicionales en una solicitud HTTP que contienen información importante sobre la solicitud, como:
Host: El dominio del servidor al que se realiza la solicitud.
User-Agent: Información sobre el navegador o cliente que realiza la solicitud.
Cookie: Datos de sesión o de estado enviados por el cliente al servidor.
Los encabezados se separan con saltos de lÃnea.
Diferencias entre HTTP/1.X y HTTP/2.X:
HTTP/1.X: EnvÃa las solicitudes en texto claro, utilizando saltos de lÃnea para separar los campos de los encabezados.
HTTP/2.X: EnvÃa las solicitudes en datos binarios y utiliza una estructura en forma de diccionario para organizar los campos, lo que mejora la eficiencia y velocidad de las solicitudes.
Importancia del formato:
El formato de los encabezados y la separación de los campos asegura que el servidor pueda procesar correctamente la solicitud.
La transición de HTTP/1.X a HTTP/2.X mejora la velocidad y optimización de las comunicaciones entre cliente y servidor.
HTTP Response
Primera lÃnea de la respuesta HTTP:
Contiene dos campos:
Versión HTTP: Indica la versión del protocolo (por ejemplo,
HTTP/1.1
).Código de respuesta HTTP: Indica el resultado de la solicitud (por ejemplo,
200 OK
).
Códigos de respuesta HTTP:
Se utilizan para indicar el estado de la solicitud:
200 OK: Solicitud exitosa.
404 Not Found: El recurso no fue encontrado.
500 Internal Server Error: Error en el servidor.
Encabezados de respuesta:
Son similares a los de una solicitud HTTP, proporcionando detalles sobre la respuesta.
Se discutirá más a fondo en la siguiente sección.
Cuerpo de la respuesta:
Contenido de la respuesta, que generalmente es HTML, pero también puede incluir otros tipos de contenido como:
JSON: Para APIs o respuestas dinámicas.
Imágenes, hojas de estilo o scripts: Recursos de un sitio web.
PDF: Documentos alojados en el servidor.
cURL
Uso del parametro
v
(verbose) en cURL:Permite ver la solicitud HTTP completa y la respuesta HTTP completa.
Esto es útil para analizar en profundidad el tráfico de la red, especialmente al realizar pruebas de penetración o para escribir exploits.
Cómo usar cURL con el parametro
v
:Simplemente agregamos
v
a la lÃnea de comando:
Resultado: Se imprime tanto la solicitud HTTP como la respuesta HTTP, proporcionando detalles sobre los encabezados, códigos de respuesta, y más.
Importancia en pruebas de penetración:
Ver toda la solicitud y respuesta permite identificar posibles vulnerabilidades, como la exposición de encabezados sensibles, malas configuraciones o problemas con los certificados.
Solicitud HTTP con la bandera
v
:Método:
GET / HTTP/1.1
solicita el recurso raÃz.Encabezados de la solicitud:
Host: Define el dominio del servidor al que se solicita el recurso.
User-Agent: Informa sobre el cliente que realiza la solicitud.
Accept: Indica los tipos de contenido que el cliente puede manejar.
Respuesta HTTP:
Código de respuesta:
401 Unauthorized
, que significa que no tenemos acceso al recurso solicitado. Esto puede ocurrir debido a problemas de autenticación o autorización.Encabezados de la respuesta:
Date: Fecha y hora en que el servidor envió la respuesta.
Content-Length: Longitud del contenido de la respuesta.
Content-Type: Tipo de contenido (por ejemplo,
text/html
).
Cuerpo de la respuesta: En este caso, el cuerpo contiene HTML, el cual es el mismo que se recibirÃa al hacer la solicitud sin la bandera
v
.
Importancia de la bandera
v
:Ayuda a depurar y entender completamente el tráfico HTTP, mostrando tanto las solicitudes como las respuestas, lo cual es esencial en las pruebas de penetración para verificar la seguridad de las aplicaciones web.
Browser DevTools
Herramientas de desarrollo del navegador (DevTools):
Propósito principal: Están diseñadas para ayudar a los desarrolladores a probar y depurar sus aplicaciones web.
Importancia para los testers de penetración web: Son herramientas esenciales para analizar solicitudes y respuestas HTTP, examinar vulnerabilidades en las aplicaciones web, y realizar pruebas de seguridad.
Cómo acceder a DevTools:
Atajo de teclado: [CTRL+SHIFT+I] o [F12] en la mayorÃa de los navegadores.
Pestañas: DevTools contiene varias pestañas, pero en este contexto, nos centraremos en la pestaña Network.
Pestaña Network:
Función principal: Permite monitorear las solicitudes HTTP y las respuestas que realiza el navegador cuando interactúa con una aplicación web.
Utilidad en pruebas de penetración: Ayuda a ver todas las solicitudes y respuestas, lo que facilita la identificación de posibles problemas de seguridad como filtrado de información sensible, inyecciones, y errores de autenticación.
HTTP Headers
Definición de encabezados HTTP:
Facilitan la comunicación entre el cliente y el servidor proporcionando información adicional sobre la solicitud o la respuesta.
Pueden ser especÃficos para solicitudes, respuestas o ser comunes para ambos.
Formato de los encabezados:
Estructura: Nombre del encabezado: Valor.
Puede tener múltiples valores separados por comas o definidos en varias lÃneas.
CategorÃas principales:
Encabezados Generales: Aplican tanto a solicitudes como a respuestas. Ejemplo:
Cache-Control
.Encabezados de Entidad: Contienen metadatos sobre el cuerpo de la solicitud o respuesta. Ejemplo:
Content-Type
.Encabezados de Solicitud: EspecÃficos para solicitudes HTTP. Ejemplo:
User-Agent
.Encabezados de Respuesta: Proporcionan información especÃfica en las respuestas del servidor. Ejemplo:
Set-Cookie
.Encabezados de Seguridad: Ayudan a mitigar riesgos y ataques. Ejemplo:
Content-Security-Policy
.
General Headers
Entity Headers
Request Headers
Encabezados de solicitud (Request Headers):
Definición: Proveen información adicional en una solicitud HTTP, pero no están directamente vinculados con el cuerpo del mensaje.
Rol: Ayudan a especificar detalles como la autenticación, caracterÃsticas del cliente, preferencia de formatos, y más.
Encabezados comunes en solicitudes HTTP:
Host: Especifica el servidor al que se dirige la solicitud.
User-Agent: Describe el cliente que realiza la solicitud (e.g., navegador, cURL).
Accept: Indica los formatos que el cliente puede manejar (e.g., JSON, HTML).
Authorization: Contiene credenciales para autenticación.
Cookie: EnvÃa cookies almacenadas por el navegador.
Content-Type: Especifica el formato de los datos enviados en el cuerpo de la solicitud (e.g.,
application/json
).
Response Headers
Los encabezados de respuesta (Response Headers) se pueden utilizar en una respuesta HTTP y no están relacionados con el contenido del mensaje. Algunos encabezados de respuesta, como Age, Location y Server, se emplean para proporcionar más contexto sobre la respuesta. Los siguientes encabezados son comúnmente observados en respuestas HTTP:
Security Headers
Encabezados de seguridad (Security Headers):
Definición: Son encabezados de respuesta que ayudan a proteger las aplicaciones web al establecer polÃticas claras que los navegadores deben cumplir.
Rol: Mitigar riesgos asociados con ataques comunes como XSS (Cross-Site Scripting), Clickjacking, y la ejecución de scripts no confiables.
Ejemplos comunes de encabezados de seguridad:
Content-Security-Policy (CSP): Restringe los orÃgenes de contenido permitidos para prevenir ataques XSS.
Strict-Transport-Security (HSTS): Obliga al navegador a comunicarse exclusivamente a través de HTTPS.
X-Content-Type-Options: Evita que los navegadores infieran el tipo de contenido (protección contra ataques MIME sniffing).
X-Frame-Options: Previene que el sitio sea cargado dentro de un iframe, mitigando ataques de Clickjacking.
Referrer-Policy: Controla la información del encabezado Referer compartida con otros sitios web.
Importancia:
Establecen un nivel adicional de defensa en las aplicaciones web.
Ayudan a los desarrolladores y propietarios de sitios a proteger a los usuarios contra múltiples vectores de ataque.
HTTP Methods and Codes
Métodos HTTP:
Definen cómo el cliente interactúa con el servidor.
Ejemplos comunes:
GET: Recuperar datos de un recurso.
POST: Enviar datos al servidor para procesarlos (e.g., formularios).
PUT: Actualizar o reemplazar un recurso existente.
DELETE: Eliminar un recurso especÃfico.
Visualización de métodos en herramientas:
cURL: Usando la opción
v
, podemos identificar el método en la primera lÃnea de la solicitud.DevTools del navegador: Los métodos HTTP se muestran en la columna Method del panel de red.
Códigos de respuesta HTTP:
Indicadores del estado del procesamiento de las solicitudes.
Ejemplos:
200 OK: Solicitud exitosa.
404 Not Found: Recurso no encontrado.
500 Internal Server Error: Error del lado del servidor.
Response Codes
GET
Solicitudes por defecto: Al acceder a una URL, el navegador realiza automáticamente una solicitud GET para obtener los recursos.
Métodos HTTP adicionales: Tras recibir la página inicial, el navegador puede generar solicitudes adicionales con otros métodos HTTP según sea necesario.
DevTools: Las herramientas de desarrollo del navegador, especÃficamente la pestaña Network, permiten monitorear y analizar estas solicitudes y sus métodos.
HTTP Basic Auth
Autenticación básica HTTP: A diferencia de la autenticación que utiliza parámetros HTTP, la autenticación básica es gestionada por el servidor web para proteger un recurso especÃfico.
Sin interacción con la aplicación web: Este tipo de autenticación no requiere interacción con la lógica interna de la aplicación web, sino que es una capa de seguridad proporcionada por el servidor web.
Uso común: Este enfoque es común para proteger directorios o páginas de un servidor, especialmente cuando se requiere un acceso restringido sin utilizar formularios de inicio de sesión tradicionales.
POST
Diferencias clave entre GET y POST:
GET:
Los parámetros se incluyen en la URL.
Adecuado para solicitudes idempotentes (e.g., búsqueda o navegación).
Limitado por la longitud de la URL.
POST:
Los parámetros se incluyen en el cuerpo de la solicitud.
Ideal para transferir grandes cantidades de datos o archivos.
Soporta datos binarios sin necesidad de codificación extensa.
Ventajas de POST:
Reduce el riesgo de que los datos sensibles sean registrados en los logs del servidor.
Permite enviar datos más extensos y complejos que los soportados por las URLs.
Uso en herramientas:
cURL: Útil para simular y analizar solicitudes POST desde la lÃnea de comandos.
DevTools del navegador: Permite inspeccionar y depurar solicitudes POST enviadas por aplicaciones web.
CRUD API
Las aplicaciones web modernas suelen utilizar APIs (Interfaz de Programación de Aplicaciones) para manejar interacciones entre el cliente y el servidor. Estas APIs proporcionan endpoints que permiten a los desarrolladores interactuar directamente con los recursos del servidor de forma estructurada y eficiente, sin depender de la interfaz visual del navegador.
Interacción directa:
En lugar de interactuar con una página web, las APIs permiten enviar solicitudes y recibir respuestas directamente, utilizando herramientas como cURL, Postman, o bibliotecas en lenguajes de programación (e.g., Python con
requests
).Estructura común de las APIs:
Endpoints: URLs especÃficas que manejan diferentes acciones (e.g.,
/api/login
,/api/search
).Métodos HTTP: GET, POST, PUT, DELETE, etc., que indican la operación a realizar.
Formatos de datos: JSON es el formato estándar para enviar y recibir información en una API.
Autenticación: Muchas APIs requieren tokens, claves API o cookies de sesión para autorizar solicitudes.
Ventajas de las APIs:
Flexibilidad: Permiten realizar operaciones especÃficas sin cargar toda una página web.
Eficiencia: Reducen el tráfico al enviar solo los datos esenciales.
Automatización: Son ideales para integraciones y scripts automatizados.
APIs
Este ejemplo demuestra cómo las APIs permiten interactuar directamente con bases de datos mediante solicitudes HTTP. Los endpoints están diseñados para realizar operaciones CRUD (Create, Read, Update, Delete) sobre recursos especÃficos, en este caso, tablas y filas de una base de datos.
Estructura de la URL del endpoint:
/api.php
: Endpoint principal para las operaciones de la API./city
: Tabla de la base de datos sobre la que se realizará la operación./london
: Identificador del recurso especÃfico (e.g., una fila donde el nombre de la ciudad eslondon
).
Métodos HTTP utilizados:
PUT: Se utiliza para actualizar un recurso existente.
Otros métodos comunes:
GET: Recuperar datos.
POST: Crear un nuevo recurso.
DELETE: Eliminar un recurso.
Personalización de solicitudes:
Además de la URL, la solicitud puede incluir datos adicionales (e.g., en el cuerpo de la solicitud) o encabezados HTTP que proporcionen autenticación o definan el tipo de contenido (e.g.,
Content-Type: application/json
).
CRUD
CRUD y métodos HTTP:
POST: Crear recursos.
GET: Leer datos.
PUT: Actualizar recursos existentes.
DELETE: Eliminar datos especÃficos.
APIs REST:
Basadas en el principio de CRUD, utilizan métodos HTTP estándar para interactuar con recursos.
Control de acceso:
Las acciones que un usuario puede realizar dependen de los permisos asignados por la API.
Crear una nueva ciudad (POST)
Agregaremos una ciudad con un nombre especÃfico y paÃs asociado, por ejemplo, newcity
en newcountry
.
Actualizar una ciudad (PUT)
Actualizaremos el nombre de la ciudad london
a flag
, y cambiamos el paÃs a exampleland
.
Eliminar una ciudad (DELETE)
Eliminaremos una ciudad, por ejemplo, newcity
.
Buscar la ciudad "flag" (GET)
Después de realizar el cambio, buscamos la ciudad con nombre flag
.
Last updated