# Inclusión del Lado del Servidor/Inyección de Inclusión del Lado del Borde
Aprende hacking en AWS desde cero hasta experto conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
## Información Básica sobre la Inclusión del Lado del Servidor
(Definición tomada de [aquí](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 las páginas se están sirviendo. 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:
`Martes, 15-Ene-2013 19:28:54 EST`
La decisión de cuándo usar SSI, y cuándo tener tu página generada completamente por algún programa, suele ser 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ños fragmentos de información, como la hora actual, mostrada arriba. Pero si la mayoría de tu página se está generando en el momento en que se sirve, necesitas buscar 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 el único caso.
Una expresión SSI típica tiene el siguiente formato:
```
```
### Verificación
```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
```
## Inclusión en el Borde
Existe un problema al **almacenar en caché información o aplicaciones dinámicas** ya que parte del contenido puede haber **variado** para la próxima vez que se recupere el contenido. Para esto se utiliza **ESI**, para indicar mediante etiquetas ESI el **contenido dinámico que debe generarse** 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**.\
También se puede utilizar un **enfoque de explotación a ciegas** ya que una solicitud debería llegar al servidor de los atacantes:
```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
```
### Explotación de ESI
[GoSecure](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) ha creado una tabla para ayudarnos a entender posibles ataques que podemos intentar contra diferentes software compatibles con ESI, dependiendo de la funcionalidad admitida. Primero proporcionemos algunas explicaciones sobre los nombres de las columnas de la siguiente tabla:
- **Includes**: Admite la directiva ``
- **Vars**: Admite la directiva ``. Útil para evadir filtros XSS
- **Cookie**: Las cookies del documento son accesibles para el motor ESI
- **Se Requieren Encabezados de Origen**: Las aplicaciones sustitutas no procesarán declaraciones ESI a menos que la aplicación de origen proporcione los encabezados
- **Lista Blanca de Hosts**: En este caso, las inclusiones ESI solo son posibles desde hosts de servidor permitidos, lo que hace que, por ejemplo, SSRF solo sea posible contra esos hosts
| **Software** | **Includes** | **Vars** | **Cookies** | **Se Requieren Encabezados de Origen** | **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
```markup
```
El archivo _http://attacker.com/xss.html_ puede contener un payload XSS como ``
#### Bypass protección XSS del cliente
```markup
x=>alert(/Chrome%20XSS%20filter%20bypass/);>
Use to bypass WAFs:
ipt>alert(1)ript>
error=alert(1)>
```
#### Robo de Cookies
* Robo remoto de cookies
```markup
```
* Robar la cookie HTTP\_ONLY con XSS al reflejarla en la respuesta:
```bash
# This will reflect the cookies in the response
# Reflect XSS
```
* Toma completa de la cuenta al reflejar cookies
#### Archivo Local Privado
No confundir con una "Inclusión de Archivo Local":
```markup
```
#### CRLF
CRLF (Carriage Return Line Feed) refers to the sequence of characters used to denote a line break in text files. In web security, CRLF injection involves inserting CRLF characters into input fields to manipulate the application's behavior. This can lead to various attacks such as HTTP response splitting and server-side request forgery.
```markup
```
#### Redirección Abierta
Lo siguiente agregará un encabezado `Location` a la respuesta
```bash
```
#### Agregar Encabezado
* Agregar encabezado en solicitud forzada
```html
```
* Agregar encabezado en la respuesta (útil para evadir "Content-Type: text/json" en una respuesta con XSS)
```bash
```
#### CRLF en Agregar encabezado (**CVE-2019-2438)**
```markup
```
#### Depuración de Akamai
Esto enviará información de depuración incluida en la respuesta:
```markup
```
### ESI + XSLT = XXE
También es posible agregar inclusiones ESI basadas en \*\* **\_**eXtensible Stylesheet Language Transformations (XSLT)**\_** \*\* especificando el valor `xslt` al parámetro _dca_. La inclusión siguiente hará que el servidor HTTP solicite el archivo XML y XSLT. Luego, el archivo XSLT se utiliza para filtrar el archivo XML. Este archivo XML se puede utilizar para realizar ataques de _XML External Entity (XXE)_. Esto permite a los atacantes realizar ataques SSRF, lo cual no es muy útil ya que debe realizarse a través de inclusiones ESI, que es un vector SSRF en sí mismo. Las DTD externas no se analizan ya que la biblioteca subyacente (Xalan) no tiene soporte para ello. Esto significa que no podemos extraer archivos locales.
```markup
```
El archivo XSLT:
```markup
]>
&xxe;
```
Revisa la página 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 %}
### 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" %}
Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).