Server Side Inclusion/Edge Side Inclusion Injection
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)
(Introduzione tratta da Apache docs)
SSI (Server Side Includes) sono direttive che vengono inserite nelle pagine HTML e valutate sul server mentre le pagine vengono servite. Ti permettono di aggiungere contenuti generati dinamicamente a una pagina HTML esistente, senza dover servire l'intera pagina tramite un programma CGI o un'altra tecnologia dinamica. Ad esempio, potresti inserire una direttiva in una pagina HTML esistente, come:
<!--#echo var="DATE_LOCAL" -->
E, quando la pagina viene servita, questo frammento verrà valutato e sostituito con il suo valore:
Martedì, 15-Gen-2013 19:28:54 EST
La decisione su quando utilizzare SSI e quando far generare completamente la tua pagina da qualche programma è solitamente una questione di quanto della pagina è statico e quanto deve essere ricalcolato ogni volta che la pagina viene servita. SSI è un ottimo modo per aggiungere piccoli pezzi di informazione, come l'ora corrente - mostrata sopra. Ma se la maggior parte della tua pagina viene generata al momento in cui viene servita, devi cercare qualche altra soluzione.
Puoi inferire la presenza di SSI se l'applicazione web utilizza file con l'estensione .shtml
, .shtm
o .stm
, ma non è solo questo il caso.
Un'espressione SSI tipica ha il seguente formato:
C'è un problema nella memorizzazione nella cache delle informazioni o delle applicazioni dinamiche poiché parte del contenuto potrebbe essere variato per la prossima volta che il contenuto viene recuperato. Questo è ciò per cui viene utilizzato ESI, per indicare utilizzando i tag ESI il contenuto dinamico che deve essere generato prima di inviare la versione memorizzata nella cache. Se un attaccante è in grado di iniettare un tag ESI all'interno del contenuto memorizzato nella cache, allora potrebbe essere in grado di iniettare contenuto arbitrario nel documento prima che venga inviato agli utenti.
Il seguente header in una risposta dal server significa che il server sta utilizzando ESI:
Se non riesci a trovare questo header, il server potrebbe comunque utilizzare ESI. Un approccio di sfruttamento cieco può essere utilizzato poiché una richiesta dovrebbe arrivare al server degli attaccanti:
GoSecure ha creato una tabella per comprendere i possibili attacchi che possiamo provare contro diversi software compatibili con ESI, a seconda della funzionalità supportata:
Includes: Supporta la direttiva <esi:includes>
Vars: Supporta la direttiva <esi:vars>
. Utile per bypassare i filtri XSS
Cookie: I cookie del documento sono accessibili al motore ESI
Intestazioni Upstream Richieste: Le applicazioni surrogate non elaboreranno le dichiarazioni ESI a meno che l'applicazione upstream non fornisca le intestazioni
Host Allowlist: In questo caso, gli include ESI sono possibili solo da host server autorizzati, rendendo SSRF, ad esempio, possibile solo contro quegli host
Software
Includes
Vars
Cookies
Intestazioni Upstream Richieste
Host Whitelist
Squid3
Yes
Yes
Yes
Yes
No
Varnish Cache
Yes
No
No
Yes
Yes
Fastly
Yes
No
No
No
Yes
Akamai ESI Test Server (ETS)
Yes
Yes
Yes
No
No
NodeJS esi
Yes
Yes
Yes
No
No
NodeJS nodesi
Yes
No
No
No
Optional
La seguente direttiva ESI caricherà un file arbitrario all'interno della risposta del server
Rubare cookie da remoto
Rubare il cookie HTTP_ONLY con XSS riflettendolo nella risposta:
Non confondere questo con un "Inclusion di File Locale":
Il seguente aggiungerà un'intestazione Location
alla risposta
Aggiungi intestazione nella richiesta forzata
Aggiungi intestazione nella risposta (utile per bypassare "Content-Type: text/json" in una risposta con XSS)
Questo invierà informazioni di debug incluse nella risposta:
È possibile utilizzare la sintassi eXtensible Stylesheet Language Transformations (XSLT)
in ESI semplicemente indicando il valore del param dca
come xslt
. Questo potrebbe consentire di abusare di XSLT per creare e sfruttare una vulnerabilità di Entità Esterna XML (XXE):
File XSLT:
Controlla la pagina XSLT:
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)