miércoles, 25 de enero de 2012

XSS + Spoofing IP + XFF = BOOM!

Pasar demasiado tiempo en el pc, según los médicos, aumenta la fatiga visual y además puede provocar problemas visuales permanentes. Pero de lo que los médicos no quieren hablar, es de que pasar demasiado tiempo enelpc, además aumenta de forma alarmante, la paranoica visual al visitar determinados dominios vulnerables.

Si os muestro el siguiente ejemplo:

http://enelpc.com/index.php?id=1

Os imagino como auténticos posesos probando inyecciones de todo tipo, hasta que nos devuelva el tan esperado error, y así terminar diciéndonos a nosotros mismos ¡Genial! ¡lo he conseguido! ¿y ahora qué? ¿Brazzers?

Pues bien, la entrada de hoy, se me ocurrió con una de mis fantásticas tardes como desarrollador sobre PHP (no sé programar, pero Google sí). Así que la aplicación no era más que, un error 403 que recogiese la IP, la fecha, la hora y el navegador desde el que se realizaba el ataque.

Supongamos que un tipo muy malo ataca mi servidor con una denegación de servicio, Mod Evasive le enviará a un 403 y que por otro lado tiene un delay en cada petición tras unos 10 proxys con los que consigue seguir atacando a mi sistema, con lo que cada intercepción del ataque por parte de Mod Security, irán destinados al mismo 403.

Yo soy un administrador manco como la mayoría, y el único log al que acudir, es el creado por dicha aplicación... ¡sí! ¡Ya sé que access y error log también existen! ¡Pero hoy soy humano como un administrador descuidado! Así que si inserto en el código la variable de entorno REMOTE_ADDR, devolverá la IP del visitante pero... ¿Es la real? La única forma de saber que no se encuentra detrás de un proxy, sería incorporando otra variable llamada HTTP_X_FORWARDED_FOR.

Hasta este punto todo nos parece genial ¡vamos a capturar la IP real que se encuentra detrás del Proxy del Hacker! Pero se nos olvida una cosa... ¿Como el proxy transporta la IP real? Pues bien, la única forma es en el Header de la petición y como todos sabemos, los Headers son modificables.

Si se produce un IP Spoofing en la petición, al ocupar el espacio de X Forwarded For, la IP real pasaría a ser la de proxy y la spoofeada en primer lugar. Intenté un simple tag script y este es el resultado:


Al no filtrar correctamente la variable recogida del Header, la escribe directamente al código y la interpreta. Algo similar ocurre con la cabecera Referer, la cual también es vulnerable a inyecciones si esta no se encuentra filtrada correctamente.

Para la corrección, programé nada más simple que una función que filtrase lo mostrado en el echo, que viniese directamente de la variable vulnerable.


De esta forma, nos libraríamos de los ataques de script.



Ataques.log, me quedó así de bonito con el parser :)


Y no pude evitar probar el fallo, en los famosos dominios españoles que facilitan nuestra IP pública, como Vermiip.


O miip.


Aunque aquí nadie se salva y See-my-ip, también se lo traga.


Si el tema de scripts, te dejó insatisfecho, siempre puedes navegar spoofeando la IP real a enviar a un proxy ruidoso, y asegurarte aun más la anonimidad en la red. Firefox no podía ser menos, y cuenta con un par de plugins públicos que facilitan el trabajo.

https://addons.mozilla.org/en-US/firefox/addon/x-forwarded-for-spoofer/eula/36927?src=dp-btn-primary

https://addons.mozilla.org/en-US/firefox/addon/x-forwarded-for-spoofer-242700/


También podremos usar un simple modificador de cabeceras y agregar nuestro X-FORWARDED-FOR predeterminado.

https://addons.mozilla.org/en-US/firefox/addon/modify-headers/eula/24052

Hijo... ¡no hagas maldades por ahí fuera!
¡No mama! Hoy me quedo estudiando enelpc...


Saludos 4n4les! ;)

6 comentarios:

  1. Excelente articulo y excelente blog.Completisimo haber si tengo tiempo y lo pongo en practica.Una cosa cuando dices : ¿y ahora qué? ¿Brazzers? ¿ a que te refieres? porque hay una forma de sacar bases de datos ( pass files) de paginas a traves de SQL Injection.¿Te refieres a eso? Saludos :)

    ResponderEliminar
    Respuestas
    1. Muchas gracias Angelo!

      Sobre la pregunta que me hiciste... digamos que el primer resultado de Google te dará la respuesta ;)

      Saludos!

      Eliminar
  2. Al leer vulnerabilidades en php y todo lo demas pense que mientras leia ibas a utilizar el Havij, pero en vista que utilizaste el Acutenix me quede sorprendido con el Vermiip. Lastima que en mi pais no haiga un programa asi para sacar la IP publica, pero en fin...despues de esto, creo que ya tengo mas de 5 opciones como vulnerar una web jojo.! (Y)

    ResponderEliminar
  3. BUenas,
    ¿Habría alguna forma de modificar el X-Forwarded-For Spoofer para la última versión de Mozilla firefox?

    La versión que publicas, es muy antigua no sirve para versiones posteriores a 2008...

    Un saludo y excelente blog!!

    ResponderEliminar
    Respuestas
    1. Firefox está como loco con sus actualizaciones... según las indicaciones, en uno de ellos aparece que es compatible con Firefox 10.0.2, pero más abajo aparece "Not available for Firefox 10.0.2".

      Habrá que bajar de versiones para hacer cosas malas, esto de los add-ons tarda.

      Saludos y gracias!

      Eliminar
  4. Muchas gracias, eso habrá que hacer...
    Por cierto, a ver si nos sorprendes con algun "tuto" del estupendo "charles web debugging proxy" (y no precisamente para hacer trampas en jeugos de facebook).
    Gracias y mucho ánimo con el blog que es de lo mejorcito de la red.

    ResponderEliminar