CTF #nullcon 2012: Programación 5

nullcon1.jpg

Bueno llegamos a la quinta prueba de la categoría y que como veremos no tiene nada de programación, a menos que te quieras crear tu propio crackeador de MD5.

La prueba consistía en lo siguiente: tenemos una página dónde introducimos cualquier texto y nos devolvía un hash. Si miramos el código fuente de dicha página una vez nos ha dado el hash, encontramos una pista:

Es decir, password en este case es el texto que nosotros introducimos, a éste se le añade un texto que no conocemos (salt) y se calcula el MD5. Nuestro objetivo es averiguar dicha salt.

Mi primera idea fue la de introducir passwords de 1 caracter. Empecé con el 1, y con el hash devuelto me fui a un par de sitios online que ofrecen búsquedas en rainbow tables, pero no encontré nada. Luego probé con el 2, 3, a y b. Nada de nada.

Luego probé con esos hashes, pero usando este script, nada de nada. Básicamente lo único que me quedaba por hacer era atacar al hash por fuerza bruta, cosa que me confirmaron en el irc.

Ingenuo de mi, ya era tarde y tiempo de irse a la cama, me saqué de la manga un script en ruby, esperando que el hash fuera de 2 ó 3 caracteres y dejé corriendo el script toda la noche.

Este es el script:

#!/usr/bin/env ruby

require 'digest/md5'

Hash = "58a813d4c223f80b1473c50f4b45749a"
mystring = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']

8.times do |c|

  mystring.permutation(c+1).to_a.each do |i| 
    digest = Digest::MD5.hexdigest("1"+i.join)
    if digest == hash
      puts i.join
      break
    end
  end

end

A la mañana siguiente no sólo no había encontrado nada, sino que además el script todavía estaba corriendo y la máquina se quería morir :(

Nada, esto es un trabajo para un “pofecioná!”. Llamemos a Juanito.

Nota: en la web oficial de John the Ripper, tenemos 2 versiones de éste: oficial y una versión mejorada por la comunidad. Esta segunda no es más que la versión oficial con una serie de parches extras creados por terceros para expandir las posibilidades de crackeo de John the Ripper. Entre ellos MD5 puro y duro que es lo que necesitamos, por lo tanto usaremos esa versión mejorada.

Por lo tanto, usaremos el hash devuelto introduciendo: 1.

echo "58a813d4c223f80b1473c50f4b45749a" > hash.txt
tuxotron@tuxotron-laptop:~/opt/john-1.7.9-jumbo-5/run$ ./john --format=raw-md5 hash.txt                                                                                                                

101f303          (?)
guesses: 1  time: 0:02:00:41 DONE (Wed Jan 25 00:10:21 2012)  c/s: 7579K  trying: 101f2p0 - 101f362
Use the "--show" option to display all of the cracked passwords reliably

Y en un par de horas obtenemos: 101f303. Recuerda que el hash estaba compuesto por nuestra entrada (1) + la salt, por lo tanto la salt que buscamos es: 01f303