Vai al contenuto

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: Checklist Source


COMMON CHECKS

Host Information

powershell
hostname                                    # Nome host
systeminfo                                  # Informazioni di sistema
wmic os get Caption, Version, BuildNumber   # Versione del sistema operativo

Kernel and Architecture

powershell
wmic os get OSArchitecture                  # Architettura del sistema
wmic os get LastBootUpTime                  # Data dell'ultimo avvio
ver                                         # Versione del sistema operativo

User Information

powershell
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

powershell
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

powershell
netsh advfirewall show allprofiles          # Regole del firewall

Scheduled Tasks

powershell
schtasks /query /fo LIST /v                 # Elenco task pianificati

Environment Variables

powershell
Get-ChildItem Env:                         # Variabili d'ambiente
echo %PATH%                                # Variabili di sistema PATH

Running Processes and Services

powershell
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:

    powershell
    dir C:\ /S /B | findstr password            # Cerca file con "password" nel nome
    

  • Permessi sui file:

    powershell
    icacls "C:\path\to\file"                    # Visualizza permessi sui file
    

File e directory importanti

powershell
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

powershell
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

powershell
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

powershell
reg query HKLM                              # Query sul registro di sistema
reg query HKCU                              # Query sul registro utente corrente

Installed Programs

powershell
Get-WmiObject -Class Win32_Product          # Programmi installati
wmic product get name,version               # Informazioni dettagliate sui programmi

BINARIES

Lista dei software installati

powershell
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

powershell
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

powershell
whoami /priv                                # Privilegi attivi
Get-LocalGroupMember -Group Administrators  # Utenti con privilegi amministrativi

SUID/SGID-like Files

  • Verifica dei file eseguibili dall'utente corrente:
powershell
accesschk.exe -uwcqv "Authenticated Users" *  # Usa AccessChk (Sysinternals)

OTHER TOOLS AND SCRIPTS

  • PowerUp: Strumento di enumerazione per privilege escalation.
powershell
.\PowerUp.ps1                               # Avvia PowerUp
Invoke-AllChecks                            # Esegue tutte le verifiche di PowerUp

WinPEAS: Strumento automatizzato di enumerazione Windows.

powershell
winPEAS.exe                                 # Avvia winPEAS

EXTRA CHECKS

Sicurezza

powershell
secedit /export /cfg C:\secpol.cfg               # Esporta le politiche di sicurezza
Get-WmiObject Win32_QuickFixEngineering          # Controlla le patch installate

Servizi

powershell
sc query                                         # Elenco dei servizi
sc qc [servicename]                              # Dettagli di un servizio
Get-Service                                      # Elenco dei servizi

Pianificazione

powershell
schtasks /query /fo LIST /v                      # Attività pianificate

AD - ENUMERAZIONE DI BASE

Utenti e gruppi locali

powershell
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

powershell
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

powershell
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

powershell
net user <username> /domain                      # Informazioni sull'utente nel dominio
Get-ADUser -Identity <username> -Properties *    # Dettagli completi di un utente (necessita RSAT)

Password policy

powershell
net accounts /domain                             # Politiche di password del dominio
Get-ADDefaultDomainPasswordPolicy                # Politica di default delle password (necessita RSAT)

Trova utenti con password mai scadute

powershell
Get-ADUser -Filter * -Property PasswordNeverExpires | Where-Object { $_.PasswordNeverExpires -eq $true }

AD - GRUPPI E PERMESSI

Esamina membri di gruppi specifici

powershell
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

powershell
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

powershell
net view /domain                                 # Visualizza computer nel dominio
Get-ADComputer -Filter *                         # Elenca tutti i computer del dominio (necessita RSAT)

Informazioni su computer specifici

powershell
Get-ADComputer -Identity <hostname> -Properties *  # Dettagli completi di un computer

AD - CTIVE DIRECTORY TRUST

Relazioni di trust

powershell
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

powershell
Get-ADUser -Filter * -Property AdminCount | Where-Object { $_.AdminCount -eq 1 } | Select-Object SamAccountName

Identifica SPN (Service Principal Names)

powershell
setspn -T <domain> -Q */*                        # Cerca SPN nel dominio (SPN è spesso utile per attacchi Kerberos)

AD - POLITICHE DI GRUPPO (GPO)

Ricerca policy

powershell
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

powershell
Get-GPO -Name "<GPO Name>"                       # Dettagli su una specifica GPO

AD - KERBEROS

Enumerazione ticket

powershell
klist                                             # Visualizza i ticket Kerberos attivi

Cerca account con delega attivata

powershell
Get-ADUser -Filter {TrustedForDelegation -eq $true} | Select SamAccountName

AD - RACCOLTA DI FILE E DATI SENSIBILI

Cerca file condivisi

powershell
net share                                        # Elenca le condivisioni locali
net view \\<hostname>                            # Visualizza le condivisioni di un host remoto

Cerca file sensibili

powershell
dir /s /b | findstr password                     # Cerca file con "password" nel nome

AD - POWERSPLOIT E SCRIPTS

Utilizzo di PowerView (parte di PowerSploit)

  • Enumerazione utenti:

    powershell
    Get-DomainUser
    

  • Enumerazione computer:

    powershell
    Get-DomainComputer
    

  • Enumerazione trust:

    powershell
    Get-DomainTrust
    

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.

powershell
$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.

powershell
$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.

powershell
net user USERNAME PASSWORD

oppure

Modifica il nome utente USERNAME e la password PASSWORD.

powershell
$securePassword = ConvertTo-SecureString "PASSWORD" -AsPlainText -Force
Set-LocalUser -Name "USERNAME" -Password $securePassword

Montare un disco

powershell
net use x: \\10.10.88.141\c$ /user:MS01\Administrator Aa.123456!

Dove: - x: è il drive letter - \\<IP>\c$ è il percorso della cartella condivisa - MS01\Administrator è l'utente - Aa.123456! è la password