
Exploit per CVE-2023-1671. Quindi sono presenti una funzione di test e una di sfruttamento. Il test invia una richiesta ping al dominio dnslog dal sito vulnerabile. Se il ping ha successo, la vulnerabilità esiste; altrimenti, CVE-2023-1671 è assente. La funzione di sfruttamento, invece, invia una richiesta con il tuo comando al server.
/opt/ws/bin/ftsblistpack è uno script Perl che chiama /opt/ws/bin/sblistpack, un altro script Perl.
Gli argomenti del comando shell sono racchiusi tra apici singoli:
$rc += system("$sblistpack '$uri' '$user' '$filetype' '$filein' '$fileout'");
Questo sarà importante in futuro, sarà una delle cose che porteranno a una vulnerabilità.
Successivamente, /opt/ui/apache/htdocs/controllers/UsrBlocked.php passa il comando shell a ftsblistpack con parametri forniti dall'utente: args_reason, url, filetypeser, user_encoded.
L'input dell'utente è ancora gestito dalla funzione PHP escapeshellarg(), che aggiunge apici singoli attorno alla stringa o a qualsiasi apice singolo esistente.
Ciò permette di passare la stringa direttamente alla funzione shell e di elaborarla insieme ai parametri dell'utente.
Puoi vedere cosa ne esce:
Se digitiamo:
';echo 1 #
Allora otteniamo:
'shell user' ' ';echo 1 #'
E questo ci permette di causare qualche danno al sistema in questo comando. Aggiungiamo il nostro valore codificato a user_encoded.
UsrBlocked.php viene reindirizzato tramite /index.php?c=blocked, quindi vengono inseriti i parametri GET e POST necessari. Poiché il parametro user_encoded è codificato in Base64, è ideale per l'iniezione.
https://github.com/ohnonoyesyes/CVE-2023-1671 - exploit shell
https://vulncheck.com/blog/cve-2023-1671-analysis - analisi post cve-2023-1671
https://nvd.nist.gov/vuln/detail/CVE-2023-1671 - informazioni nist cve-2023-1671
Quindi, ci sono funzioni di test e di exploit.
Il test invia una richiesta ping al dominio dnslog(http://www.dnslog.cn) dal sito vulnerabile. Se il ping passa, la vulnerabilità esiste; altrimenti, la cve-2023-1671 è assente.
La funzione di exploit, invece, invia una richiesta con il tuo comando al server.
-h
Ottiene i parametri di utilizzo
--exploit
Chiama la funzione per sfruttare cve-2023-1671.
Questo eseguirà il tuo comando arbitrario senza verificare se esiste una vulnerabilità.
--test
Chiama la funzione di test della vulnerabilità.
Si effettua inviando un ping al dominio dnslog dal server vulnerabile.
Se il ping avviene, la vulnerabilità cve-2023-1671 è presente.
-u
Questo è l'IP o l'URL del tuo sito.
Nota il formato 192.168.0.1 o sito.com
-p
La porta del sito vulnerabile. Questo è un parametro obbligatorio, anche se hai https://sito.com devi specificare -u sito.com -p 443
-c
Il parametro della funzione --exploit
Questo è un comando arbitrario che vuoi eseguire per sfruttare il sito.
Formato -c 'echo cve'
python cve-2023-1671.py --exploit -u 192.168.0.1 -p 443 -c 'echo 1'
python cve-2023-1671.py --test -u 192.168.0.1 -p 443
Questo exploit è scritto per scopi educativi e non sono responsabile delle tue azioni
Usa questo exploit solo per testare e proteggere il tuo sistema.