Special HTTP headers

Impara l'hacking AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Liste di parole & Strumenti

Intestazioni per Cambiare la Posizione

Riscrivi IP di origine:

  • 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 (Controlla le intestazioni hop-by-hop)

Riscrivi posizione:

  • X-Original-URL: /admin/console

  • X-Rewrite-URL: /admin/console

Intestazioni Hop-by-Hop

Un'intestazione hop-by-hop è un'intestazione progettata per essere elaborata e consumata dal proxy che attualmente gestisce la richiesta, a differenza di un'intestazione end-to-end.

  • Connection: close, X-Forwarded-For

pagehop-by-hop headers

Smuggling delle Richieste HTTP

  • Content-Length: 30

  • Transfer-Encoding: chunked

pageHTTP Request Smuggling / HTTP Desync Attack

Intestazioni della Cache

Intestazioni della Cache del Server:

  • X-Cache nella risposta può avere il valore miss quando la richiesta non è stata memorizzata nella cache e il valore hit quando è memorizzata nella cache

  • Comportamento simile nell'intestazione Cf-Cache-Status

  • Cache-Control indica se una risorsa viene memorizzata nella cache e quando verrà nuovamente memorizzata: Cache-Control: public, max-age=1800

  • Vary è spesso utilizzato nella risposta per indicare ulteriori intestazioni trattate come parte della chiave di cache anche se di solito non sono chiave.

  • Age definisce i tempi in secondi in cui l'oggetto è stato nella cache del proxy.

  • Server-Timing: cdn-cache; desc=HIT indica anche che una risorsa è stata memorizzata nella cache

pageCache Poisoning and Cache Deception

Intestazioni della Cache Locale:

  • Clear-Site-Data: Intestazione per indicare la cache che deve essere rimossa: Clear-Site-Data: "cache", "cookies"

  • Expires: Contiene data/ora in cui la risposta dovrebbe scadere: Expires: Wed, 21 Oct 2015 07:28:00 GMT

  • Pragma: no-cache come Cache-Control: no-cache

  • Warning: L'intestazione generale Warning contiene informazioni su possibili problemi con lo stato del messaggio. Più di un'intestazione Warning può apparire in una risposta. Warning: 110 anderson/1.3.37 "Response is stale"

Condizionali

  • Le richieste che utilizzano queste intestazioni: If-Modified-Since e If-Unmodified-Since verranno risposte solo se l'intestazione di risposta**Last-Modified** contiene un'ora diversa.

  • Le richieste condizionali utilizzando If-Match e If-None-Match utilizzano un valore Etag in modo che il server web invierà il contenuto della risposta se i dati (Etag) sono cambiati. L'Etag è preso dalla risposta HTTP.

  • Il valore Etag è solitamente calcolato in base al contenuto della risposta. Ad esempio, ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI" indica che l'Etag è lo Sha1 di 37 byte.

Richieste di Intervallo

  • Accept-Ranges: Indica se il server supporta le richieste di intervallo e, in caso affermativo, in quale unità l'intervallo può essere espresso. Accept-Ranges: <unità-di-intervallo>

  • Range: Indica la parte di un documento che il server dovrebbe restituire.

  • If-Range: Crea una richiesta di intervallo condizionale che viene soddisfatta solo se l'etag o la data fornita corrisponde alla risorsa remota. Usato per evitare il download di due intervalli da versioni incompatibili della risorsa.

  • Content-Range: Indica dove in un messaggio completo del corpo appartiene un messaggio parziale.

Informazioni sul corpo del messaggio

  • Content-Length: La dimensione della risorsa, in numero decimale di byte.

  • Content-Type: Indica il tipo di media della risorsa

  • Content-Encoding: Usato per specificare l'algoritmo di compressione.

  • Content-Language: Descrive la lingua umana(i) destinata all'audience, in modo che consenta all'utente di differenziare in base alla propria lingua preferita.

  • Content-Location: Indica una posizione alternativa per i dati restituiti.

