Explotando XXE con archivos DTD locales

1.¿Qué es XXE?

2.¿Qué es un DTD?

3.Explotando XXE con archivos DTD locales

4.Referencias

1. ¿Qué es “XXE”?

Concepto

XXE se refiere a un ataque de falsificación de solicitud de servidor (SSRF), mediante el cual un atacante es capaz de causar:

  • Denegación de servicio (DoS)
  • Acceso a archivos y servicios locales o remotos

Una vulnerabilidad de XXE consiste en una inyección que se aprovecha de la mala configuración del intérprete XML permitiendo incluir entidades externas, este ataque se realiza contra una aplicación que interpreta lenguaje XML en sus parámetros.

2. ¿Cómo se detecta esta vulnerabilidad?

La siguiente imagen muestra una petición realizada mediante el método POST:

El Content Type es de tipo text/xml, application/xmlestos son indicadores que nos permiten verificar, cómo los parámetros son enviados por la petición a un intérprete de XML, adicionalmente también puede darse al parsear archivos como JSON a XML e inyectar el payload en el sitio web.

3. Explotando XXE con archivos DTD locales

Para este ejemplo podemos observar cómo se está enviado una etiqueta de texto mediante el método “GET” a un intérprete de XML

Para comprobar que la instancia es vulnerable cambiaremos la etiqueta <test> y utilizaremos el siguiente payload:

<!DOCTYPE foo [ <!ELEMENT foo ANY> <!ENTITY bar "Fieras">  <!ENTITY barxee "&bar; XEE-SIA" > ]> <foo> &barxee; </foo>

LFI (Local File Inclusion (Revelación de datos seguros / divulgación de archivos ))

Volvemos a modificar el payload para intentar obtener información crítica del sistema. La siguiente petición solicitará al servidor  la lista de usuarios del archivo /etc/passwd

<!DOCTYPE foo  [<!ENTITY bar SYSTEM "file:///etc/passwd">]> <foo>&bar;</foo>           

Las entidades externas permiten leer archivos arbitrarios del sistema (si el analizador xml tiene derechos de lectura para el archivo)   

SSRF (falsificación de solicitud del lado del servidor)

Las entidades externas permiten realizar ataques de SSRF, al realizar una solicitud a la red interna desde el servidor XML de análisis del servidor web (es decir, realizar solicitudes desde la red interna, sin pasar por la protección del perímetro)

De esta manera se confirma que las entidades externas están activadas, esto significa que se permiten conexiones a sistemas remotos desde el servidor vulnerable y es posible usar una DTD externa para extraer archivos locales a través de solicitudes web. Esta técnica nos permitirá cargar cualquier recurso de red desde un host que controlamos. Los recursos se pueden alojar en un servidor HTTP, servidor FTP… etc.           

Cross-site Scripting XSS

Esta inyección también puede desencadenar en ejecución remota de código: (Cross-site Scripting XSS)

Payload:

<test> $lDOMDocument->textContent=<![CDATA[<]]>script<![CDATA[>]]>alert('XSS')<![CDATA[<]]>/script<![CDATA[>]]> </test>

DoS… verás que de risas… 😀

Encadenando entidades XML, sería posible agotar los recursos de memoria del servidor y llegar a causar una denegación del servicio.

4. Referencias

Deja un comentario