Vous êtes sur la page 1sur 14

Evadiendo Filtros Anti XSS

Bueno en esta entrada la idea es explicar como funcionan algunos filtros que usan a la hora de
querer prevenir un ataque XSS ( Cross Site Scripting ) se le dieron las siglas de XSS para no
confundirlas con CSS ya que CSS hace referencia a las Hojas de Estilo. Para quienes no sepan que
son las Hojas de estilo en trminos claros es todo el entorno grfico que se le puede dar a una
pgina Web. como los colores, tamao de los botones, tipo de letra, e.t.c..
Ya teniendo mas claro el concepto de CSS ahora si pasemos a lo que venimos..

Se considera como una de las vulnerabilidades mas comunes actualmente en aplicaciones web. Por
qu puede ser considerada como una vulnerabilidad ? por medio de un ataque XSS se puede llegar
a robar cookies, en las cuales se almacenan los inicio de sesiones y si el login de la web en la cual
se ha robado las cookies funciona precisamente con auto logueos por medio de cookies, fcilmente
un usuario mal intencionado podra llegar a iniciar sesin en el sitio sin tener acceso a la
contrasea de el administrador de la web. Aparte de que se puede llegar a hacer un Floodeo desde
un simple ataque XSS y as mismo dejarlo DOWN.
He montado un entorno local, en el cual estoy armando distintos tipos de laboratorios para poder
testear las tcnicas que se encuentran en internet ( en internet hay de todo solo es saber buscar ), y
en esta oportunidad trataremos el tema ya mencionado XSS. el laboratorio consta de varios
niveles de filtros, en los cuales veremos distintos tipos de vectores de ataque para evadir esos filtros
anti XSS ( para las personas que saben de programacin, a lo mejor pensarn Vector de
ataque ? se puede atacar con un vector ? pero como ? luego un vector no es donde podemos
almacenar valores ? ). La misma duda me surgi y pues investigando un poco mas, me tope con una
gran persona como lo es Dedalo y me dijo lo siguiente: esos vectores que conoces de
programacin djalos en arrays que en realidad se llaman arrays ( arreglos ) , y vector es la
forma de como atacamos ese filtro que queremos saltar o evadir !! . (algo as me dijo xD el
caso fue que me qued clarsimo xD) entonces espero les quede claro este termino.
un ejemplo de un vector de ataque podra ser el mas que conocido
<script>alert(xss)</script>

Caso comn :
Cdigo PHP :
<?php
$var = $_GET['vuln'];
echo $var
?>

recibimos el valor que se enva desde un formulario por medio del input llamado vuln va GET , lo
guardamos en nuestra variable var y tal cual como lo recibe lo imprime.
Para este caso usaremos el vector ya mencionado <script>alert(r00tc0d3rs)</script>:
Se puede apreciar en la url el vector de ataque, en este caso no se uso un vector que evadiera un
filtro ya que a simple vista no lo hay..

Caso 2 :
Cdigo PHP :
<?php
$var = str_replace (array(<script>, </script>), , $_GET['vuln']);
echo $var
?>

recibimos el valor que se enva desde un formulario por medio del input llamado vuln va GET , lo
guardamos en nuestra variable var pasndolo por la funcin str_replace, lo que hace esta funcin
es que remplaza strings por lo que queramos, en este caso se ha implementado para remplazar las
etiquetas script de esta manera <script> </script> todo lo que venga como parmetro y que
contenga en su texto esas etiquetas se remplazar en este caso por un espacio. entonces recibe
limpia y se imprime
Vector de ataque : primero verificaremos como funciona el filtro, para ello probaremos con el
mismo del anterior <script>alert(r00tc0d3rs)</script>
Como podemos observar nos ha arrojado como resultado
alert(r00tc0d3rs)

eso ya nos dice mucho, y pues quiere decir que est limpiando el string y que en esa limpiada del
string se encuentran <script> y su clausura </script>, entonces buscaremos otro vector de ataque
ahora veremos que pasa si ejecutamos :
<body onload=alert(r00tc0d3rs) />

