Checklist & Scripts - Windows
Elenco di comandi e script utili per l'enumerazione e l'analisi di una macchina Windows. Include alcuni controlli di base, controlli di privilegio, controlli di file e directory, controlli di binari, controlli di Active Directory e controlli di sicurezza.
Di seguito una mappa cheetsheet per il pentest su Active Directory:
Source
COMMON CHECKS
Host Information
hostname # Nome host
systeminfo # Informazioni di sistema
wmic os get Caption, Version, BuildNumber # Versione del sistema operativo
Kernel and Architecture
wmic os get OSArchitecture # Architettura del sistema
wmic os get LastBootUpTime # Data dell'ultimo avvio
ver # Versione del sistema operativo
User Information
whoami # Utente corrente
whoami /priv # Privilegi attivi dell'utente
net user # Utenti locali
net user [username] # Dettagli di un utente specifico
net localgroup # Gruppi locali
net localgroup Administrators # Utenti del gruppo Administrators
Network Information
ipconfig /all # Configurazione di rete
route print # Tabelle di routing
arp -a # Cache ARP
netstat -ano # Connessioni di rete
Get-DnsClientServerAddress # DNS configurati
Firewall Rules
Scheduled Tasks
Environment Variables
Running Processes and Services
tasklist /v # Processi in esecuzione
tasklist /svc # Processi con servizi associati
wmic process list full # Dettagli avanzati sui processi
wmic service list full # Servizi in esecuzione
FILES
File Permissions and Sensitive Files
-
Ricerca file sensibili:
-
Permessi sui file:
File e directory importanti
dir C:\Users\*\Desktop # Controlla i desktop degli utenti
dir C:\Users\*\Documents # Controlla documenti degli utenti
dir C:\Users\*\AppData # Controlla AppData
dir C:\ProgramData # ProgramData (configurazioni globali)
Password e configurazioni
reg query HKLM\SAM /s # Registro SAM (potrebbero servire privilegi)
reg query HKLM\Security /s # Registro Security (potrebbero servire privilegi)
type C:\Windows\Panther\Unattend\Unattend.xml # File di configurazione dell'installazione automatica
type C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Credentials\*.*
Log e cronologia
type C:\Windows\System32\config\SAM # File SAM (dump delle password, potrebbe servire `ntdsutil`)
dir C:\Windows\System32\winevt\Logs\*.evtx # Log degli eventi
dir C:\Windows\Prefetch # File Prefetch
type C:\Users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt # Cronologia PowerShell
Registry
reg query HKLM # Query sul registro di sistema
reg query HKCU # Query sul registro utente corrente
Installed Programs
Get-WmiObject -Class Win32_Product # Programmi installati
wmic product get name,version # Informazioni dettagliate sui programmi
BINARIES
Lista dei software installati
wmic product get name, version # Elenco dei software installati
Get-WmiObject -Class Win32_Product # Elenco dettagliato
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion
Cerca strumenti di sviluppo o script
dir /s *python*.* # Cerca Python
dir /s *perl*.* # Cerca Perl
dir /s *nc*.* # Cerca Netcat
where.exe powershell # Trova PowerShell
PRIVILEGE ESCALATION CHECKS
Local Privileges
whoami /priv # Privilegi attivi
Get-LocalGroupMember -Group Administrators # Utenti con privilegi amministrativi
SUID/SGID-like Files
- Verifica dei file eseguibili dall'utente corrente:
OTHER TOOLS AND SCRIPTS
- PowerUp: Strumento di enumerazione per privilege escalation.
WinPEAS: Strumento automatizzato di enumerazione Windows.
EXTRA CHECKS
Sicurezza
secedit /export /cfg C:\secpol.cfg # Esporta le politiche di sicurezza
Get-WmiObject Win32_QuickFixEngineering # Controlla le patch installate
Servizi
sc query # Elenco dei servizi
sc qc [servicename] # Dettagli di un servizio
Get-Service # Elenco dei servizi
Pianificazione
AD - ENUMERAZIONE DI BASE
Utenti e gruppi locali
net user /domain # Elenca tutti gli utenti del dominio
net group /domain # Elenca tutti i gruppi del dominio
net group "Domain Admins" /domain # Elenca gli utenti del gruppo Domain Admins
net group "Enterprise Admins" /domain # Elenca gli utenti del gruppo Enterprise Admins
Controller di dominio e configurazione
nltest /dclist:<domain_name> # Elenca i controller di dominio del dominio
nltest /dsgetdc:<domain_name> # Ottieni il DC corrente
nltest /server:<dc_name> /trusted_domains # Elenca i domini di trust
Informazioni sul dominio
net config workstation # Informazioni sul dominio e DC attivo
nltest /domain_trusts # Elenca i trust del dominio
whoami /fqdn # Nome completo del dominio
dsquery user # Elenca tutti gli utenti (necessari privilegi)
dsquery group # Elenca tutti i gruppi (necessari privilegi)
AD - RICERCA AVANZATA SU UTENTI
Dettagli utenti specifici
net user <username> /domain # Informazioni sull'utente nel dominio
Get-ADUser -Identity <username> -Properties * # Dettagli completi di un utente (necessita RSAT)
Password policy
net accounts /domain # Politiche di password del dominio
Get-ADDefaultDomainPasswordPolicy # Politica di default delle password (necessita RSAT)
Trova utenti con password mai scadute
Get-ADUser -Filter * -Property PasswordNeverExpires | Where-Object { $_.PasswordNeverExpires -eq $true }
AD - GRUPPI E PERMESSI
Esamina membri di gruppi specifici
net localgroup <groupname> # Membri di un gruppo locale
net group "<groupname>" /domain # Membri di un gruppo del dominio
Get-ADGroupMember -Identity "<groupname>" # Membri con PowerShell (necessita RSAT)
Esamina permessi delegati
dsacls <OU_DN> # Controlla i permessi su un'unità organizzativa (OU)
Get-Acl "AD:<DN_path>" | Format-List # Controlla i permessi su un oggetto AD
AD - RICERCA DI COMPUTER
Enumerazione computer
net view /domain # Visualizza computer nel dominio
Get-ADComputer -Filter * # Elenca tutti i computer del dominio (necessita RSAT)
Informazioni su computer specifici
AD - CTIVE DIRECTORY TRUST
Relazioni di trust
nltest /domain_trusts # Elenca i domini in trust
Get-ADTrust -Filter * # Relazioni di trust (necessita RSAT)
AD - PERSISTENZA E DIRITTI
Trova utenti con privilegi elevati
Get-ADUser -Filter * -Property AdminCount | Where-Object { $_.AdminCount -eq 1 } | Select-Object SamAccountName
Identifica SPN (Service Principal Names)
setspn -T <domain> -Q */* # Cerca SPN nel dominio (SPN è spesso utile per attacchi Kerberos)
AD - POLITICHE DI GRUPPO (GPO)
Ricerca policy
gpresult /R /Scope:Computer # GPO applicate al computer
gpresult /R /Scope:User # GPO applicate all'utente
Get-GPO -All # Elenca tutte le GPO nel dominio (necessita RSAT)
Dettagli GPO specifiche
AD - KERBEROS
Enumerazione ticket
Cerca account con delega attivata
AD - RACCOLTA DI FILE E DATI SENSIBILI
Cerca file condivisi
net share # Elenca le condivisioni locali
net view \\<hostname> # Visualizza le condivisioni di un host remoto
Cerca file sensibili
AD - POWERSPLOIT E SCRIPTS
Utilizzo di PowerView (parte di PowerSploit)
-
Enumerazione utenti:
-
Enumerazione computer:
-
Enumerazione trust:
MISC
Scansione di rete
Questo script scannerizza le porte di una macchina target, indicandi quali porte sono oggetto della scansione (vengono già riportate le più comuni).
Info
Modifica l'indirizzo IP-MACCHINA-TARGET e la lista delle porte da scansionare.
Per scansionare tutte le porte commentare la riga $ports con l'elenco delle porte e decommentare la riga successiva.
$ip = "<IP-MACCHINA-TARGET>"
$ports = @(21, 22, 23, 25, 53, 80, 110, 135, 139, 143, 443, 445, 465, 587, 993, 995, 1025, 1026, 1027, 1028, 1029, 1030, 1433, 1434, 1723, 1900, 3306, 3389, 4444, 5040, 5357, 5432, 5500, 5631, 5900, 5985, 5986, 6000, 8000, 8080, 8081, 8443, 8888, 9000, 9001, 9200, 9999, 10000, 49152, 49153, 49154, 49155, 49156, 49157, 49158, 49159, 49160, 49161, 49162, 49163, 49164, 49165, 49166, 49167, 49168, 49169, 49170, 49171, 49172, 49173, 49174, 49175, 49176, 49177, 49178, 49179, 49180, 49181, 49182, 49183, 49184, 49185, 49186, 49187, 49188, 49189, 49190, 49191, 49192, 49193, 49194, 49195, 49196, 49197, 49198, 49199, 49200)
# $ports = 1..65535 # Decommmentare per scansionare tutte le porte e commentare la riga precedente
# Creazione del RunspacePool per gestire il multithreading
$runspacePool = [runspacefactory]::CreateRunspacePool(1, [Environment]::ProcessorCount * 2)
$runspacePool.Open()
# Collezione per gestire i thread
$runspaces = @()
foreach ($port in $ports) {
$runspace = [powershell]::Create().AddScript({
param ($ip, $port)
try {
$tcpClient = New-Object System.Net.Sockets.TcpClient
$tcpClient.Connect($ip, $port)
if ($tcpClient.Connected) {
Write-Output "Port $port is open======================"
$tcpClient.Close()
}
} catch {
Write-Output $port
}
}).AddArgument($ip).AddArgument($port)
$runspace.RunspacePool = $runspacePool
$runspaces += [PSCustomObject]@{
Pipe = $runspace
Status = $runspace.BeginInvoke()
}
}
# Attesa della conclusione di tutti i thread
foreach ($runspace in $runspaces) {
$runspace.Pipe.EndInvoke($runspace.Status)
$runspace.Pipe.Dispose()
}
# Chiusura del RunspacePool
$runspacePool.Close()
$runspacePool.Dispose()
Gestione delle password
Questo script permette di creare una password casuale di 12 caratteri.
$length = 12
$chars = 33..126
$pass = -join ([char[]]($chars | Get-Random -Count $length | % {[char]$_}))
$pass
Cambio password
Questo script permette di cambiare la password di un utente.
oppure
Modifica il nome utente USERNAME e la password PASSWORD.
$securePassword = ConvertTo-SecureString "PASSWORD" -AsPlainText -Force
Set-LocalUser -Name "USERNAME" -Password $securePassword
Montare un disco
Dove:
- x: è il drive letter
- \\<IP>\c$ è il percorso della cartella condivisa
- MS01\Administrator è l'utente
- Aa.123456! è la password