Cross-Site Scripting (XSS)
El término Inyección de Entidades XML Externas (XXE)
El término Inyección de Entidades XML Externas (XXE) se refiere a una vulnerabilidad de seguridad en la que un atacante puede manipular datos XML maliciosos para acceder a recursos del sistema que normalmente estarían fuera de su alcance. Esta debilidad suele aprovecharse en aplicaciones que procesan datos XML, como servicios web o aplicaciones web.
Un ataque de XXE implica inyectar una entidad XML maliciosa en una solicitud HTTP, que luego es procesada por el servidor. Esto puede llevar a la exposición de información sensible. Un ejemplo sería cuando un atacante inserta una entidad XML que hace referencia a un archivo en el sistema del servidor, lo que le permite obtener información confidencial de dicho archivo.
La falta de una adecuada validación de entrada en las aplicaciones web es un caso común en el que los atacantes pueden aprovechar XXE. Esto permite a los atacantes inyectar entidades XML maliciosas que hacen referencia a recursos del sistema a los que el servidor tiene acceso. Como resultado, el atacante podría acceder a información delicada, como contraseñas, nombres de usuario y claves de API.
Es importante destacar que en algunas ocasiones los ataques de Inyección de Entidades XML Externas (XXE) no siempre resultan en la exposición directa de información sensible en la respuesta del servidor. En estos casos, el atacante puede necesitar utilizar técnicas adicionales para obtener la información confidencial de manera «a ciegas».
Un método común para llevar a cabo un ataque XXE de forma «a ciegas» es enviar peticiones desde el servidor diseñadas especialmente para conectarse a una Definición de Tipo de Documento (DTD) definida externamente. La DTD se emplea para validar la estructura de un archivo XML y puede contener referencias a recursos externos, como archivos en el sistema del servidor.
Este enfoque de ataque XXE «a ciegas» puede ser más lento y requerir más esfuerzo que una explotación directa de la vulnerabilidad. Sin embargo, puede ser efectivo cuando el atacante tiene una idea general de los recursos disponibles en el sistema y busca obtener información específica sin alertar a las defensas de seguridad.
Adicionalmente, en algunos casos, un ataque XXE puede servir como un vector para explotar una vulnerabilidad conocida como Falsificación de Solicitudes del Lado del Servidor (SSRF). En este tipo de ataque, un atacante puede hacer que el servidor realice solicitudes HTTP a direcciones IP o puertos internos de la red de la víctima. El ataque XXE puede desencadenar un SSRF al insertar una entidad XML maliciosa con una referencia a una dirección IP o puerto interno en la red del servidor.
Mediante una explotación exitosa de un SSRF, el atacante puede enviar solicitudes HTTP a servicios internos que normalmente no estarían disponibles para la red externa. Esto le permite obtener información confidencial y, en algunos casos, incluso asumir el control de estos servicios internos.
Aquí tienes el enlace al repositorio de GitHub correspondiente al laboratorio que implementaremos en esta sesión para practicar esta vulnerabilidad: Enlace al repositorio de GitHub.
Nos registramos en la pagina
Capturamos un registro en una web y vemos esto en estructura xml
Jugamos con entidades
E intentamos inyectar mediante un wrapper ver información de archivos internos de la máquina
El servidor interpreta estas etiquetas como output lo que hayas introducido como input
XXE OOB BLIND
A veces no las muestra y entran en juego las XXE OOB (a ciegas) como las sqli, montando un servidor con Python y las almacenarías en tu equipo.
En el caso de que no pueda declarar la entidad con los % podría ponerlas de la siguiente manera:
Aquí lo que estamos haciendo es una inyección a ciegas mandándonos el output a nuestro servidor Python
Como atacante vamos a declarar un archivo malicious.dtd indicando lo que queremos que haga
Nos va a enviar en base64 el output del contenido /etc/passwd a nuestro servidor:
Llamamos a la entidad eval y exfil para que cargue puesto que es externo.
Este archivo se llama malicious.dtd
Y lo recibimos en base64 en nuestro servidor, solo falta decodificarlo
Más información sobre la explotación de XXE y otras técnicas de seguridad se puede encontrar en el siguiente recurso:
