XXE

XML External Entity (XXE) Injection

<?xml version="1.0" encoding="UTF-8"?>
<email>
  <date>01-01-2022</date>
  <time>10:00 am UTC</time>
  <sender>john@inlanefreight.com</sender>
  <recipients>
    <to>HR@inlanefreight.com</to>
    <cc>
        <to>billing@inlanefreight.com</to>
        <to>payslips@inlanefreight.com</to>
    </cc>
  </recipients>
  <body>
  Hello,
      Kindly share with me the invoice for the payment made on January 1, 2022.
  Regards,
  John
  </body> 
</email>

XML DTD

XML Entities

Local File Disclosure

Reading Sensitive Files

Reading Source Code

Remote Code Execution with XXE

Other XXE Attacks

Advanced File Disclosure

Advanced Exfiltration with CDATA

Blind Data Exfiltration

Si, por ejemplo, el archivo que queremos leer tuviera el contenido de XXE_SAMPLE_DATA, entonces el parámetro file contendría sus datos codificados en base64 (WFhFX1NBTVBMRV9EQVRB). Cuando el XML intente hacer referencia al parámetro oob externo desde nuestra máquina, solicitará http://OUR_IP:8000/?content=WFhFX1NBTVBMRV9EQVRB. Finalmente, podemos decodificar la cadena WFhFX1NBTVBMRV9EQVRB para obtener el contenido del archivo. Incluso podemos escribir un sencillo script PHP que detecte automáticamente el contenido codificado del archivo, lo decodifique y lo envíe al terminal:

Por lo tanto, primero escribiremos el código PHP anterior en index.php, y luego iniciaremos un servidor PHP en el puerto 8000, de la siguiente manera:

Ahora, para iniciar nuestro ataque, podemos utilizar un payload similar al que utilizamos en el ataque basado en errores, y simplemente añadir &content;, necesario para referenciar a nuestra entidad y hacer que envíe la petición a nuestra máquina con el contenido del fichero:

Automated OOB Exfiltration

Ahora, podemos ejecutar la herramienta con las banderas --host/--httpport siendo nuestra IP y puerto, la bandera --file siendo el archivo que escribimos anteriormente, y la bandera --path siendo el archivo que queremos leer. También seleccionaremos las banderas --oob=http y --phpfilter para repetir el ataque OOB que hicimos anteriormente, de la siguiente manera:

Last updated