# Server Side Inclusion/Edge Side Inclusion Injection {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## Server Side Inclusion Basic Information **(Introduzione tratta dalla [documentazione di Apache](https://httpd.apache.org/docs/current/howto/ssi.html))** 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: `` 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 un 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 un'altra soluzione. Puoi dedurre la presenza di SSI se l'applicazione web utilizza file con le estensioni **`.shtml`, `.shtm` o `.stm`**, ma non è solo questo il caso. Un'espressione SSI tipica ha il seguente formato: ``` ``` ### Controlla ```javascript // Document name // Date // File inclusion // Including files (same directory) // CGI Program results // Including virtual files (same directory) // Modification date of a file // Command exec // Command exec // Reverse shell // Print all variables // Setting variables ``` ## Edge Side Inclusion C'è un problema **nella memorizzazione nella cache delle informazioni o delle applicazioni dinamiche** poiché parte del contenuto potrebbe essere **varia** 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. ### Rilevamento ESI Il seguente **header** in una risposta dal server significa che il server sta utilizzando ESI: ``` Surrogate-Control: content="ESI/1.0" ``` 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: ```javascript // Basic detection hello // If previous is reflected as "hello", it's vulnerable // Blind detection // XSS Exploitation Example // Cookie Stealer (bypass httpOnly flag) // Introduce private local files (Not LFI per se) // Valid for Akamai, sends debug information in the response ``` ### ESI exploitation [GoSecure ha creato](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) una tabella per comprendere i possibili attacchi che possiamo provare contro diversi software compatibili con ESI, a seconda delle funzionalità supportate: * **Includes**: Supporta la direttiva `` * **Vars**: Supporta la direttiva ``. 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 | #### XSS La seguente direttiva ESI caricherà un file arbitrario all'interno della risposta del server ```xml ``` #### Bypass client XSS protection ```xml x=>alert(/Chrome%20XSS%20filter%20bypass/);> Use to bypass WAFs: ipt>alert(1)ript> error=alert(1)> ``` #### Rubare Cookie * Rubare cookie da remoto ```xml ``` * Rubare il cookie HTTP\_ONLY con XSS riflettendolo nella risposta: ```bash # This will reflect the cookies in the response # Reflect XSS (you can put '">' URL encoded and the URL encode eveyrhitng to send it in the HTTP request) # It's possible to put more complex JS code to steal cookies or perform actions ``` #### File Locale Privato Non confondere questo con un "Includere File Locale": ```markup ``` #### CRLF ```markup ``` #### Open Redirect Il seguente aggiungerà un'intestazione `Location` alla risposta ```bash ``` #### Aggiungi intestazione * Aggiungi intestazione nella richiesta forzata ```xml ``` * Aggiungi intestazione nella risposta (utile per bypassare "Content-Type: text/json" in una risposta con XSS) ```bash # Check the number of url_decode to know how many times you can URL encode the value ``` #### CRLF nell'intestazione Add (**CVE-2019-2438**) ```xml ``` #### Akamai debug Questo invierà informazioni di debug incluse nella risposta: ```xml ``` ### ESI + XSLT = XXE Specificando il valore `xslt` per il parametro _dca_, è possibile includere **`eXtensible Stylesheet Language Transformations (XSLT)`** basato su ESI. L'inclusione fa sì che il surrogato HTTP recuperi i file XML e XSLT, con quest'ultimo che filtra il primo. Tali file XML sono sfruttabili per attacchi _XML External Entity (XXE)_, consentendo agli attaccanti di eseguire attacchi SSRF. Tuttavia, l'utilità di questo approccio è limitata poiché l'ESI include già come vettore SSRF. A causa dell'assenza di supporto nella libreria sottostante Xalan, i DTD esterni non vengono elaborati, impedendo l'estrazione di file locali. ```xml ``` File XSLT: ```xml ]> &xxe; ``` Controlla la pagina XSLT: {% content-ref url="xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %} [xslt-server-side-injection-extensible-stylesheet-language-transformations.md](xslt-server-side-injection-extensible-stylesheet-language-transformations.md) {% endcontent-ref %} ### Riferimenti * [https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) * [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/) * [https://academy.hackthebox.com/module/145/section/1304](https://academy.hackthebox.com/module/145/section/1304) * [https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91](https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91) ## Elenco di rilevamento Brute-Force {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %} {% hint style="success" %} Impara e pratica il hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Impara e pratica il hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Supporta HackTricks * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)! * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
{% endhint %}