Special HTTP headers
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Rewrite IP source:
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Forwarded: 127.0.0.1
Forwarded-For: 127.0.0.1
X-Forwarded-Host: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-ProxyUser-Ip: 127.0.0.1
X-Original-URL: 127.0.0.1
Client-IP: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Host: 127.0.0.1
True-Client-IP: 127.0.0.1
Cluster-Client-IP: 127.0.0.1
Via: 1.0 fred, 1.1 127.0.0.1
Connection: close, X-Forwarded-For
(Check hop-by-hop headers)
Rewrite location:
X-Original-URL: /admin/console
X-Rewrite-URL: /admin/console
Un encabezado hop-by-hop es un encabezado que está diseñado para ser procesado y consumido por el proxy que actualmente maneja la solicitud, a diferencia de un encabezado de extremo a extremo.
Connection: close, X-Forwarded-For
Content-Length: 30
Transfer-Encoding: chunked
Server Cache Headers:
X-Cache
en la respuesta puede tener el valor miss
cuando la solicitud no fue almacenada en caché y el valor hit
cuando está almacenada en caché
Comportamiento similar en el encabezado Cf-Cache-Status
Cache-Control
indica si un recurso está siendo almacenado en caché y cuándo será la próxima vez que el recurso será almacenado en caché nuevamente: Cache-Control: public, max-age=1800
Vary
se usa a menudo en la respuesta para indicar encabezados adicionales que se tratan como parte de la clave de caché incluso si normalmente no tienen clave.
Age
define el tiempo en segundos que el objeto ha estado en la caché del proxy.
Server-Timing: cdn-cache; desc=HIT
también indica que un recurso fue almacenado en caché
Local Cache headers:
Clear-Site-Data
: Encabezado para indicar la caché que debe ser eliminada: Clear-Site-Data: "cache", "cookies"
Expires
: Contiene la fecha/hora cuando la respuesta debe expirar: Expires: Wed, 21 Oct 2015 07:28:00 GMT
Pragma: no-cache
igual que Cache-Control: no-cache
Warning
: El Warning
encabezado HTTP general contiene información sobre posibles problemas con el estado del mensaje. Puede aparecer más de un encabezado Warning
en una respuesta. Warning: 110 anderson/1.3.37 "Response is stale"
Las solicitudes que utilizan estos encabezados: If-Modified-Since
y If-Unmodified-Since
serán respondidas con datos solo si el encabezado de respuesta Last-Modified
contiene un tiempo diferente.
Las solicitudes condicionales que utilizan If-Match
y If-None-Match
utilizan un valor Etag para que el servidor web envíe el contenido de la respuesta si los datos (Etag) han cambiado. El Etag
se toma de la respuesta HTTP.
El valor Etag generalmente se calcula en función del contenido de la respuesta. Por ejemplo, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"
indica que el Etag
es el Sha1 de 37 bytes.
Accept-Ranges
: Indica si el servidor admite solicitudes de rango, y si es así, en qué unidad se puede expresar el rango. Accept-Ranges: <range-unit>
Range
: Indica la parte de un documento que el servidor debe devolver.
If-Range
: Crea una solicitud de rango condicional que solo se cumple si el etag o la fecha dados coinciden con el recurso remoto. Se utiliza para evitar descargar dos rangos de versiones incompatibles del recurso.
Content-Range
: Indica dónde en un mensaje de cuerpo completo pertenece un mensaje parcial.
Content-Length
: El tamaño del recurso, en número decimal de bytes.
Content-Type
: Indica el tipo de medio del recurso
Content-Encoding
: Se utiliza para especificar el algoritmo de compresión.
Content-Language
: Describe el/los idioma(s) humano(s) destinados a la audiencia, de modo que permite a un usuario diferenciar según el idioma preferido del usuario.
Content-Location
: Indica una ubicación alternativa para los datos devueltos.
Desde el punto de vista de un pentest, esta información suele ser "inútil", pero si el recurso está protegido por un 401 o 403 y puedes encontrar alguna manera de obtener esta info, esto podría ser interesante.
Por ejemplo, una combinación de Range
y Etag
en una solicitud HEAD puede filtrar el contenido de la página a través de solicitudes HEAD:
Una solicitud con el encabezado Range: bytes=20-20
y con una respuesta que contiene ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"
está filtrando que el SHA1 del byte 20 es ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y
Server: Apache/2.4.1 (Unix)
X-Powered-By: PHP/5.3.3
Allow
: Este encabezado se utiliza para comunicar los métodos HTTP que un recurso puede manejar. Por ejemplo, podría especificarse como Allow: GET, POST, HEAD
, indicando que el recurso admite estos métodos.
Expect
: Utilizado por el cliente para transmitir expectativas que el servidor necesita cumplir para que la solicitud se procese con éxito. Un caso de uso común implica el encabezado Expect: 100-continue
, que señala que el cliente tiene la intención de enviar una carga de datos grande. El cliente busca una respuesta 100 (Continue)
antes de proceder con la transmisión. Este mecanismo ayuda a optimizar el uso de la red al esperar la confirmación del servidor.
El Content-Disposition
encabezado en las respuestas HTTP indica si un archivo debe ser mostrado inline (dentro de la página web) o tratado como un adjunto (descargado). Por ejemplo:
Esto significa que el archivo llamado "filename.jpg" está destinado a ser descargado y guardado.
Al hacer cumplir los Tipos de Confianza a través de CSP, las aplicaciones pueden protegerse contra ataques XSS en el DOM. Los Tipos de Confianza aseguran que solo se puedan utilizar objetos específicamente diseñados, que cumplan con las políticas de seguridad establecidas, en llamadas peligrosas a la API web, asegurando así el código JavaScript por defecto.
Este encabezado previene la detección de tipos MIME, una práctica que podría llevar a vulnerabilidades XSS. Asegura que los navegadores respeten los tipos MIME especificados por el servidor.
Para combatir el clickjacking, este encabezado restringe cómo se pueden incrustar documentos en las etiquetas <frame>
, <iframe>
, <embed>
o <object>
, recomendando que todos los documentos especifiquen explícitamente sus permisos de incrustación.
CORP es crucial para especificar qué recursos pueden ser cargados por sitios web, mitigando filtraciones entre sitios. CORS, por otro lado, permite un mecanismo de compartición de recursos de origen cruzado más flexible, relajando la política de mismo origen bajo ciertas condiciones.
COEP y COOP son esenciales para habilitar el aislamiento de origen cruzado, reduciendo significativamente el riesgo de ataques similares a Spectre. Controlan la carga de recursos de origen cruzado y la interacción con ventanas de origen cruzado, respectivamente.
Por último, HSTS es una característica de seguridad que obliga a los navegadores a comunicarse con los servidores solo a través de conexiones seguras HTTPS, mejorando así la privacidad y la seguridad.
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)