Ya hemos visto una primera parte y una segunda parte en esto del bypass básico XSS en aplicaciones web.
Habíamos visto como modificar el valor maxlength para ampliarlo en las webs que no podíamos poner mas de X caracteres y así saltarnos ese filtrado.
También vimos como jugando con mayúsculas y minúsculas podíamos evadir otro tipo de filtros. Bien, pues vamos a ir mas allá.
Supongamos que tenemos (en nuestro laboratorio) una web en la que mediante filtros no nos deja emplear la palabra script, ni tampoco los caracteres " "(comillas dobles),' ' (comillas simples) < > (mayor y menor qué). En principio pensareis que estamos bien jo... fastidiados ya que si no podemos llegar a escribir el típico <SCRIPT>alert(“XSS”);</SCRIPT>, que precisamente contiene todo lo que mediante filtros nos están quitando, no podemos hacer nada.
Veamos una forma sencilla para saltarnos ese tipo de filtrado.
Lo que vamos a hacer es jugar con el String.fromCharCode de javascript, que lo que hace es devolver una cadena creada mediante el uso de una secuencia de valores Unicode especificada.
Traducido al castellano esto quiere decir que convierte un carácter (letra) en un número unicode (número). Por ejemplo, la letra X equivale al número 88 en la codificación unicode. De manera que el típico <SCRIPT>alert(“XSS”); </SCRIPT> queda convertido en:
alert(String.fromCharcode(88,83,83)); ya que la X es 88 y dos S son 83 (por eso aparece dos veces).
Así qué esto extrapolado a nuestra web, vuelve a hacerla vulnerable a pesar de los fitros.
Hemos visto otro bypass sencillo. Pasamos de estar "pillados" a buscar una solución.
Recordar que esto es con fines educativos, no para andar tirando scripts por ahí a lo loco. Espero que os haya gustado y lo pongáis en practica en vuestro laboratorio.
Roberto García (@1GbDeInfo)