estamos mandando una etiqueta body con un atributo onload o bien lo podemos llamar como un
evento de javascript, es decir que cuando ejecute la etiqueta en este caso <body > salte un alert en
este caso saltara r00tc0d3rs veamos:
Claramente podemos ver el vector de ataque en la url y pues a su misma vez su resultado.
Caso 3 :
Cdigo PHP:
<?php
$var = $_GET['vuln'];
echo $var;
?>

Cmo podemos apreciar es el mismo cdigo de nuestro caso comn, pero ahora el truco est en el
cdigo HTML, limitndonos la cantidad de caracteres.
Cdigo HTML :
<form action=filtro3.php method=GET>
<input type=text name=vuln maxlength=10 >
<input type=submit value=enviar>
</form>

Tenemos un input tipo texto llamado vuln, que es por donde introduciremos nuestro vector de
ataque, pero !! como vemos solo nos permite 10 caracteres como Mximo !! solo queda modificar
ese atributo de ese input para que nos deje mandar una consulta con mayor numero de caracteres de
tal manera que nos permita introducir un vector de ataque, en este caso
<script>alert(r00tc0d3rs)</script> o el que se les ocurraVeamos :
Como podemos ver se ha modificado el valor de Maxlength que estaba en 10 y lo hemos puesto en
50, para que nos deje introducir nuestro vector
y como resultado.
Caso 4 :
En este caso nos topamos con el tpico buscador que todo lo que mandamos como parmetro de
bsqueda, nos lo imprime en un input.
Cdigo PHP :
<?php
$var = $_GET['vuln'];
?>
<FORM>
<h2>Resultado de la Busqueda </h2>
<input VALUE=<?php echo $var; ?>>

Para quienes comprenden un poco de PHP y HTML pueden ver que se captura y se guarda el valor
en la variable var y luego se imprime lo que se captur dentro de un input , quedando de la
siguiente manera :

Como se puede observar hemos usado el siguente vector : <img src=. onerror=alert(/r00tc0ders/)>
. Ahora si vemos que todo lo que vamos a mandar como parmetro de bsqueda lo pondr dentro
de otro input, solo quedara ver la manera de saltar filtro , entonces veamos el input en el que se
imprime est declarado de la siguiente manera :
<input VALUE=<?php echo $var; ?>>

Que pasara si como parmetro mandamos >; ? veamos


el input quedara as :
<input VALUE=">; >

esto ya nos indica que hemos cerrado nuestro input, ejecutando en adelante lo que ingresemos, en
este caso un alert . es decir:
<input VALUE=">;

<img src=. onerror=alert(/r00tc0d3rs/) > >

usamos la etiqueta de imagen, ahora estamos ocasionando un error ya que indicamos la ubicacin
de la imagen errneamente, por eso hacemos uso del evento de javascript onerror ya que a la hora
de no cumplirse correctamente lo que indicamos salte el alert en este caso saltara /r00tc0d3rs/ .
Veamos :
Bueno hasta aqu llega este post, esto lo hacemos con la intencin de que cada uno pueda probar si
es realmente seguro el mtodo que empleamos en nuestros forms a la hora de mandar consultas.
En internet Podemos encontrar varias maneras de evitar un ataque XSS, podemos implementar el
uso de magic quotes , htmlentities , strip_tags . Solo es buscar la manera de
implementarlos de forma segura. ACLARANDO que el uso de las funciones mencionadas NO
asegura prevenir un ataque XSS por eso hago nfasis en que se debe buscar la manera de
implementarlos de una forma segura.
a continuacin dejo una lista de algunos vectores de ataque :
<script>alert(document.cookie)</script>

<body onload=alert(/xss/)>

<img src=x onerror=alert(/xss/)>

<input value=<body onload=alert(/xss/)>>

<input value="><body onload=alert(/xss/)>>

<input value=" onmouseover=alert(/xss/)>

/><script>alert(String.fromCharCode(114,48,48,116,99,48,100,51,114,115))</script>

><script>document.documentElement.innerHTML=xss;</script>

Recuerden lo primordial es ver como funciona el filtro que se haya implementado para luego pensar
en construir un vector que nos permita saltearlo.
pdt: si hay errores que alguien por favor me lo diga, no soy perfecto y se me escapan cosas -
cualquier otra informacin ser bien recibida !!

Vous aimerez peut-être aussi