
Данный репозиторий содержит мои обновления к хорошо известному инструменту эксплуатации Java-десериализации ysoserial.
Это форк оригинального приложения ysoserial, которое можно найти здесь: https://github.com/frohoff/ysoserial
Из-за того, как Runtime.getRuntime().exec(String.class) работает в Java, вложенные и сложные команды, где вам нужны управляющие конвейеры (pipes) или перенаправление вывода в файлы (например: cat /etc/passwd > /tmp/passwd_copy), не будут работать, поскольку команда, выполняемая методом exec() из класса Runtime, не выполняется в среде терминала. Один из возможных обходных путей — выполнить "/bin/sh -c 'command'", но вам нужно экранировать пробелы в 'command' с помощью ${IFS}, иначе это не будет работать как ожидается. Подробнее об этой проблеме и возможных обходных путях читайте в этом посте, где всё разбирается детально.
Хорошее решение этой проблемы — передать аргументы методу Runtime.getRuntime().exec(String[].class), который ожидает массив строк. Лучший вариант — выполнить следующее: Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", "command"}). При такой передаче аргументов Java поймёт, что вы выполняете /bin/bash с аргументами -c и 'command' правильным образом, и выполнит вашу команду в среде терминала, что позволит использовать вложенные или сложные команды (с | или ;), а также управлять вводом и выводом (с < и >).
Учитывая это, я добавил в ysoserial функциональность, где вы указываете тип терминала, который хотите использовать для выполнения вашей команды (cmd / bash / powershell или none), и моя модификация выполнит вашу команду в контексте этого терминала, позволяя выполнять любые сложные команды так, как они и должны работать!
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 []
...
Скачайте скомпилированный jar-файл из каталога /target этого репозитория или просто нажмите здесь
Чтобы скомпилировать его самостоятельно:
Требуются Java 1.7+ и Maven 3.x+
$ git clone https://github.com/pimps/ysoserial-modified.git
$ cd ysoserial-modified
$ mvn clean package -DskipTests
Jar-файл будет находиться в каталоге target.