Buenos días a todos, al menos en Boston.
Hace un par de días leí en twitter una noticia que apuntaba a una entrada del blog de Daniel Regalado (Danux Mitnick) titulado "Bypassing WAF via HTTP Parameter Pollution".
La entrada está francamente bien y trata sobre como saltarse en ciertos casos los filtros de un Web Application Firewall o WAF, es decir, un filtro que previene de ciertos ataques Web como SQL-I, XSS, XSRF, etc.
Daniel emplea para evadir el filtro envenenamiento de parametros o en inglés Parameter Pollution, donde en este caso, trata de saltarse los filtros del WAF cuando este analiza distintos valores para una misma variable de entrada. Un WAF mal programado podría procesar de forma distinta de como es interpretado por el lenguaje de programación empleado para la Web. Se puede ver como un fragmentation overlapping pero en capa de aplicación en vez de capa de red.
Para entenderlo de forma sencilla, si tenemos una variable que es "texto" podemos enviar una petición a la página web auditada introduciendo dos variables "texto" con distinto valor, como se puede ver en la siguiente petición Get:
http://www.paginafictica.com/index.php?texto=hola&texto=adios
Una vez se conoce el funcionamiento del WAF, y por tanto si realmente realiza las cuatro comprobaciones o solo algunas, sabremos si es posible o no saltarse las restricciones e inyectar el parametro deseado.
Llegado a este punto será necesario saber como funciona la tecnología empleada para el desarrollo de la página. Daniel hace una tabla indicando el funcionamiento de cada una de las tecnologías, la cual la podeis ver en su entrada indicada al principio, pero el resumen básico sería el siguiente:
- PHP: se queda solo con el valor de la última variable (última ocurrencia).
- ASP y .NET: se queda con el valor de la suma de todas las variables (todas las ocurrencias).
- JSP: se queda solo con el valor de la primera variable (primera ocurrencia).
- Python y Perl: se crea un array.
Por lo que si sabemos que en el ejemplo de Daniel el WAF solo analiza la primera ocurrencia, si la web emplea PHP, ASP o .Net lo único que tendremos que hacer es realizar una solicitud escribiendo dos veces la misma variable y introduciendo el vector de ataque en la segunda ocurrencia. Por descontado habrá que tener cuidado si usamos "ASP" o ".Net" de que el
valor de la primera ocurrencia no afecte al funcionamiento del vector de
ataque:
http://www.paginafictica.com/index.php?texto=hola&texto=XSS
La verdad que me ha parecido una buena entrada, sencilla, útil y muy bien explicada por parte de Daniel. Recomiendo seguir a esta persona en Twitter y a su blog.
¡Un saludo!
PD: ya tengo asignado a un tutor para el Gold GCIA... y que tutor... ¡un crack!
No hay comentarios:
Publicar un comentario