Trabajando sobre el foro de sla.ckers.org sobre cómo crear cadenas ofuscadas de alert(1) con caracteres no alfanuméricos, los investigadores argentinos Matias A. Ré Medina y Patricio Palladino han escrito un par de posts muy interesantes para los amantes de los ataques Client-Side para hacer XSS, junto con una herramienta que está disponible online y para descarga, llamada Hieroglyphy.
La idea no es otra que conseguir codificar los payloads en ataques XSS de formas que puedan saltarse los filtros que ponga la aplicación, los filtros del WAF o los filtros que ponga el navegador que utiliza el usuario. Pero para hacer mucho más difícil la detección, se hace sin utilizar caracteres alfanuméricos, y con cadenas de ()[]{}+. Para simplificar la idea, Matias pone un ejemplo que podéis probar todos en la consola Javascript de vuestro navegador.
Para ello ha habido previamente que analizar cómo construir un alfabeto con estas secuencias, ya que hay que crear muchos elementos para poder acabar ofuscando cadenas completas de payloads. El estudio de cómo sacar los caracteres lleva a utilizar cambios ASCII, buscar subcadenas de resultados de funciones conocidas - como sacar la "p" haciendo un substring de la cadena "http:// ..." que devuelve document.location - y probando conversiones implícitas entre diferentes resultados.
Figura 2: Codificación de números con cadenas no alfanuméricas |
El estudio de esto se puede leer en el artículo: Brainfuck beware: JavaScript is after you! y aplicado para saltar WAFs en Bypassing WAFs with non-alphanumeric XSS. Para que todo sea mucho más cómodo de utilizar, han puesto disponible online la utilidad Hieroglyphy que realiza la ofuscación de cadenas Javascript siguiendo este método:
Figura 3: Ofuscando código con Hieroglyphy |
Con este trabajo los investigadores añaden un poco más de dificultad a los creadores de filtros AntiXSS, y si tu aplicación web sólo tiene como única protección un filtro personal creado por ti, deberías probar a ver si detecta este tipo de ataques.
Saludos Malignos!
Que interesante este tipo de ataques ofuscados.
ResponderEliminarEn Safari no funciona:
ResponderEliminarEn la primera imagen del post veo:
eval("aler"+(!![]+[])[+[]]("xss")
Pero me tira un error de 'expected token':
SyntaxError: Expected token ')'
Entonces lo agrego, verificando que si falta cerrar el paréntesis:
eval("aler"+(!![]+[])[+[]]("xss"))
Pero luego obtengo este error:
TypeError: 't' is not a function (evaluating '(!![]+[])[+[]]("xss")')
¿Alguna idea?
Saludos y buen post Maligno.