Dal punto di vista di un test di penetrazione queste informazioni sono di solito "inutili", ma se la risorsa è protetta da un 401 o 403 e riesci a trovare un modo per ottenere queste informazioni, potrebbe essere interessante. Ad esempio una combinazione di Range e Etag in una richiesta HEAD può rivelare il contenuto della pagina tramite richieste HEAD:

  • Una richiesta con l'intestazione Range: bytes=20-20 e con una risposta contenente ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y" sta rivelando che lo SHA1 del byte 20 è ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y

Informazioni sul Server

  • Server: Apache/2.4.1 (Unix)

  • X-Powered-By: PHP/5.3.3

Controlli

  • Allow: Quest'intestazione viene utilizzata per comunicare i metodi HTTP che una risorsa può gestire. Ad esempio, potrebbe essere specificata come Allow: GET, POST, HEAD, indicando che la risorsa supporta questi metodi.

  • Expect: Utilizzato dal client per trasmettere le aspettative che il server deve soddisfare affinché la richiesta venga elaborata con successo. Un caso d'uso comune coinvolge l'intestazione Expect: 100-continue, che indica che il client intende inviare un payload di dati di grandi dimensioni. Il client attende una risposta 100 (Continue) prima di procedere con la trasmissione. Questo meccanismo aiuta ad ottimizzare l'utilizzo della rete aspettando la conferma del server.

Download

  • L'intestazione Content-Disposition nelle risposte HTTP indica se un file deve essere visualizzato inline (all'interno della pagina web) o trattato come un attachment (scaricato). Ad esempio:

Content-Disposition: attachment; filename="filename.jpg"

Intestazioni di Sicurezza

Politica di Sicurezza del Contenuto (CSP)

pageContent Security Policy (CSP) Bypass

Tipi Affidabili

Applicando i Tipi Affidabili tramite CSP, le applicazioni possono essere protette contro gli attacchi XSS al DOM. I Tipi Affidabili garantiscono che solo oggetti appositamente creati, conformi alle politiche di sicurezza stabilite, possano essere utilizzati in chiamate API web pericolose, garantendo così la sicurezza del codice JavaScript per impostazione predefinita.

// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
});
}
// Assignment of raw strings is blocked, ensuring safety.
el.innerHTML = 'some string'; // Throws an exception.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped;  // Results in safe assignment.

X-Content-Type-Options

Questo header impedisce il MIME type sniffing, una pratica che potrebbe portare a vulnerabilità XSS. Garantisce che i browser rispettino i MIME type specificati dal server.

X-Content-Type-Options: nosniff

X-Frame-Options

Per combattere il clickjacking, questo header limita come i documenti possono essere incorporati nei tag <frame>, <iframe>, <embed>, o <object>, raccomandando a tutti i documenti di specificare esplicitamente le autorizzazioni di incorporazione.

X-Frame-Options: DENY

Cross-Origin Resource Policy (CORP) and Cross-Origin Resource Sharing (CORS)

CORP è cruciale per specificare quali risorse possono essere caricate dai siti web, mitigando le falle tra siti. CORS, d'altra parte, consente un meccanismo più flessibile di condivisione di risorse tra origini diverse, rilassando la stessa politica di origine in determinate condizioni.

Cross-Origin-Resource-Policy: same-origin
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

Cross-Origin Embedder Policy (COEP) e Cross-Origin Opener Policy (COOP)

COEP e COOP sono essenziali per abilitare l'isolamento tra origini diverse, riducendo significativamente il rischio di attacchi simili a Spectre. Controllano il caricamento di risorse tra origini diverse e l'interazione con finestre tra origini diverse, rispettivamente.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin-allow-popups

HTTP Strict Transport Security (HSTS)

Infine, HSTS è una funzionalità di sicurezza che obbliga i browser a comunicare solo con i server tramite connessioni sicure HTTPS, migliorando così la privacy e la sicurezza.

Strict-Transport-Security: max-age=3153600

References

Impara l'hacking AWS da zero a ero con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Last updated