viernes, 29 de marzo de 2013

Codificación doble para evadir filtros

¡Saludos!

      Lo primero es avisaros de que voy a volver al desierto en semana santa, asi que no sé si tendré acceso a internet, por lo que voy a intentar escribir entre esta noche y mañana algunos posts (como los resúmenes de los días 2 y 3 de la rooted) y dejar la publicación programada. Como no me fío, voy a probar primero con este post, a ver qué tal funciona lo de programar la publicación. Y una vez dicho esto, pasemos  a lo interesante.



     Este truco para evadir filtros es muy viejo (creo recordar que hasta salía en la vulne de IIS que explicaban en las primeras revistas Hack X Crack) pero nunca está de más volver a traerlo de vuelta para meterlo en nuestro arsenal de métodos de bypassing.

      En ocasiones nos encontramos que una petición que nosotros enviamos a una web es procesada de forma secuencial por distintas entidades. Primero nuestra petición es procesada por una de esas entidades, y el resultado es enviado a una segunda entidad que lo procesa, y así sucesivamente. Por poner un ejemplo, en el caso de un login en PHP, si simplificamos, podemos ver que primero mandamos una petición por el protocolo HTTP, la cual es resuelta en el servidor, y éste envía el resultado al script PHP, que volverá a procesarla, y de ahí a la base de datos. Si todo esto era una petición POST, en la cual pasábamos las variables user y password, el contenido de dichas variables ha sido procesado en cada etapa.


   Con la doble codificación lo que se pretende es que alguna estapa en la que es procesada la petición se decodifique y ejecute lo que queramos. Por ejemplo, imaginemos que tenemos un WAF que detecta los XSS. Podemos intentar meter una doble codificación, de tal forma que el WAF no detecte que se trata de un intento de XSS (por que esta condición no está asignada en las reglas). Despues de pasar sin problemas el filtro, será decodificado y se ejecutará nuestro XSS. De forma esquemática:

Enviamos esta petición:

Dependiendo de la configuración de las reglas, o de cómo sea el filtro empleado, no será detectado y el contenido se enviará a una primera entidad (el propio servidor, por ejemplo) que decodificará el contenido:
Y ahora esto le llega a la aplicación web que lo mostrará, de tal forma que ya incluiría nuestro XSS.

   Esta técnica como ya dije es muy vieja, pero sigue estando viva, sobretodo para explotar vulnerabilidades de Path Traversal, donde cuando intentamos mandar una petición con ../  no lo conseguimos porque el servidor lo interpreta antes de que llegue a la aplicación vulnerable.


Byt3z

PD: si a alguien se le da bien el diseño gráfico y quiere diseñar un logo para la herramienta que estoy codeando, que envíe un correo a la dirección del blog, o me contacte vía Twitter.
5 0verl0ad Labs: Codificación doble para evadir filtros ¡Saludos!       Lo primero es avisaros de que voy a volver al desierto en semana santa, asi que no sé si tendré acceso a internet, por lo ...
< >