Adivinar Nombres de Usuarios y Contraseñas sobre SMB utilizando el Script smb-brute de Nmap

  • Posted on: 4 February 2016
  • By: ReYDeS

El Script de nombre “smb-brute” intenta adivinar combinaciones de nombres de usuarios y contraseñas sobre SMB, almacenando las combinaciones descubiertas para ser utilizadas con otros scripts. Cada intento será hecho para obtener una lista válida de usuarios y para verificar cada nombre de usuario antes de utilizarlo. Cuando se descubre un nombre de usuario, aparte de ser impreso, también será guardado en el registro de Nmap para ser utilizar por otros scripts. Esto significa en caso se ejecute “smb-brute.nse”, se pueden ejecutar otros scripts SMB en caso se requieran. Este script verifica contraseñas de manera no sensible a mayúsculas, determinando las mayúscula después de encontrar la contraseñas, para versiones anteriores a Vista.

Este script es especialmente útil para los auditores de seguridad y profesionales en pruebas de penetración. Esta última perspectiva se vuelve obvia. El descubrir contraseñas débiles sobre SMB, un protocolo muy confortable para realizar fuerza bruta, con la posibilidad de ganar acceso hacia el sistema. Adicionalmente las contraseñas descubiertas contra un Windows con SMB, pueden también ser utilizadas sobre Linux o MySQL, o Aplicaciones web personalizadas El descubrir una contraseña puede ser altamente beneficiosa para un profesional en pruebas de penetración.

Los nombres de usuario y contraseñas son inicialmente tomadas desde la librería “unpwdb”. Si es posible, se verifica la existencia de los nombres de usuario aprovechando el comportamiento desigual para las respuesta de Windows con nombres de usuarios no válidos y contraseñas no válidas. Tan pronto como esto es posible, el script descarga una lista completa de los nombres de usuario desde el servidor y reemplaza los nombres de usuario “unpw” con estos. Esto permite al script restringirse a si mismo a únicamente a las cuentas actuales.

Cuando una cuenta es descubierta, esta es guardada en el módulo SMB (el cual utiliza el registro de Nmap). Si una cuenta ya ha sido guardada, se verifica los privilegios de la cuenta; las cuentas con privilegios de administrador son mantenidas sobre aquellas sin estos privilegios. El método específico para verificación es llamando a getShareInfo(“IPC$”), el cual requiere privilegios administrativos. Una vez finalizado el script, los otros scripts podrán utilizar la cuenta guardada para realizar sus verificaciones

La contraseña en blanco siempre se intenta primero, seguido por “contraseñas especiales” (como el nombre de usuario y el nombre de usuario invertido). Una vez agotados se utilizada la lista de contraseñas “unpwdb”.

Uno de los principales objetivos del script es evitar bloqueo de cuentas. Esto se hace de pocas maneras. Primero, cuando se detecta un bloqueo de cuentas, a menos el usuario específicamente lo invalide con el argumento “smblockout”, el escaneo se detiene. Segundo, se verifican primero todos los nombres de usuario con las contraseñas más comunes, de tal manera con bloqueos no muy estrictos (10 intentos no válidos), se intentarán las 10 contraseñas más comunes. Tercero, una cuenta, llamada el canario, “va por delante”; es decir, se hacen tres intentos no válidos (por defecto) para asegurarse es bloqueada antes de otros.

Adicionalmente a cuentas activas, el script identificará contraseñas válidas para cuentas deshabilitadas, equivalente a invitado, y requiriendo cambio de contraseña. Aunque estas cuentas no pueden ser utilizadas, son buenas para conocer si la contraseña es válida. En otros casos, es imposible conocer una contraseña válida (si una cuenta es bloqueada, por ejemplo). Estas son mostradas también. Ciertas cuentas, tal como invitado o equivalente a invitado, permitirá cualquier contraseña. Esto también se detecta. Cuando es posible, el protocolo SMB es utilizado al completamente para obtener la máxima información.

Cuando es posible, se hacen las verificaciones utilizando contraseñas insensibles a mayúsculas, luego se determinan las mayúsculas apropiadas con una fuerza bruta bastante eficiente. Por ejemplo si la contraseña actual es “PassWord”, entonces “password” puede funcionar y “PassWord” se encontrará posteriormente (en el intento 14 de 256 intentos posibles, con el algoritmo actual).

Se ejecuta el script con las opciones por defecto.

# nmap -n -Pn -p445 --script smb-enum-users 192.168 .0.X

Los resultados obtenidos no exponen ningún tipo de información útil para nuestra evaluación.

Se procede a utilizar un archivo conteniendo un listado de nombres de usuarios o potenciales nombres de usuarios, este archivo se define como un argumento del Script.

# nmap -n -Pn -p445 --script smb-brute --script-args userdb=SMB_Users_WXP.txt 192.168. 0.X

Se han detectado varias credenciales válidas para algunos de los usuarios. Dado el hecho de haber definido una lista de contraseñas, se utiliza por defecto la definida script.

También es factible definir una archivo conteniendo una lista de potenciales contraseñas, esto también se define como un argumento del Script.

# nmap -n -Pn -p445 --script smb-brute --script-args userdb=SMB_Users_WXP.txt,passdb=/usr/share/wordlists/500-worst-passwords.txt 192.168. 0.X

Se incluyen entre estos resultados, información ya obtenida con la evaluación anterior. Se debe considerar aquí la utilización de listas de palabras personalizadas o diccionarios de mayor tamaño.

Fuentes:

https://nmap.org/nsedoc/scripts/smb-brute.html
https://nmap.org/nsedoc/lib/unpwdb.html

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero


Curso de Informática Forense