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
THM-Source-CVE-2019-15231 — Un write-up sulla room Source di TryHackMe e uno script python per sfruttare la vulnerabilità. | Kitploit
Strumenti/GitHubGitHub/wizardy0ga/thm-source-cve-2019-15231
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebCTFPenetration TestingApprendimento e FormazioneArchived
GitHubwizardy0ga/thm-source-cve-2019-15231

THM-Source-CVE-2019-15231

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

Un write-up sulla room Source di TryHackMe e uno script python per sfruttare la vulnerabilità.

Vedi Repository
4 anni faNon ancora revisionato

THM-Source-CVE-2019-15231

Un write-up sulla room Source di TryHackMe e uno script python per sfruttare la vulnerabilità

CREDITI

Non mi prendo alcun merito per la scoperta di questa vulnerabilità. Ringrazio le seguenti persone per aver fornito le risorse così che persone come me possano imparare!

Scoperta della vulnerabilità:
Özkan Mustafa Akkuş

Modulo MSF:
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/webmin_backdoor.rb
https://www.rapid7.com/db/modules/exploit/linux/http/webmin_backdoor/

Autore del modulo MSF:
wvu

Room TryHackMe:
https://tryhackme.com/room/source

Autore THM:
https://tryhackme.com/p/DarkStar7471

Risorse:
https://www.webmin.com/exploit.html
https://github.com/webmin/webmin/issues/947
https://www.perlmonks.org/?node_id=301355

Se Vedi Qualcosa, Di' Qualcosa!

Non sono affatto un professionista della sicurezza esperto. Questo significa che potrei fornire alcune informazioni errate. Se sei un professionista esperto/ricercatore navigato e vedi qualcosa di errato, per favore informami così posso tornare, studiare ciò che ho sbagliato e fornire le informazioni corrette. Questo è vantaggioso sia per me che per altri ricercatori alle prime armi che potrebbero imbattersi in questo write-up. Se trovi informazioni sbagliate che ho scritto, contattami a [email protected] così posso correggerle. Grazie!

Vulnerabilità

1. Storia
Webmin è uno strumento basato sul web per l'amministrazione di sistemi Unix-like. A un certo punto nel primo trimestre del 2018, Webmin è stato colpito da un attacco alla supply chain in cui un attaccante sconosciuto è riuscito a inserire codice malevolo nel file password_change.cgi, creando una vulnerabilità che permetteva di aprire una backdoor su qualsiasi sistema che ospitasse quella versione di Webmin (1.890) con la configurazione predefinita. Chiamo questo un attacco alla supply chain perché gli sviluppatori/distributori del software hanno subito il compromesso del codice sorgente dei loro prodotti. Quando il fornitore ha rilasciato il prodotto compromesso, tutti coloro che aggiornavano il proprio software avrebbero eseguito il codice vulnerabile, dando così all'attaccante la capacità di compromettere qualsiasi sistema che eseguisse il codice ora vulnerabile. Nello stesso anno, gli sviluppatori di Webmin si accorsero di ciò che era accaduto e ripristinarono il file al suo stato originale; tuttavia, l'attaccante riuscì a reinserire nuovamente il codice. Questa volta, il codice sarebbe stato vulnerabile solo se l'opzione per cambiare le password scadute fosse stata abilitata. Questa vulnerabilità non sarebbe stata scoperta fino ad agosto 2019. La vulnerabilità è stata corretta nella versione 1.930 di Webmin.

