🔑Credential Hunting en recursos compartidos
Casi todos los entornos corporativos incluyen recursos compartidos de red que los empleados utilizan para almacenar y compartir archivos entre equipos. Si bien estas carpetas compartidas son esenciales, pueden convertirse involuntariamente en una mina de oro para los atacantes, especialmente cuando se olvidan datos confidenciales como credenciales de texto plano o archivos de configuración. En esta sección, exploraremos cómo buscar credenciales en recursos compartidos de red de sistemas Windows y Linux mediante herramientas comunes, junto con técnicas generales que los atacantes utilizan para descubrir secretos ocultos.
Patrones de credenciales comunes
Antes de profundizar en herramientas especializadas, es importante comprender los tipos de patrones y formatos de archivo que suelen revelar información confidencial. Esto se abordó en secciones anteriores, por lo que no lo repetiremos en detalle aquí. Sin embargo, a modo de recordatorio rápido, aquí hay algunos consejos generales:
Busque palabras clave dentro de archivos como
passw,user,token,key, ysecret.Busque archivos con extensiones comúnmente asociadas con credenciales almacenadas, como
.ini,.cfg,.env,.xlsx,.ps1, y.bat.Esté atento a los archivos con nombres "interesantes" que incluyan términos como
config,user,passw,cred, oinitial.Si está intentando localizar credenciales dentro del
INLANEFREIGHT.LOCALdominio, puede ser útil buscar archivos que contengan la cadenaINLANEFREIGHT\.Las palabras clave deben localizarse en función del objetivo; si estás atacando a una empresa alemana, es más probable que hagan referencia a un
"Benutzer"que a un"User".Presta atención a las acciones que estás considerando y sé estratégico. Si escaneas diez acciones con miles de archivos cada una, te llevará mucho tiempo. Las acciones utilizadas por otros
IT employeespodrían ser un objetivo más valioso que las utilizadas para fotos de empresas.
Con todo esto en mente, puede que le convenga comenzar con búsquedas básicas en la línea de comandos (p. ej., Get-ChildItem -Recurse -Include *.ext \\Server\Share | Select-String -Pattern ...) antes de ampliar a herramientas más avanzadas. Veamos cómo podemos usar MANSPIDER, Snaffler, SnafflePyy NetExecpara automatizar y mejorar este proceso de búsqueda de credenciales.
Credential Hunting desde Windows
Snaffler
La primera herramienta que abordaremos es Snaffler . Se trata de un programa en C# que, al ejecutarse en una domain-joinedmáquina, identifica automáticamente los recursos compartidos de red accesibles y busca archivos interesantes. El READMEarchivo del repositorio de Github describe las numerosas opciones de configuración con gran detalle; sin embargo, se puede realizar una búsqueda básica de la siguiente manera:
c:\Users\Public> Snaffler.exe -s
.::::::.:::. :::. :::. .-:::::'.-:::::'::: .,:::::: :::::::..
;;;` ``;;;;, `;;; ;;`;; ;;;'''' ;;;'''' ;;; ;;;;'''' ;;;;``;;;;
'[==/[[[[, [[[[[. '[[ ,[[ '[[, [[[,,== [[[,,== [[[ [[cccc [[[,/[[['
''' $ $$$ 'Y$c$$c$$$cc$$$c`$$$'`` `$$$'`` $$' $$"" $$$$$$c
88b dP 888 Y88 888 888,888 888 o88oo,.__888oo,__ 888b '88bo,
'YMmMY' MMM YM YMM ''` 'MM, 'MM, ''''YUMMM''''YUMMMMMMM 'W'
by l0ss and Sh3r4 - github.com/SnaffCon/Snaffler
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:42Z [Info] Parsing args...
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Parsed args successfully.
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Invoking DFS Discovery because no ComputerTargets or PathTargets were specified
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Getting DFS paths from AD.
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Found 0 DFS Shares in 0 namespaces.
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Invoking full domain computer discovery.
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Getting computers from AD.
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Got 1 computers from AD.
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Starting to look for readable shares...
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Info] Created all sharefinder tasks.
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Black}<\\DC01.inlanefreight.local\ADMIN$>()
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\ADMIN$>(R) Remote Admin
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Black}<\\DC01.inlanefreight.local\C$>()
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\C$>(R) Default share
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\Company>(R)
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\Finance>(R)
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\HR>(R)
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\IT>(R)
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\Marketing>(R)
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\NETLOGON>(R) Logon server share
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\Sales>(R)
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:43Z [Share] {Green}<\\DC01.inlanefreight.local\SYSVOL>(R) Logon server share
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:51Z [File] {Red}<KeepPassOrKeyInCode|R|passw?o?r?d?>\s*[^\s<]+\s*<|2.3kB|2025-05-01 05:22:48Z>(\\DC01.inlanefreight.local\ADMIN$\Panther\unattend.xml) 5"\ language="neutral"\ versionScope="nonSxS"\ xmlns:wcm="http://schemas\.microsoft\.com/WMIConfig/2002/State"\ xmlns:xsi="http://www\.w3\.org/2001/XMLSchema-instance">\n\t\t\ \ <UserAccounts>\n\t\t\ \ \ \ <AdministratorPassword>\*SENSITIVE\*DATA\*DELETED\*</AdministratorPassword>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ </UserAccounts>\n\ \ \ \ \ \ \ \ \ \ \ \ <OOBE>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ <HideEULAPage>true</HideEULAPage>\n\ \ \ \ \ \ \ \ \ \ \ \ </OOBE>\n\ \ \ \ \ \ \ \ </component
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:53Z [File] {Yellow}<KeepDeployImageByExtension|R|^\.wim$|29.2MB|2022-02-25 16:36:53Z>(\\DC01.inlanefreight.local\ADMIN$\Containers\serviced\WindowsDefenderApplicationGuard.wim) .wim
[INLANEFREIGHT\jbader@DC01] 2025-05-01 17:41:58Z [File] {Red}<KeepPassOrKeyInCode|R|passw?o?r?d?>\s*[^\s<]+\s*<|2.3kB|2025-05-01 05:22:48Z>(\\DC01.inlanefreight.local\C$\Windows\Panther\unattend.xml) 5"\ language="neutral"\ versionScope="nonSxS"\ xmlns:wcm="http://schemas\.microsoft\.com/WMIConfig/2002/State"\ xmlns:xsi="http://www\.w3\.org/2001/XMLSchema-instance">\n\t\t\ \ <UserAccounts>\n\t\t\ \ \ \ <AdministratorPassword>\*SENSITIVE\*DATA\*DELETED\*</AdministratorPassword>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ </UserAccounts>\n\ \ \ \ \ \ \ \ \ \ \ \ <OOBE>\n\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ <HideEULAPage>true</HideEULAPage>\n\ \ \ \ \ \ \ \ \ \ \ \ </OOBE>\n\ \ \ \ \ \ \ \ </component
<SNIP>Todas las herramientas de esta sección generan una gran cantidad de información. Si bien facilitan la automatización, suele requerirse una revisión manual considerable, ya que muchas coincidencias pueden resultar ser "false positives". Dos parámetros útiles que pueden ayudar a refinar el proceso de búsqueda de Snaffler son:
-urecupera una lista de usuarios de Active Directory y busca referencias a ellos en archivos-iy-nte permitirá especificar qué acciones deben incluirse en la búsqueda
PowerHuntShares
Otra herramienta que se puede utilizar es PowerHuntShares , un script de PowerShell que no necesita ejecutarse necesariamente en una máquina unida a un dominio. Una de sus funciones más útiles es que genera un mensaje reporte en HTML al finalizar, lo que proporciona una interfaz de usuario intuitiva para revisar los resultados:

Podemos ejecutar un escaneo básico de PowerHuntShares de la siguiente manera:
Credential Hunting desde Linux
Manspider
Si no tenemos acceso a un equipo unido al dominio, o simplemente preferimos buscar archivos de forma remota, herramientas como MANSPIDER nos permiten escanear recursos compartidos SMB desde Linux. Es recomendable ejecutarlo usando el contenedor Docker oficial para evitar problemas de dependencias. Al igual que otras herramientas, MANSPIDER ofrece numerosos parámetros configurables para afinar la búsqueda. Un escaneo básico de archivos que contengan la cadena passw se puede ejecutar de la siguiente manera:
Instalación
NetExec
Además de sus muchos otros usos, NetExec también se puede usar para buscar en recursos compartidos de red con esta opción --spider. Esta función se describe detalladamente en la wiki oficial . Se puede ejecutar un análisis básico de los recursos compartidos de red en busca de archivos que contengan la cadena "passw" de la siguiente manera:
Búsqueda de credenciales en recursos compartidos de red
Caso práctico
Utilice las credenciales mendres:Inlanefreight2025! para conectarse al objetivo, ya sea mediante RDP o WinRM, y luego use las herramientas y técnicas enseñadas en esta sección para responder las preguntas a continuación. Para su conveniencia, Snaffler y PowerHuntShares se encuentran en C:\Users\Public.
Pregunta 1
Uno de los recursos compartidos a los que Mendres tiene acceso contiene credenciales válidas de otro usuario del dominio. ¿Cuál es su contraseña?
Nos conectamos por RDP al objetivo:
Una vez dentro si abrimos una Powershell y vamos a la ruta C:\Users\Public veremos las herramientas Snaffler y PowerHuntShares:
Ejecutaremos Snaffler a ver que encuentra:
Eso nos genera una gran cantidad de información, por lo que usaremos otras técnicas para facilitarnos el análisis:

Análisis con SMBMap
Encontramos varios recursos compartidos a los que tenemos acceso de lectura.
ENumeración de usuarios del dominio
Los guardaremos en un archivo users.txt:
Ahora buscaremos credenciales en los recursos compartidos.
Descargar Shares en local con NetExec
Añadiendo la flag -M spider_plus -o DOWNLOAD_FLAG=True --smb-timeout 60 nos descargará en local el contenido de los shares para enumerarlos fácilmente:
Ahora navegamos a la ruta:
Y filtramos con grep para extraer credenciales:
O el siguiente comando para buscar intentos de autenticación contra el dominio:
Bingo! Obtenemos las credenciales de un usuario del dominio:
Pregunta 2
Como este usuario, busque entre los recursos compartidos adicionales a los que tiene acceso e identifique la contraseña de un administrador de dominio. ¿Qué es?
Este usuario vemos que tiene más permisos (lectura y escritura) de SMB, por lo que puede acceder a más información que el usuario mendres:
Enumeración con las nuevas credenciales
Volveremos a ejecutar netexec con las nuevas credenciales para buscar más información y nuevas credenciales:
Al filtrar con grep por "passwd" encontramos unas credenciales de un administrador:
Si leemos el archivo Onboarding_Docs_132.txt observamos que el usuario es Administrator, con lo que habría quedado totalmente comprometido:
Y nos podemos conectar por EvilWinRM para comprobarlo:
Última actualización
¿Te fue útil?