# 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 **(Introducción tomada de [documentos de Apache](https://httpd.apache.org/docs/current/howto/ssi.html))** SSI (Server Side Includes) son directivas que se **colocan en páginas HTML y se evalúan en el servidor** mientras se sirven las páginas. Te permiten **agregar contenido generado dinámicamente** a una página HTML existente, sin tener que servir toda la página a través de un programa CGI u otra tecnología dinámica.\ Por ejemplo, podrías colocar una directiva en una página HTML existente, como: `` Y, cuando se sirva la página, este fragmento será evaluado y reemplazado por su valor: `Tuesday, 15-Jan-2013 19:28:54 EST` La decisión de cuándo usar SSI y cuándo hacer que tu página sea completamente generada por algún programa, generalmente es una cuestión de cuánto de la página es estático y cuánto necesita ser recalculado cada vez que se sirve la página. SSI es una excelente manera de agregar pequeñas piezas de información, como la hora actual - mostrada arriba. Pero si la mayoría de tu página se genera en el momento en que se sirve, necesitas buscar alguna otra solución. Puedes inferir la presencia de SSI si la aplicación web utiliza archivos con las extensiones **`.shtml`, `.shtm` o `.stm`**, pero no es solo el caso. Una expresión típica de SSI tiene el siguiente formato: ``` ``` ### Verificar ```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 Hay un problema **con la información en caché o aplicaciones dinámicas** ya que parte del contenido puede haber **variado** para la próxima vez que se recupere el contenido. Esto es para lo que se utiliza **ESI**, para indicar usando etiquetas ESI el **contenido dinámico que necesita ser generado** antes de enviar la versión en caché.\ si un **atacante** es capaz de **inyectar una etiqueta ESI** dentro del contenido en caché, entonces, podría ser capaz de **inyectar contenido arbitrario** en el documento antes de que se envíe a los usuarios. ### Detección de ESI El siguiente **encabezado** en una respuesta del servidor significa que el servidor está utilizando ESI: ``` Surrogate-Control: content="ESI/1.0" ``` Si no puedes encontrar este encabezado, el servidor **podría estar utilizando ESI de todos modos**.\ Un **enfoque de explotación ciega también se puede utilizar** ya que una solicitud debería llegar al servidor del atacante: ```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 explotación [GoSecure creó](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) una tabla para entender los posibles ataques que podemos intentar contra diferentes software compatibles con ESI, dependiendo de la funcionalidad soportada: * **Includes**: Soporta la directiva `` * **Vars**: Soporta la directiva ``. Útil para eludir filtros XSS * **Cookie**: Las cookies del documento son accesibles para el motor ESI * **Encabezados de upstream requeridos**: Las aplicaciones sustitutas no procesarán las declaraciones ESI a menos que la aplicación upstream proporcione los encabezados * **Lista blanca de hosts**: En este caso, los includes ESI solo son posibles desde hosts de servidor permitidos, haciendo que SSRF, por ejemplo, solo sea posible contra esos hosts | **Software** | **Includes** | **Vars** | **Cookies** | **Encabezados de upstream requeridos** | **Lista blanca de hosts** | | :--------------------------: | :----------: | :------: | :---------: | :-----------------------------------: | :-----------------------: | | Squid3 | Sí | Sí | Sí | Sí | No | | Varnish Cache | Sí | No | No | Sí | Sí | | Fastly | Sí | No | No | No | Sí | | Akamai ESI Test Server (ETS) | Sí | Sí | Sí | No | No | | NodeJS esi | Sí | Sí | Sí | No | No | | NodeJS nodesi | Sí | No | No | No | Opcional | #### XSS La siguiente directiva ESI cargará un archivo arbitrario dentro de la respuesta del servidor ```xml ``` #### Eludir la protección XSS del cliente ```xml x=>alert(/Chrome%20XSS%20filter%20bypass/);> Use to bypass WAFs: ipt>alert(1)ript> error=alert(1)> ``` #### Robar Cookie * Robo remoto de cookie ```xml ``` * Robar cookie HTTP\_ONLY con XSS reflejándolo en la respuesta: ```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 ``` #### Archivo Local Privado No confundir esto con una "Inclusión de Archivo Local": ```markup ``` #### CRLF ```markup ``` #### Open Redirect Lo siguiente añadirá un encabezado `Location` a la respuesta ```bash ``` #### Agregar Encabezado * Agregar encabezado en la solicitud forzada ```xml ``` * Agregar encabezado en la respuesta (útil para eludir "Content-Type: text/json" en una respuesta con XSS) ```bash # Check the number of url_decode to know how many times you can URL encode the value ``` #### CRLF en el encabezado Add (**CVE-2019-2438**) ```xml ``` #### Akamai debug Esto enviará información de depuración incluida en la respuesta: ```xml ``` ### ESI + XSLT = XXE Al especificar el valor `xslt` para el parámetro _dca_, es factible incluir **`eXtensible Stylesheet Language Transformations (XSLT)`** basado en ESI. La inclusión provoca que el sustituto HTTP recupere los archivos XML y XSLT, siendo este último el que filtra al primero. Tales archivos XML son explotables para ataques de _XML External Entity (XXE)_, permitiendo a los atacantes ejecutar ataques SSRF. Sin embargo, la utilidad de este enfoque es limitada ya que ESI ya sirve como un vector SSRF. Debido a la ausencia de soporte en la biblioteca subyacente Xalan, los DTD externos no son procesados, lo que impide la extracción de archivos locales. ```xml ``` Archivo XSLT: ```xml ]> &xxe; ``` Check the XSLT page: {% 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 %} ### Referencias * [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) ## Lista de Detección de Fuerza Bruta {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %} {% 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 %}