Enumeración en Windows
Sistema
hostname
# Devuelve True si un equipo forma parte de un dominio
(Get-WmiObject -Class Win32_ComputerSystem).PartOfDomain
qwinsta
query user
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
[System.Environment]::OSVersion.Version
Get-ComputerInfo
Get-ComputerInfo | Select OsName,OsVersion,OsType
# variable de entorno
echo %PATH%
set
Get-ChildItem Env: | ft Key,Value
# Parches
wmic qfe get Caption, Description, HotFixID, InstalledOn
Get-CimInstance -Class win32_quickfixengineering | Where-Object { $_.Description -eq "Security Update" }
# Actualizaciones del sistema
wmic qfe list brief
# Lista los procesos en ejecución
tasklist /svc
tasklist /v | findstr /i xampp-control.exe
# Lista los procesos en ejecución
Get-Process
Get-Process | Select-Object Name, Path
Get-WmiObject Win32_Process -Filter "name = 'notepad.exe'" | Select-Object Name, ExecutablePath
# Listar procesos NO estandar, procesos que no están en las carpetas del sistema
Get-Process | Where-Object { $_.Path -notmatch "C:\\Windows\\System32" -and $_.Path -notmatch "C:\\Windows\\SysWOW64" } | Select-Object ProcessName, Id, Path
# Parches
Get-HotFix | ft -AutoSize
# Programas instalados
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname
Get-WmiObject -Class Win32_Product | select Name, Version
wmic product get name
# Lista los modulos
Get-Module
Get-ExecutionPolicy -List
# Listar las reglas de AppLocker
Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
# Probar la política de AppLocker
Get-AppLockerPolicy -Local | Test-AppLockerPolicy -path C:\Windows\System32\cmd.exe -User Everyone
# Obtener el historial de PowerShell del usuario especificado
Get-Content C:\Users\<USERNAME>\AppData\Roaming\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt
# Confirmar si UAC esta habilitado
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v EnableLUA
# Comprobar el nivel de UAC
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
Servicios
# Enumera todos los servicios no estándar
wmic service get name,displayname,pathname,startmode |findstr /i "auto" |findstr /i /v "c:\windows\\"
# Corriendo y no estándar
Get-CimInstance -ClassName win32_service | Select Name,State,PathName,StartMode | Where-Object {$_.State -like 'Running' -and $_.PathName -notmatch 'C:\\Windows'}
# Corriendo/No-Corriendo y no estándar
Get-CimInstance -ClassName win32_service | Select Name,State,PathName,StartMode | Where-Object {$_.PathName -notmatch 'C:\\Windows'}
# Corriendo/No-Corriendo y no estándar
Get-Service | Select-Object Name,Status,@{Name="PathName";Expression={(Get-WmiObject -Class Win32_Service -Filter "Name='$($_.Name)'").PathName}} | Where-Object {$_.PathName -notmatch 'C:\\Windows'} | fl *
# Corriendo y no estándar
Get-Service | Where-Object {$_.Status -eq 'Running'} | Select-Object Name,Status,@{Name="PathName";Expression={(Get-WmiObject -Class Win32_Service -Filter "Name='$($_.Name)'").PathName}} | Where-Object {$_.PathName -notmatch 'C:\\Windows'} | fl *
# Como LocalSystem y no estándar
(gci HKLM:\\SYSTEM\\CurrentControlSet\\Services | Get-ItemProperty | where {$_.ObjectName -match 'LocalSystem'} | Where-Object {$_.ImagePath -notmatch 'C:\\Windows'}).PSChildName
(gci HKLM:\\SYSTEM\\ControlSet001\\Services | Get-ItemProperty | where {$_.ObjectName -match 'LocalSystem'} | Where-Object {$_.ImagePath -notmatch 'C:\\Windows'}).PSChildName
Comprobar los permisos usando AccessChk de la suite de SysInternals
accesschk64.exe -wuvc Everyone *
accesschk64.exe -wuvc <service>
accesschk64.exe -qlc <service>
accesschk64.exe /accepteula -c Scheduler
accesschk64.exe /accepteula -qlc Scheduler
accesschk64.exe /accepteula -vu michelle -c Scheduler
accesschk64.exe /accepteula -ucqv IObitUnSvr
Obtener información de los servicios usando el comando sc
sc.exe
sc query
sc query state= all
sc qc <service>
Credenciales guardadas
El comando CMDKey se puede usar para crear, enumerar y eliminar los nombres de usuario y contraseñas almacenados. Los usuarios pueden desear almacenar credenciales para un host específico o usarlo para almacenar credenciales para conexiones de servicios de terminal para conectarse a un host remoto que usa escritorio remoto sin necesidad de ingresar una contraseña. Esto puede ayudarnos a movernos lateralmente a otro sistema con un usuario diferente o aumentar los privilegios en el host actual para aprovechar las credenciales almacenadas para otro usuario.
cmdkey /list
runas /savecred /user:hacklab.local\bob "whoami"
Windows Autologon
Windows Autologon es una característica que permite a un usuario configurar su sistema operativo Windows para iniciar sesión automáticamente en una cuenta de usuario específica, sin requerir la entrada manual del nombre de usuario y la contraseña en cada inicio. Sin embargo, una vez que esto se configura, el nombre de usuario y la contraseña se almacenan en el registro, en texto claro. Esta característica se usa comúnmente en sistemas de un solo usuario o en situaciones donde la conveniencia supera la necesidad de una mayor seguridad.
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Usuarios
whoami all
whoami /priv
whoami /groups
net users
net user <USER>
net user <USER> /domain
net user %username%
Get-LocalUser
# Información acerca del requerimiento de contraseña
net accounts
net accounts /domain
# Crear usuario
net user /add <USERNAME> <PASSWORD>
echo "%USERDOMAIN%"
echo %logonserver%
wmic USERACCOUNT Get Domain,Name,Sid
Grupos
# Local
net localgroup # Lista todos los grupos
net localgroup Administrators # Info acerca de un grupo (admins)
net localgroup administrators <USERNAME> /add # Agreaga un usuario al grupo administrators
Get-LocalGroup # Lista todos los grupos locales
Get-LocalGroupMember <GROUP> # Lista los miembros de un Grupo
# Dominio
net group /domain # Info acerca de los grupos del dominio
net group /domain <DOMAIN_GROUP_NAME> # Usuarios que pertencen al grupo
net group "Domain Computers" /domain # Lista de PC conectadas al dominio
net group "Domain Controllers" /domain # Listar cuentas de PC de controladores de dominio
Red
ipconfig
ipconfig /all
route print
arp -a
netstat -ano
netsh advfirewall show state
Windows Defender
netsh advfirewall show allprofiles
sc query windefend
Get-MpComputerStatus
Recursos compartidos
Recursos compartidos comunes en Windows:
C$
corresponde a C:/ADMIN$
se asigna a C:/WindowsIPC$
se utiliza para RPCPrint$
aloja controladores para impresoras compartidasSYSVOL
sólo en DCsNETLOGON
sólo en los DC
# Listar recursos compartidos
Get-SMBShare
net share
# Montar el recurso compartido
net use z: \\172.16.0.1\C$ /user:elliot "P@ssword123!"
# Desmontar el recurso compartido
net use /delete z:
# /all nos permite ver los recursos compartidos administrativos (que terminan en '$').
# Puede usarse IP o nombre de host para especificar el host.
net view \\172.16.0.1 /all
Información sensible
Buscamos información sensible.
Get-ChildItem -Force
ls -Force
where /R C:\ bash.exe # Realiza una búsqueda del archivo (en este caso del binario bash.exe) en el sistema
Get-History
(Get-PSReadlineOption).HistorySavePath
type C:\Users\%username%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
Get-ChildItem -Path C:\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue
Get-ChildItem -Path C:\Users\elliot\ -Include *.txt,*.pdf,*.xls,*.xlsx,*.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue
Get-ChildItem -Path C:\Users\ -Include *.txt,*.pdf,*.xls,*.xlsx,*.doc,*.docx,*.ini,*.kdbx,*.log -File -Recurse -ErrorAction SilentlyContinue
dir c:\*vnc.ini /s /b
dir c:\*ultravnc.ini /s /b
dir c:\ /s /b | findstr /si *vnc.ini
Get-ChildItem -Path C:\xampp -Include .txt,.ini -File -Recurse -ErrorAction SilentlyContinue
type C:\xampp\passwords.txt
type C:\xampp\mysql\bin\my.ini
Select-String -Path C:\Users\elliot\Documents\*.txt -Pattern password
findstr /SIM /C:"password" *.txt *.ini *.cfg *.config *.xml
findstr /S /I /C:"password" "C:\Users\celia.almeda\*"*.txt *.ini *.cfg *.config *.xml
findstr /spin "password" *.*
findstr /S /I /M /R /C:"\<password\>" "C:\Users\celia.almeda\*.txt" # mostrar solo el archivo
# Visualización de redes inalámbricas guardadas
netsh wlan show profile
Buscar contraseñas en el Registro
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
# Putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
# VNC
reg query "HKCU\Software\ORL\WinVNC3\Password"
# Windows autologin
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
# SNMP Paramters
reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"
Volcado de credenciales
reg.exe save hklm\sam c:\temp\sam.save
reg.exe save hklm\system c:\temp\system.save
reg.exe save hklm\security c:\temp\security.save
Algunos otros archivos en los que podemos encontrar credenciales incluyen lo siguiente:
%SYSTEMDRIVE%\pagefile.sys
%WINDIR%\debug\NetSetup.log
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software,
%WINDIR%\repair\security
%WINDIR%\iis6.log
%WINDIR%\system32\config\AppEvent.Evt
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\CCM\logs\*.log
%USERPROFILE%\ntuser.dat
%USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat
%WINDIR%\System32\drivers\etc\hosts
C:\ProgramData\Configs\*
C:\Program Files\Windows PowerShell\*
DPAPI Secrets
La API de protección de datos (DPAPI) es un componente interno del sistema Windows. Permite que diversas aplicaciones almacenen datos confidenciales (p. ej., contraseñas). Los datos se almacenan en el directorio de usuarios y están protegidos por claves maestras específicas del usuario, derivadas de su contraseña. Suelen estar ubicados en:
C:\Users\$USER\AppData\Roaming\Microsoft\Protect\$SUID\$GUID
Aplicaciones como Google Chrome, Outlook, entre otros, utilizan la API DPAPI. Windows también utiliza esta API para información confidencial, como contraseñas de Wi-Fi, certificados, contraseñas de conexión RDP y mucho más.
A continuación se muestran rutas comunes de archivos ocultos que generalmente contienen datos protegidos por DPAPI.
C:\Users\$USER\AppData\Local\Microsoft\Credentials\
C:\Users\$USER\AppData\Roaming\Microsoft\Credentials\
Usamos Impacket para desencriptar la masterkey, lo cual es un paso clave. Sin esta clave, no podriamos desencriptar los secretos protegidos por DPAPI.
impacket-dpapi masterkey -file 556a2412-1275-4ccf-b721-e6a0b4f90407 -sid S-1-5-21-1487982659-1829050783-2281216199-1107 -password 'ChefSteph2025!'
- Lee el archivo MasterKey.
- Usa el SID y la contraseña del usuario para derivar la User Key.
- Desencripta la MasterKey con esa User Key.
Desencriptamos las credenciales.
impacket-dpapi credential -file C8D69EBE9A43E9DEBF6B5FBD48B521B9 -key 0xd9a570722fbaf7149f9f9d691b0e137b7413c1414c452f9c77d6d8a8ed9efe3ecae990e047debe4ab8cc879e8ba99b31cdb7abad28408d8d9cbfdcaf319e9c84
Windows usa la contraseña del usuario para derivar una clave (SHA1(MD4(password))) y con eso desencripta las MasterKey. Y luego esa MasterKey desencripta los secretos reales.