# Inyección de XSLT en el lado del servidor (Transformaciones de Lenguaje de Hojas de Estilo Extensibles)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
Se utiliza para transformar documentos XML en otro tipo. Versiones: 1, 2 y 3 (1 es la más utilizada).\
La transformación se puede realizar en el servidor o en el navegador).
Los frameworks más utilizados son: **Libxslt** (Gnome), **Xalan** (Apache) y **Saxon** (Saxonica).
Para explotar este tipo de vulnerabilidad, es necesario poder almacenar etiquetas xsl en el lado del servidor y luego acceder a ese contenido. Un ejemplo de este tipo de vulnerabilidad se puede encontrar en [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/)
## Ejemplo - Tutorial
```bash
sudo apt-get install default-jdk
sudo apt-get install libsaxonb-java libsaxon-java
```
{% code title="xml.xml" %}
```markup
CD Title
The artist
Da Company
10000
1760
```
{% code title="xsl.xsl" %}
```markup
The Super title
```
{% endcode %}
Ejecutar:
```markup
$ saxonb-xslt -xsl:xsl.xsl xml.xml
Warning: at xsl:stylesheet on line 2 column 80 of xsl.xsl:
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
The Super title
Title |
artist |
CD Title |
The artist |
```
### Huella digital
{% code title="detection.xsl" %}
```markup
Version:
Vendor:
Vendor URL:
Product Name:
Product Version:
Is Schema Aware ?:
Supports Serialization:
Supports Backwards Compatibility:
```
{% endcode %}
Y ejecutar
```markup
$saxonb-xslt -xsl:detection.xsl xml.xml
Warning: at xsl:stylesheet on line 2 column 80 of detection.xsl:
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
XSLT identification
Version:2.0
Vendor:SAXON 9.1.0.8 from Saxonica
Vendor URL:http://www.saxonica.com/
```
### Leer archivo local
{% code title="read.xsl" %}
```markup
```
{% endcode %}
```markup
$ saxonb-xslt -xsl:read.xsl xml.xml
Warning: at xsl:stylesheet on line 1 column 111 of read.xsl:
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
```
### SSRF (Falsificación de petición en servidor)
```markup
```
### Versiones
Puede haber más o menos funciones dependiendo de la versión de XSLT utilizada:
* [https://www.w3.org/TR/xslt-10/](https://www.w3.org/TR/xslt-10/)
* [https://www.w3.org/TR/xslt20/](https://www.w3.org/TR/xslt20/)
* [https://www.w3.org/TR/xslt-30/](https://www.w3.org/TR/xslt-30/)
## Huella digital
Sube esto y toma información.
```markup
Version:
Vendor:
Vendor URL:
Product Name:
Product Version:
Is Schema Aware ?:
Supports Serialization:
Supports Backwards Compatibility:
```
## SSRF (Falsificación de petición en servidor)
```markup
```
## Inyección de Javascript
```markup
```
## Listado de directorios (PHP)
### **Opendir + readdir**
```markup
-
-
-
-
-
-
-
-
-
```
### **Assert (var\_dump + scandir + false)**
La técnica de inyección de XSLT en el lado del servidor puede ser utilizada para obtener información sensible del servidor. Una forma de hacerlo es mediante la técnica "Assert (var\_dump + scandir + false)".
Esta técnica implica la creación de un archivo XML malicioso que contiene una carga útil XSLT que ejecutará la función `var_dump()` de PHP en el objeto `scandir()` del directorio actual. La salida de `var_dump()` se enviará al atacante a través de una solicitud HTTP.
Para utilizar esta técnica, el atacante debe cargar el archivo XML malicioso en el servidor y luego enviar una solicitud HTTP para que se procese el archivo. Si la técnica tiene éxito, el atacante recibirá información sensible del servidor, como nombres de archivo y directorios.
Es importante tener en cuenta que esta técnica puede ser detectada por soluciones de seguridad que monitorean el tráfico HTTP en busca de patrones maliciosos.
```markup
```
## Leer archivos
### **Interno - PHP**
```markup
```
### **Interno - XXE**
XXE (External Entity Injection) es una vulnerabilidad que permite a un atacante leer archivos en el servidor. En el caso de un servidor XSLT, el atacante puede leer archivos en el servidor utilizando una entidad externa.
Para explotar esta vulnerabilidad, el atacante debe enviar una solicitud que contenga una referencia a una entidad externa. La entidad externa puede ser un archivo en el servidor o una URL remota. Si el servidor procesa la entidad externa, el atacante puede leer el contenido del archivo o de la URL remota.
Para prevenir esta vulnerabilidad, se debe deshabilitar el procesamiento de entidades externas en el servidor XSLT. También se puede utilizar una lista blanca de entidades permitidas para evitar que se procesen entidades no autorizadas.
```markup
]>
&ext_file;
```
### **A través de HTTP**
```markup
```
```markup
]>
&passwd;
```
### **Interno (función de PHP)**
```markup
```
```markup
```
### Escaneo de puertos
```markup
```
## Escribir en un archivo
### XSLT 2.0
```markup
Write Local File
```
### **Extensión Xalan-J**
---
Xalan-J es una implementación de código abierto de XSLT (Extensible Stylesheet Language Transformations) para Java. Xalan-J proporciona una extensión que permite la ejecución de código Java arbitrario desde una hoja de estilo XSLT. Esta extensión se llama "Xalan-J extension" y se puede utilizar para realizar inyecciones de código en el lado del servidor.
La extensión Xalan-J se puede utilizar para ejecutar código Java arbitrario en el contexto del servidor web. Esto significa que un atacante puede utilizar esta técnica para ejecutar código malicioso en el servidor y comprometer la seguridad del sistema. La inyección de código a través de la extensión Xalan-J se puede realizar en cualquier aplicación que utilice Xalan-J para procesar hojas de estilo XSLT.
Para explotar esta vulnerabilidad, un atacante puede crear una hoja de estilo XSLT maliciosa que contenga código Java arbitrario. Cuando la hoja de estilo se procesa en el servidor, el código Java se ejecuta en el contexto del servidor web. Esto puede permitir al atacante leer, escribir o eliminar archivos en el servidor, así como ejecutar comandos arbitrarios en el sistema.
Para prevenir la inyección de código a través de la extensión Xalan-J, se recomienda deshabilitar la extensión en la configuración del servidor. También se recomienda validar y sanitizar cualquier entrada de usuario que se utilice en las hojas de estilo XSLT para evitar la inyección de código malicioso.
```markup
Write Local File
```
## Incluir XSL externo
Una forma de escribir archivos en PDF es a través de la inclusión de un archivo XSL externo. Esto se logra mediante la inyección de código malicioso en el archivo XSLT que se está utilizando para transformar el archivo XML en PDF. De esta manera, el atacante puede ejecutar código arbitrario en el servidor y escribir archivos en el sistema de archivos del servidor.
```markup
```
```markup
```
## Ejecutar código
### **php:function**
```markup
```
```markup
```
Ejecutar código usando otros frameworks en el PDF
### **Más lenguajes**
**En esta página puedes encontrar ejemplos de RCE en otros lenguajes:** [**https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt\_injection#C%23%2FVB.NET%2FASP.NET**](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt\_injection#C%23%2FVB.NET%2FASP.NET) **(C#, Java, PHP)**
## **Acceder a funciones estáticas de PHP desde clases**
La siguiente función llamará al método estático `stringToUrl` de la clase XSL:
```markup
```
## **Lista de detección de fuerza bruta**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %}
## **Referencias**
* [XSLT\_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT\_SSRF.pdf)\\
* [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)\\
* [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.