[XSS] Bypassing de Magics Quotes y otros filtros

Iniciado por @Sthéfano, 19 Julio 2011, 09:59 AM

0 Miembros y 1 Visitante están viendo este tema.

@Sthéfano

[XSS] Bypassing de Magics Quotes y otros filtros



Introducción

Para comenzar, repasemos la definición de qué es un XSS...

"XSS es un ataque basado en explotar vulnerabilidades del sistema de validación de HTML incrustado. Su nombre original "Cross Site Scripting", y renombrado XSS para que no sea confundido con las hojas de estilo en cascada (CSS), originalmente abarcaba cualquier ataque que permitiera ejecutar código de "scripting", como VBScript o javascript, en el contexto de otro dominio."

Es decir, la vulnerabilidad del XSS consiste en poder poder inyectar código HTML o código de cualquier lenguaje scripting (javascript, VBscript, etc) que nuestro navegador interpretará, o en el caso de que sea XSS persistente (por ejemplo un XSS a nivel foro o a nivel de GuestBook, donde el código permanece) dentro del propio archivo vulnerable. La importancia de este ataque reside, en por ejemplo, el robo de cookies, u otras acciones...

Pero, los webmasters crean filtros para evitar que usuarios maliciosos puedan inyectar códigos que exploten esta vulnerabilidad. Llegamos así a las llamadas magic quotes, pequeños filtros que evitan el uso de las comillas y de /, transofrmándolas en \ o en \".

También existen otros filtros, los cuales imposibilitan el uso de caracteres no numéricos, etc, en este texto os vamos a dar algunas ideas de como soltear estos incovenientes.



Luchando contra las Magic Quotes

Para empezar, por simple lógica, si la web cuenta con magics quotes, los tags de HTML basados en elementos que necesiten de un cierre con </tag>, porque al sustituir nuestra /, el tag dejaría de funcionar.

Es por ello que debemos de acudir a aquellos elementos vacios tipo <img>. En el caso de usar <img> forzaremos la ejecución de código malicioso aprovechando el elemento onerror, que a parte de permitir ejecutar código maligno, no necesita ser cerrado. Para poder utilizarlo, necesitaremos forzar un error en el tag que lo englobe. En nuestro caso hemos dicho que ibamos a utilizar <img>.

El error que vamos a utilizar es la imposibilidad de cargar una imagen, porque la ruta no es válida. Podríamos hacerlo de esta forma:

Código (javascript) [Seleccionar]
<img src=. onerror=alert(69)>

Como la ruta "." no permitirá cargar una imagen, dará error y se ejecutará lo que pongamos en onerror (en este caso el típico alert). Como podemos ver ya hemos saltado esta magic quote y podemos ejecutar lo que queramos.



Bypasseando filtros de caracteres especiales y no numéricos

Existen otros filtros que sustituyen, o directamente no permiten, introducir caracteres especiales, como las comillas, o letras. Para poder ejecutar nuestros código maligno, tenemos un pequeño abanico de posibilidades, desde usar UNICODE (valor en Hexadecimal del carácter con un % delante de cada carácter), pasando por usar el valor ascii. Existe una función en javascript encargada de hacer esto a la inversa: pasar de ascii a caracter. Esta funcion es String.fromCharCode.

Su uso es muy sencillo, simplemente se colocan los caracteres en valor ascii separados por comas. Tal que así:

Código (javascript) [Seleccionar]
String.fromCharCode(X, Y, Z)

Siendo X, Y, Z, los valores. Veamos por ejemplo como sería el texto "XSS":

Código (javascript) [Seleccionar]
String.fromCharCode(88,83,83)

Para usarlo junto con nuestro alert, simplemente lo introducimos entre () del alert.



Conclusión

Como hemos podido ver, el bypassing de filtros no es algo fijo, sino que se necesita de una cierta imaginación para poder manejarnos dentro del pequeño espacio que nos deja nuestro filtro. En mi opinión lo mejor es usar HTMLENTITIES para evitar ejecutar código html.

Por último decir que esta obra está bajo licencia de Creative Commons, lo que quiere decir que está permitida su distribución, pero manteniendo su autor original, y esas cosas.



Bibliografía

  • Los poderes Secretos del XSS
  • Rompiendo barreras: Analizando la fuente y encontrando XSS's


Autor: The X-C3LL