eJPT · Exploitation & Post-Ex
Manual Exploitation e Searchsploit
Difficoltà: Intermediate Time to Master: 2h Prerequisiti: 04-Vulnerability-Assessment/03-CVE-CVSS-Scoring.md Lab: INE PTS labs / TryHackMe, Vulnversity
Obiettivo
Prima o poi capita: cerchi l’exploit su Metasploit e non c’è, oppure c’è ma non fa esattamente quello che ti serve. È il momento in cui passi da “uso uno strumento già pronto” a “leggo codice scritto da qualcun altro e lo adatto al mio target esatto” — path, versione, LHOST/LPORT, a volte un offset. Suona più complicato di quanto sia: la parte tecnica di solito è alla portata, la vera competenza è la disciplina di leggere il PoC per intero prima di lanciarlo alla cieca.
Concetti chiave
Perché non basta sempre Metasploit
Molti CVE non hanno un modulo Metasploit ufficiale, o il modulo esiste ma richiede opzioni non standard. Saper leggere ed adattare un PoC da Exploit-DB è una competenza richiesta nell’eJPTv2: il candidato deve dimostrare di capire cosa fa uno script, non solo di saperlo lanciare.
Anatomia di un PoC pubblico
| Sezione tipica | Cosa contiene |
|---|---|
| Header commento | CVE, autore, versione software target |
| Variabili configurabili | IP/porta target, path, offset, shellcode |
| Funzione di exploit | payload costruito ed inviato al target |
| Note d’uso | come compilare/lanciare (es. python3 exploit.py <target>) |
Strumenti
| Tool | Comando base | Output | Note |
|---|---|---|---|
| searchsploit | searchsploit <software> <versione> |
lista PoC locali (mirror Exploit-DB) | database offline, si aggiorna con searchsploit -u |
| searchsploit -m | searchsploit -m <id> |
copia il PoC nella cartella corrente | comodo per editarlo senza toccare il mirror |
| searchsploit -x | searchsploit -x <id> |
mostra il PoC a schermo | utile per leggere prima di copiare |
| gcc | gcc exploit.c -o exploit |
binario compilato | per PoC in C, spesso serve -m32 su target 32-bit |
| Exploit-DB (web) | ricerca online | PoC più aggiornati del mirror locale | usa quando searchsploit non trova nulla |
Payload / Esempi
Esempio 1: ricerca e copia di un PoC noto (vsftpd 2.3.4)
searchsploit vsftpd
searchsploit -m unix/remote/49757.py
cat 49757.py
Output atteso:
-------------------------------------------------------------- ---------------------------------
Exploit Title | Path
-------------------------------------------------------------- ---------------------------------
vsftpd 2.3.4 - Backdoor Command Execution | unix/remote/49757.py
-------------------------------------------------------------- ---------------------------------
Spiegazione: il PoC per vsftpd 2.3.4 sfrutta una backdoor inserita deliberatamente nel codice sorgente compromesso (non una vulnerabilità di memoria): l’invio di uno username contenente :) apre una shell sulla porta 6200/tcp. È l’esempio da manuale di “leggi il PoC prima di lanciarlo”.
Esempio 2: adattare offset/target in un PoC Python
# apri il file e modifica le variabili in alto
python3 -c "print(open('49757.py').read()[:400])"
# tipiche righe da adattare
target = "10.10.10.5"
port = 21
Spiegazione: quasi ogni PoC ha un blocco di configurazione iniziale con IP/porta target da cambiare a mano; PoC per buffer overflow hanno anche offset/badchars che vanno ricalcolati per l’ambiente specifico (fuori scope eJPTv2 in dettaglio, ma va riconosciuto quando serve).
Esempio 3: compilare un exploit C locale
gcc -o exploit exploit.c
./exploit
# se il target e 32-bit e la macchina d'attacco e 64-bit
gcc -m32 -o exploit exploit.c
Output atteso:
[+] Exploit compilato con successo
[+] Eseguo contro target locale, attendo shell...
Spiegazione: molti PoC per privilege escalation locale sono scritti in C: vanno compilati sulla macchina target (o con architettura compatibile) prima dell’esecuzione.
Evasion / Bypass Techniques
Non applicabile in senso stretto: la difficoltà qui è adattare correttamente il PoC, non evadere difese. Presta attenzione ad AV/EDR se il PoC genera un binario che viene droppato su un endpoint Windows moderno: in ambito eJPTv2 i lab sono generalmente senza AV avanzato.
Lab Hands-On
Lab 1: TryHackMe, Vulnversity
Obiettivo: enumerare, trovare un file upload vulnerabile ed ottenere una shell, poi cercare un PoC per l’escalation successiva Difficulty: Facile Time: 1h
Walkthrough breve:
- Enumera i servizi con nmap -sV -sC
- Identifica la versione software esatta di ogni servizio esposto
- Cerca PoC con searchsploit per ogni versione trovata
- Adatta e lancia il PoC più pertinente, verifica la shell ottenuta
Common Mistakes
- Lanciare un PoC senza leggerlo -> rischio di eseguire codice non compreso o addirittura dannoso per il proprio sistema
- Non aggiornare il mirror locale (
searchsploit -u) -> PoC recenti mancanti - Ignorare la compatibilità di architettura (32 vs 64 bit) -> exploit che fallisce senza un motivo chiaro
Link Utili
- Exploit-DB
- GTFOBins (utile più avanti per privesc)
Connessioni
- Prerequisito: 04-Vulnerability-Assessment/03-CVE-CVSS-Scoring.md
- Prossimo Step: 02-Reverse-Bind-Shells.md
- Combinazione con: ../07-Metasploit-Framework/03-Exploit-Modules.md
Checklist di padronanza
- So cercare e leggere un PoC con searchsploit
- So adattare IP/porta/path in un PoC prima di lanciarlo
- So compilare un exploit C semplice
- Capisco quando serve un PoC manuale invece di un modulo Metasploit