Sto esaminando una vulnerabilità in un'applicazione che riecheggia un nome file fornito dall'utente senza disinfettare il nome file.
es. un file chiamato test-<script>alert("evil");.txt
risulterà in quel testo riecheggiato nell'XHTML. (Nel caso in cui sia importante, questo particolare documento viene fornito come text / html e il doctype è xhtml1-transitional.)
Il problema è che il tag <script>
non può essere chiuso perché il nome file non può contenere /
. Ciò significa che lo script non viene eseguito perché tutto ciò che segue è parte dello script e tutto il codice HTML sarà JS non valido.
(FWIW, sto anche studiando l'uso delle sottodirectory come metodo per inserire la barra nell'applicazione, ma sembra che tagli la dirname dal file prima di essere visualizzata. Heh - avere un file chiamato ./<script>alert("evil subdir?");</script>.txt
fa mi sento un po 'nauseato ...)
Basati su alcuni cheat XSS , ho provato diversi modi per codificare la barra in modo che possa apparire nel nome del file, ma deve essere interpretato dal parser HTML come tag di chiusura. Senza fortuna; i caratteri sono inseriti letteralmente nell'HTML senza alcuna codifica / decodifica intermedia.
Anche senza la barra ho trovato tre o quattro modi di sfruttarlo, ma finora richiedono l'interazione dell'utente con quell'elemento (ad esempio onmouseover
). Rendono anche la pagina brutta perché la struttura del tag cade a pezzi. Se riesco a chiudere il tag, l'exploit è sia invisibile che automatico.
Esistono tecniche standard (ad esempio l'evasione del filtro XSS) per la chiusura di un tag senza virgolette che mi mancano?