Home » Metodo Digest MD5 de bloqueo en Web Admin

Metodo Digest MD5 de bloqueo en Web Admin

Método de autenticación Digest en Linksys PAP2T
Método de autenticación Digest en Linksys PAP2T

Método de autenticación Digest en Linksys PAP2T

El , en los dispositivos Linksys PAP2T y PAP2T NA. Cuando contamos con una ata VOIP bloqueado, en el user admin, y no tenemos ni idea de la posible contraseña. Después de 5 intentos de inicio de sesión, el dispositivo nos bloquea el acceso al panel /admin/.

Por lo que es imposible tratar de hacer un ataque diccionario por fuerza bruta. Se vuelve una pesadilla sabiendo, que el dispositivo está bloqueado por otro proveedor con máxima seguridad. Utilizando diversos métodos como aprovisionamiento, validación de upgrade firmware, o blindado por un servidor con Windows Server 2012 R2 con seguridad key hash sha256. En estos casos cabe recalcar que ni siquiera funciona el reset manual por defecto, porque requiere de un password que desconoces. En este momento estoy pensando en cambiar la memoria Flash MX29LV160C-70G, de 16 megabits organizados como 2M bytes de 8 bits. Fabricados por Macronix, 70g señala que su velocidad es de 70 ns ( nanosegundos ), de acceso a los datos.

Como funciona la cadena hash MD5 para generar el response

Haciendo un test de inicio de sesión con una contraseña falsa. Obtenemos una respuesta desde el dispositivo que se ve a continuacion usando el programa Whireshark:

Me
Como funciona la autenticación Digest MD5 en Web Admin UI

Nos centraremos en los parámetros de ( Authorization ), y detallaremos cuáles son valores constantes y cuales son variables que nos brinda el dispositivo, para generar el parámetro «response».

Parámetros constantes:

  1. username=»admin»: Especifica el nombre de usuario que se está utilizando para la autenticación. En este caso, el nombre de usuario es «admin» y nunca varia.
  2. realm=»pap admin»: Indica el reino al que pertenece el usuario. El reino es una cadena que identifica la protección de acceso aplicada a un conjunto de recursos. Ejemplo el reino para un spa 2002 es «spa admin».
  3. uri=»/admin/»: Especifica la URI (Uniform Resource Identifier) del recurso al que el usuario está intentando acceder. En este caso, el recurso es «/admin/».
  4. algorithm=MD5: Indica el algoritmo de cifrado empleado para generar el valor hash del usuario y la contraseña. En este caso, se está usando el algoritmo MD5.
  5. qop=auth: Especifica la calidad de protección (Quality of Protection) que se utilizará. En este caso, se utiliza «auth», que es el nivel básico.

Parámetros variables:

  1. response=»561a….ab2d»: Es el valor hash generado por el cliente a partir de la información de autenticación, como el nombre de usuario, contraseña, nonce y otros campos, usando el algoritmo MD5. El servidor verifica este valor hash para autenticar al usuario.
  2. opaque=»0000….71e5″: Es un valor opaco que el servidor incluye en la respuesta de autenticación y que el cliente debe incluir en solicitudes futuras para ese servidor. Ayuda a evitar ataques de repetición y protege la integridad de la comunicación.
  3. nonce=»0000….3cbe»: Un nonce (número usado una vez) es un valor generado por el servidor y se incluye en la respuesta del servidor para evitar ataques de repetición. El cliente debe incluir el mismo nonce en la solicitud de autenticación. En este caso, el nonce es «0000….3cbe».
  4. cnonce=»b4ceda4e10b79e1d»: Un nonce del cliente (número usado una vez) que el cliente incluye en la respuesta de autenticación. Ayuda a proteger la integridad de la comunicación.
  5. nc=00000001: Contador que indica el número de veces que se ha realizado la autenticación desde que se generó el nonce. Esto se usa para evitar ataques de repetición.

En conclusión estos paramatros variables y constantes son necesarios para generar el valor de «response». Como veremos abajo en una parte de codigo Python que genera el valor de response.

def generate_response(username, realm, password, uri, nonce, cnonce, qop, nc): from hashlib import md5 ha1 = md5(f»{username}:{realm}:{password}».encode()).hexdigest() ha2 = md5(f»GET:{uri}».encode()).hexdigest() response = md5(f»{ha1}:{nonce}:{nc}:{cnonce}:{qop}:{ha2}».encode()).hexdigest() return response Formula para generar response = MD5(HA1:nonce:nc:cnonce:qop:HA2)

Enviar la solicitud al servidor

El cliente incluye el valor de la cadena hash «response» en el encabezado «Authorization» de la solicitud HTTP, como se muestra en tu ejemplo.

Verificación en el servidor

Cuando el servidor recibe la solicitud, extrae el valor de la cadena hash «response» del encabezado «Authorization» y genera un response = MD5(HA1:nonce:nc:cnonce:qop:HA2). Utilizando los mismos datos recibidos desde el cliente. Para generar el response por parte del servidor, este utiliza el hash de la contraseña almacenada en los registros de la memoria Flash MX29LV160C-70G.

Valor de «response

calculado en el servidor coincide con el valor recibido en la solicitud, el servidor autentica al usuario y permite el acceso al recurso solicitado. De lo contrario, si el valor de «response» no coincide o si se producen errores durante el proceso de autenticación, el servidor niega el acceso y generalmente devuelve un código de error (por ejemplo, 401 Unauthorized).

Entradas relacionadas