12 KiB
Intestazioni HTTP speciali
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repository di github.
Wordlists e strumenti
- https://github.com/danielmiessler/SecLists/tree/master/Miscellaneous/web/http-request-headers
- https://github.com/rfc-st/humble
Intestazioni per cambiare la posizione
Riscrivi l'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 la 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 gestisce attualmente la richiesta, a differenza di un'intestazione end-to-end.
Connection: close, X-Forwarded-For
{% content-ref url="../../pentesting-web/abusing-hop-by-hop-headers.md" %} abusing-hop-by-hop-headers.md {% endcontent-ref %}
HTTP Request Smuggling
Content-Length: 30
Transfer-Encoding: chunked
{% content-ref url="../../pentesting-web/http-request-smuggling/" %} http-request-smuggling {% endcontent-ref %}
Intestazioni di cache
Intestazioni di cache del server:
X-Cache
nella risposta può avere il valoremiss
quando la richiesta non è stata memorizzata nella cache e il valorehit
quando è memorizzata nella cacheCache-Control
indica se una risorsa viene memorizzata nella cache e quando verrà nuovamente memorizzata nella cache:Cache-Control: public, max-age=1800
Vary
viene spesso utilizzato nella risposta per indicare ulteriori intestazioni che vengono trattate come parte della chiave di cache anche se di solito non sono chiave.Age
definisce il tempo 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
{% content-ref url="../../pentesting-web/cache-deception.md" %} cache-deception.md {% endcontent-ref %}
Intestazioni di cache locali:
Clear-Site-Data
: Intestazione per indicare la cache che deve essere rimossa:Clear-Site-Data: "cache", "cookies"
Expires
: Contiene la data/ora in cui la risposta dovrebbe scadere:Expires: Wed, 21 Oct 2015 07:28:00 GMT
Pragma: no-cache
equivalente aCache-Control: no-cache
Warning
: L'intestazione HTTP generaleWarning
contiene informazioni sui possibili problemi con lo stato del messaggio. Più di un'intestazioneWarning
può apparire in una risposta.Warning: 110 anderson/1.3.37 "Response is stale"
Condizioni
- Le richieste che utilizzano queste intestazioni:
If-Modified-Since
eIf-Unmodified-Since
verranno risposte solo se l'intestazione di rispostaLast-Modified
contiene un'ora diversa. - Le richieste condizionali che utilizzano
If-Match
eIf-None-Match
utilizzano un valore Etag in modo che il server web invii il contenuto della risposta se i dati (Etag) sono cambiati. L'Etag viene preso dalla risposta HTTP. - Il valore Etag è di solito 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 richieste di intervallo e, in caso affermativo, in quale unità può essere espresso l'intervallo.Accept-Ranges: <range-unit>
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 corrisponde alla risorsa remota. Utilizzato per evitare il download di due intervalli da una versione incompatibile della risorsa.Content-Range
: Indica dove in un messaggio di corpo completo 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 supporto della risorsaContent-Encoding
: Utilizzato 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 pentest 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 contenenteETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"
sta rivelando che l'SHA1 del byte 20 è `ETag:
Informazioni sul server
Server: Apache/2.4.1 (Unix)
X-Powered-By: PHP/5.3.3
Controlli
Allow
: Questo header viene utilizzato per comunicare i metodi HTTP che una risorsa può gestire. Ad esempio, potrebbe essere specificato comeAllow: GET, POST, HEAD
, indicando che la risorsa supporta questi metodi.Expect
: Utilizzato dal client per comunicare le aspettative che il server deve soddisfare affinché la richiesta venga elaborata con successo. Un caso d'uso comune coinvolge l'headerExpect: 100-continue
, che indica che il client intende inviare un payload di dati di grandi dimensioni. Il client cerca una risposta100 (Continue)
prima di procedere con la trasmissione. Questo meccanismo aiuta ad ottimizzare l'utilizzo della rete aspettando la conferma del server.
Download
- L'header
Content-Disposition
nelle risposte HTTP indica se un file deve essere visualizzato inline (all'interno della pagina web) o trattato come un allegato (scaricato). Ad esempio:
Content-Disposition: attachment; filename="filename.jpg"
Questo significa che il file chiamato "filename.jpg" è destinato a essere scaricato e salvato.
Intestazioni di sicurezza
Content Security Policy (CSP)
{% content-ref url="../../pentesting-web/content-security-policy-csp-bypass/" %} content-security-policy-csp-bypass {% endcontent-ref %}
Tipi attendibili
Applicando i Tipi Attendibili tramite CSP, le applicazioni possono essere protette contro gli attacchi DOM XSS. I Tipi Attendibili garantiscono che solo oggetti specificamente 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, '<').replace(/>/g, '>');
});
}
// 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. Assicura che i browser rispettino i MIME type specificati dal server.
X-Content-Type-Options: nosniff
X-Frame-Options
Per contrastare il clickjacking, questa intestazione limita come i documenti possono essere incorporati nei tag <frame>
, <iframe>
, <embed>
o <object>
, raccomandando a tutti i documenti di specificare esplicitamente le loro autorizzazioni di incorporazione.
X-Frame-Options: DENY
Cross-Origin Resource Policy (CORP) e Cross-Origin Resource Sharing (CORS)
CORP è fondamentale per specificare quali risorse possono essere caricate dai siti web, mitigando le falle tra siti. CORS, d'altra parte, consente un meccanismo di condivisione delle risorse tra origini più flessibile, rilassando la politica della stessa 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, riducendo significativamente il rischio di attacchi simili a Spectre. Controllano il caricamento delle risorse tra origini e l'interazione con le finestre tra origini, 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 tramite connessioni sicure HTTPS, migliorando così la privacy e la sicurezza.
Strict-Transport-Security: max-age=3153600
Riferimenti
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
- https://web.dev/security-headers/
- https://web.dev/articles/security-headers
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository github di HackTricks e HackTricks Cloud.