
이 저장소에는 잘 알려진 Java 역직렬화 공격 도구인 ysoserial에 대한 제 업데이트가 포함되어 있습니다.
이것은 여기에서 찾을 수 있는 원본 ysoserial 애플리케이션의 포크입니다: https://github.com/frohoff/ysoserial
Java에서 Runtime.getRuntime().exec(String.class)가 동작하는 방식 때문에, 파이프를 제어하거나 출력을 파일로 보내야 하는 중첩되고 복잡한 명령(예: cat /etc/passwd > /tmp/passwd_copy)은 작동하지 않습니다. Runtime 클래스의 exec() 메서드에 의해 실행되는 명령이 터미널 환경 내에서 실행되지 않기 때문입니다. 한 가지 가능한 해결 방법은 "/bin/sh -c 'command'"를 실행하는 것이지만, ${IFS}를 사용하여 'command'의 공백 문자를 이스케이프해야 합니다. 그렇지 않으면 예상대로 작동하지 않습니다. 해당 문제와 가능한 해결 방법에 대한 자세한 내용은 세부 사항을 깊이 다루는 이 블로그 게시물을 읽어보세요.
이 문제를 해결하는 좋은 방법은 String 배열을 기대하는 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 []
...
이 저장소의 /target 디렉토리에서 컴파일된 jar를 다운로드하거나 여기를 클릭하세요.
직접 컴파일하려면:
Java 1.7+ 및 Maven 3.x+ 필요
$ git clone https://github.com/pimps/ysoserial-modified.git
$ cd ysoserial-modified
$ mvn clean package -DskipTests
jar 파일은 target 디렉토리에 위치합니다.