Empezando con XML External Entity (XXE 2)
Como vimos en el primer articulo de la serie sobre XXE, la vulnerabilidad de XML External Entity o XXE (como se la conoce) se basa en un sistema deficiente al parsear los XMLs que recibe la aplicación web, en este post veremos como ejecutar un ataque para explotar esta vulnerabilidad.

Atacando un XML External Entity (XXE)
Para nuestras pruebas de como explotar un XXE usaremos WebGoat 8.0 en su sección de XXE y para interceptar y modificar las peticiones usaremos BurpSuite. Puedes descargarte el CTF WebGoat en su pagina de github

Primero haremos una petición legitima para ver que formato tendría:

Como podemos ver el texto que hemos introducido se incluye en el cuerpo de la petición dentro del tag <text>
y del tag <comment>
Si modificamos la petición usando el repeater de Burp y creando una GENERAL EXTERNAL entity (sin olvidarnos de usar los tags validos) que referencia a la raíz del sistema de archivos como nos pide WebGoat obtenemos:

En una maquina que tuviera un XXE y no estuviera especialmente preparada para ello como WebGoat podríamos leer cualquier archivo con los permisos del usuario que ejecuta el parser (normalmente los del servidor web) por ejemplo /etc/passwd. En el caso de WebGoat solo podemos leer la raíz del sistema de ficheros "file:///"
.
Por ejemplo, el payload para extraer el fichero /etc/password seria asi:
1
2
3
4
5
6
<?xml version="1.0"?>
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<data>&file;</data>
También podríamos usarlo en sistemas windows:
1
2
3
4
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo>
Puedes encontrar más payloads aquí
Hasta aquí, este post, seguiré avanzando más sobre XXE en el proximo de la serie.
En este post ha colaborado un amigo pentester llamado Rafa Marti.