hacktricks/network-services-pentesting/pentesting-web/special-http-headers.md
2024-02-10 13:03:23 +00:00

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:

Wordlists e strumenti

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 valore miss quando la richiesta non è stata memorizzata nella cache e il valore hit quando è memorizzata nella cache
  • Cache-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 a Cache-Control: no-cache
  • Warning: L'intestazione HTTP generale Warning contiene informazioni sui 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"

Condizioni

  • 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 che utilizzano If-Match e If-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 risorsa
  • Content-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 contenente ETag: 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 come Allow: 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'header Expect: 100-continue, che indica che il client intende inviare un payload di dati di grandi dimensioni. Il client cerca 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'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, '&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. 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

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

Altri modi per supportare HackTricks: