
| XSS: Saltandonos las Magics Quotes y otros filtros |
XSS: Saltandonos las Magics Quotes y otros filtros
Por Vengador de las Sombras#~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 , porque al sustituir nuestra /, el tag dejar?a de funcionar.
Es por ello que debemos de acudir a aquellos elementos vacios tipo
. En el caso de usar
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
.
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:
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 :D.
#~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?:
String.fromCharCode(X, Y, Z)
Siendo X, Y, Z, los valores. Veamos por ejemplo como ser?a el texto "XSS":
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.
Cualquier posible error que haya, o cualquier reforma que se le quiera hacer al texto:
Camaleon__81[at]hotmail[dot]com
#~Bibliograf?a:
"Los poderes Secretos del XSS" "Rompiendo barreras: Analizando la fuente y encontrando XSS?s"