2. Il Codice
Quindi, dopo alcune ricerche, sono riuscito a trovare la riga di codice che rendeva la versione 1.890 di Webmin vulnerabile all'iniezione di comandi. Avevo difficoltà a trovare le informazioni corrette perché in realtà ci sono due diverse CVE associate a questo problema (CVE-2019-15231/CVE-2019-15107). CVE-2019-15231 riguarda la vulnerabilità della configurazione predefinita nella versione 1.890, mentre CVE-2019-15107 riguarda la vulnerabilità che richiede l'opzione di cambio password scadute abilitata, nelle versioni fino alla 1.920. Diamo un'occhiata al codice per la versione 1.890. Alla riga 12 di password_change.cgi, abbiamo la seguente riga di codice:
$in{'expired'} eq '' || die $text{'password_expired'},qx/$in{'expired'}/;
Al momento in cui scrivo, non ho mai scritto nulla in perl. Analizzeremo questa riga di codice usando i motori di ricerca per capire meglio cosa fa il codice e perché è vulnerabile allo sfruttamento. Il primo pezzo di codice a sinistra dell'operatore || sembra essere una variabile ($in) che prende un parametro (expired) e verifica se è uguale (eq) a una stringa vuota ''. In mezzo, abbiamo l'operatore ||. Il || è un altro modo di usare l'operatore logico or in perl. Quando si usa || in perl, se il lato sinistro dell'operatore è vero, la metà destra non verrà valutata. Se la metà sinistra è falsa, allora la metà destra verrà valutata. Nella prima metà del codice alla destra dell'operatore , possiamo vedere . In perl, è una funzione che termina il processo dello script e mostra un messaggio di errore. Il messaggio sarebbe presumibilmente la variabile che dice password scaduta. L'ultima parte del codice è dove diventa interessante. Vediamo che abbiamo una virgola seguita da e un punto e virgola che termina la riga di codice. La virgola funge da separatore per il codice: la metà sinistra verrà valutata per prima e poi la seconda metà verrà valutata. In perl, è una funzione che consente di eseguire comandi di sistema sull'host. I sono delimitatori usati per identificare il parametro. In questo caso, abbiamo che eseguirà il parametro come comando di sistema. Credo che la variabile possa essere qualcosa di simile a in php per il seguente motivo. Nello script exploit che ho scritto, abbiamo un parametro chiamato che memorizza il payload prima di essere inviato al server tramite una richiesta post. Ecco come appare quel codice: . La variabile deve fare qualcosa per recuperare il valore a cui abbiamo impostato , così che il payload possa essere eseguito dalla funzione . Per concludere questa sezione, la riga di codice vulnerabile rileva che il nostro parametro nella richiesta post non è uguale a una stringa vuota, quindi l'operatore valuterà ora la metà destra del codice ed eseguirà il nostro payload memorizzato nel parametro . Passiamo al write-up per la room Source di TryHackMe.com

Il Write-Up

Iniziamo con una scansione delle porte. Useremo rustscan per avere una panoramica generale perché nmap può essere terribilmente lento.

image

Sembra che abbiamo 2 porte aperte, 22 e 10000. Ora useremo nmap per capire quali servizi sono in esecuzione su ciascuna porta.

image

Quindi abbiamo SSH in esecuzione sulla sua porta standard e un servizio HTTP sulla porta 10000. Navigiamo sulla pagina in esecuzione sulla porta 10000 e vediamo cosa c'è.

image

Dovrai usare HTTPS e bypassare l'avviso del certificato SSL per accedere a questa pagina. Sembra che abbiamo una pagina di login per il servizio Webmin. Quando ho fatto questa box originariamente, ho provato alcuni tentativi di brute force sulle directory, ma non è uscito nulla di interessante. Vediamo se esiste una vulnerabilità per la versione di Webmin che abbiamo ottenuto dalla scansione nmap tramite searchsploit.

image

Sembra quindi che abbiamo alcune opzioni diverse qui, ma nessuna è uguale alla nostra versione. Apriamo MSF e vediamo con cosa abbiamo a che fare.

image

Abbiamo alcune opzioni tra cui scegliere qui. Cerchiamo la versione di Webmin ottenuta da nmap e vediamo se salta fuori qualche CVE che possa aiutarci a restringere il campo.

image image

Nel sommario della vulnerabilità, vediamo che menziona qualcosa sul file password_change.cgi. Usiamo il numero 5 della nostra ricerca in MSF, dato che menziona anche il file password_change.cgi e la stessa data di divulgazione.

image

Lol, in realtà non useremo MSF. MSF è carino, ma non è divertente quanto capire come sfruttare qualcosa con il proprio codice! Ho usato il codice sorgente ruby come riferimento per questo exploit per creare il mio codice exploit in python. Usiamo quello invece!

image

Bada-bing Bada-boom, abbiamo ottenuto una shell di root nella room! Non rivelerò le flag. Sono sicuro che puoi trovarle! Grazie per la lettura e buona giornata!

Scarica lo strumento
||
die $text{'password_expired'}
die
$text
,
qx/$in{'expired'}/
;
qx
//
qx/$in{'expired'}/
$in{'expired'}
$in
$_GET
expired
data = {'expired':payload,}
$in
expired
qx
expired
||
expired