viernes, 17 de febrero de 2012

¡Resolviendo Reto CSRF de elhacker.net!

Estos días he estado liado con el reto sobre encontrar y explotar un csrf en elhacker.net... Aunque finalmente se podría decir que he quedado segundo porque he dejado todo a medias (con un vídeo para demostrar como lo hacía) y al final ha ganado otra persona que lo desarrolló hasta el final (desde aquí le dejo mis felicitaciones)... :)

Bién, veamos en qué consiste el reto:
Tenemos que encontrar un CSRF que permita cambiar la firma de usuario, yo empecé con un logout. Asique primeramente me hice un formulario en html para desloguear al usuario X en cuestión:

El formulario en cuestión cuando el Referer es nulo funciona bién, sin embargo si subía el html a algún hosting para ejecutarlo desde allí me daba error de referencia... tenía que solucionarlo...

Tiré de xmlhttprequest pero nada... por políticas de seguridad el hecho de cambiar el referer cuando este ya existe está desactivado... me estaba volviendo loco... ¿que hacía?
Lo dejé por un tiempo para no bloquearme y salté a obtener el sesc token... También nos hacía falta!!


Mi mente directamente saltó a una idea... usar un iframe, leer el código fuente de el y enviarlo a un host para obtener el token...





Pero me salto a probarlo y... NADA... No carga... Sin embargo el resto de partes que no pertenecen al foro si funcionan... asique tras darle vueltas... me olvido de esa idea...
No sabía como obtener el token tampoco... entonces me acordé de algo... un famoso bug en facebook que consistía en usar una imagen como php a la que se le pasaban por POST datos importantes...

Me pongo a pensar... ¿Se le pasará algo por post a la imagen? Hago un pequeño script en php y me pongo a loguear todo a un txt. Luego la cargo en el foro haber si realmente se le envía algo.












La pongo como una imagen usando los bbcodes [img]url[/img] y recargo un par de veces la página para ver si obtiene algo... Comento, me cito, etcétera. 

Salto al log haber que ha encontrado...











No se pasa nada por POST como pensaba... sin embargo en el referer cuando citamos se envía el sesc que claramente no debería de estar ahí...
Lo dejo un rato haber como se desenvuelve y me encuentro con un par de sesc tokens de diferentes usuarios que me han citado...
Cojo el formulario llamado "Simple CSRF Logout" y salto a probarlo desde mi propio navegador... y funciona...



Perfecto... pero cuando lo subo y lo ejecuto desde un host... No funciona!!
Da error de referencia... asique eso me dice que está comprobando el referer...
Una de las pistas que se dieron al final fué que se comprobaba el referer, pero no que fuese válido, solo que formase parte del foro. ^^

Tiro de xmlhttprequest y lo intento modificar... pero las políticas de seguridad me lo impiden...



Pero nada de nada... tampoco me estaba funcionando... asique ya que el usuario lo iba a ejecutar, que importa? Que lo ejecute desde su propio navegador :p




Asique adapté un poco el código html de m0rf y lo envié por mail.... Lo envio por mail...

Veamos... 


Al clickar nos llevaba a descargar el formulario y se ejecutaba en nuestro navegador el cual cambiaba la firma. Y ya estaba... :) He quedado segundo porque se podría haber hecho sin tener que descargar el formulario (y no es dificil) y porque además no he hecho el reto completo y solo un vídeo... ^^




Esta vulnerabilidad también está presente en otros foros (no solo smf) asique administradores héchenle un ojo si no quieren que empiecen a enviar mensajes unos por otros... y más... :p

En resumen, me ha gustado mucho el reto. Ha sido entretenido, y teníamos vía libre para probar todo lo que necesitásemos en elhacker... Muchos foros deberían de hacer concursos así cuando alguien les reporta una vulnerabilidad (no de carácter muy serio)... :p

¡Un saludo, espero vuestros comentarios!
  • Stumble This
  • Fav This With Technorati
  • Añadir a Del.icio.us
  • Digg This
  • Añadir a Facebook
  • Añadir a Yahoo

2 comentarios:

Carlos dijo...

Muy bueno, y es cierto, se lo pusiste en bandeja, el otro usuario estaba rendido como saltar la referencia y no avanzaba mas, hasta que vimos tu video del uso de popup y voila, el otro gano y se le atribuyo ese metodo como suyo xD

Saludos

P0is0n dijo...

@Carlos: Quizás xD No me quejo, me alegro de que alguien llegase a acabarlo del todo (y que mejor que un tipo como "Yoya" que por lo menos entiende del tema)... :´p

Muchas gracias por comentar ^^

Publicar un comentario en la entrada