# XSLT Server Side Injection (Extensible Stylesheet Languaje Transformations)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
É usado para transformar documentos XML em outro tipo. Versões: 1, 2 e 3 (1 é a mais usada).\ A transformação pode ser feita no servidor ou no navegador). Os frameworks mais usados são: **Libxslt** (Gnome), **Xalan** (Apache) e **Saxon** (Saxonica). Para explorar esse tipo de vulnerabilidade, você precisa ser capaz de armazenar tags xsl no lado do servidor e, em seguida, acessar esse conteúdo. Um exemplo desse tipo de vulnerabilidade pode ser encontrado em [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/) ## Exemplo - Tutorial ```bash sudo apt-get install default-jdk sudo apt-get install libsaxonb-java libsaxon-java ``` {% code title="xml.xml" %} ``` ``` {% endcode %} ```markup CD Title The artist Da Company 10000 1760 ``` {% code title="xsl.xsl" %} ```markup

The Super title

Title artist
``` {% endcode %} Executar: ```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
``` ### Impressão digital {% code title="detection.xsl" %} ```markup Version:
Vendor:
Vendor URL:
Product Name:
Product Version:
Is Schema Aware ?:
Supports Serialization:
Supports Backwards Compatibility:
``` {% endcode %} E execute ```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/
``` ### Ler arquivo local {% code title="read.xsl" %} ```markup ``` {% endcode %} (This tag should not be translated) ```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 (Falsificação de solicitação entre sites) ```markup ``` ### Versões Pode haver mais ou menos funções dependendo da versão 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/) ## Fingerprint Faça o upload disso e obtenha informações. ```markup Version:
Vendor:
Vendor URL:
Product Name:
Product Version:
Is Schema Aware ?:
Supports Serialization:
Supports Backwards Compatibility:
``` ## SSRF (Falsificação de solicitação entre sites) ```markup ``` ## Injeção de Javascript ```markup ``` ## Listagem de diretórios (PHP) ### **Opendir + readdir** ```markup - - - - - - - - - ``` ### **Assert (var\_dump + scandir + false)** Este método é semelhante ao anterior, mas em vez de usar a função `system()`, usamos a função `assert()`. A função `assert()` é usada para verificar se uma expressão é verdadeira ou falsa. Se a expressão for falsa, a função irá gerar um erro fatal e o script irá parar. Se a expressão for verdadeira, a função não fará nada. O código abaixo usa a função `assert()` para executar o comando `var_dump(scandir('/'))`. O resultado será impresso na página. ```php ``` Este método é útil quando a função `system()` está desabilitada, mas a função `assert()` está habilitada. No entanto, é importante lembrar que a função `assert()` pode ser desabilitada em algumas configurações do PHP. ```markup
``` ## Ler arquivos ### **Interno - PHP** ```markup ``` ### **Interno - XXE** XXE (External Entity Injection) é uma vulnerabilidade que permite que um invasor leia arquivos no servidor. No entanto, em alguns casos, o invasor pode não ter acesso direto ao servidor, mas pode explorar a vulnerabilidade XXE para ler arquivos internos do servidor. Isso é possível porque o XML pode incluir entidades externas que podem ser carregadas a partir de um URL. Se o servidor estiver configurado para permitir o acesso a recursos internos, o invasor pode explorar essa vulnerabilidade para ler arquivos internos do servidor. Para explorar essa vulnerabilidade, o invasor precisa enviar um XML malicioso que inclua uma entidade externa que aponte para um arquivo interno do servidor. O servidor tentará carregar o arquivo e, se o invasor tiver sucesso, ele poderá ler o conteúdo do arquivo. Para se proteger contra essa vulnerabilidade, é importante configurar o servidor para não permitir o acesso a recursos internos. Além disso, é importante validar todas as entradas XML para garantir que elas não contenham entidades externas maliciosas. ```markup ]> &ext_file; ``` ### **Através do HTTP** ```markup ``` ```markup ]> &passwd; ``` ### **Interno (função PHP)** ```markup ``` ```markup
``` ### Varredura de porta ```markup ``` ## Escrever em um arquivo ### XSLT 2.0 ```markup Write Local File ``` ### **Extensão Xalan-J** Xalan-J é uma implementação do processador XSLT em Java. Ele suporta extensões Java que podem ser usadas em folhas de estilo XSLT. Essas extensões permitem que o processador XSLT chame funções Java definidas pelo usuário durante a transformação. As extensões Java são carregadas dinamicamente pelo processador XSLT durante a transformação. As extensões Java são definidas em um arquivo JAR separado que é carregado pelo processador XSLT. O arquivo JAR deve conter uma classe que implementa a interface org.apache.xalan.extensions.ExtensionHandler. Essa classe é responsável por manipular as chamadas de função Java feitas pelo processador XSLT. Um atacante pode explorar uma vulnerabilidade de injeção de código XSLT para carregar uma extensão Java maliciosa durante a transformação. A extensão Java maliciosa pode ser usada para executar código arbitrário no contexto do processo do servidor XSLT. Isso pode levar a um comprometimento completo do servidor. Para evitar a injeção de código XSLT, é importante validar todas as entradas do usuário que são usadas em folhas de estilo XSLT. As entradas do usuário devem ser validadas para garantir que elas não contenham código malicioso. Além disso, as extensões Java devem ser desativadas ou restritas a um conjunto limitado de classes confiáveis. ```markup Write Local File ``` Outra forma de escrever arquivos no PDF ## Incluir XSL externo ```markup ``` ```markup ``` ## Executar código ### **php:function** ```markup ``` ```markup
``` Executando código usando outros frameworks no PDF ### **Mais linguagens** **Nesta página, você pode encontrar exemplos de RCE em outras linguagens:** [**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)** ## **Acessando funções estáticas PHP de classes** A seguinte função chamará o método estático `stringToUrl` da classe XSL: ```markup ``` ## **Lista de Detecção de Força Bruta** {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %} ## **Referências** * [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 🎥 * Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).