Estoy investigando una vulnerabilidad en una aplicación que se hace eco de un nombre de archivo provisto por el usuario sin sanear el nombre de archivo.
Por ejemplo, un archivo llamado test-<script>alert("evil");.txt
dará como resultado que el texto se haga eco en el XHTML. (En caso de que importe, este documento en particular se sirve como texto / html y el tipo de documento es xhtml1-transicional).
El problema es que la etiqueta <script>
no se puede cerrar porque el nombre de archivo no puede contener /
. Esto significa que la secuencia de comandos no se ejecuta porque todo lo que sigue es parte de la secuencia de comandos, y todo ese HTML no será válido JS.
(FWIW, también estoy investigando el uso de subdirectorios como una forma de incluir la barra oblicua en la aplicación, pero parece recortar el nombre de archivo del archivo antes de mostrarlo. Heh: tener un archivo llamado ./<script>alert("evil subdir?");</script>.txt
hace Me siento un poco mareado ...)
Basándome en algunas hojas de trucos de XSS , he intentado varias formas de codificar la barra diagonal para que pueda aparecer en el nombre del archivo, pero aún así debe ser interpretado por el analizador HTML como una etiqueta de cierre. Sin suerte; los caracteres se insertan literalmente en el HTML sin ningún tipo de codificación / decodificación intermedia.
Incluso sin la barra diagonal, he encontrado tres o cuatro formas de explotarla, pero hasta ahora requieren la interacción del usuario con ese elemento (por ejemplo, onmouseover
). También hacen que la página sea fea porque la estructura de la etiqueta se deshace. Si puedo cerrar la etiqueta, el exploit es invisible y automático.
¿Existen técnicas estándar (es decir, evasión del filtro XSS) para cerrar una etiqueta sin las comillas que me faltan?