前言

对 Weblogic 系列的相关漏洞进行复现,并编写相关漏洞的扫描器。

漏洞介绍

Weblogic Web Service Test Page中一处存在任意文件上传漏洞,Web Service Test Page 在 "生产模式" 下默认不开启,所以该漏洞有一定限制。利用该漏洞,可以上传任意jsp文件,进而获取服务器权限

环境搭建

启动测试环境:

docker compose up -d

等待一段时间,访问http://127.0.0.1:7001/console/login/LoginForm.jsp,说明weblogic已成功启动。

注:这里要查看一下用户的密码:docker compose logs | grep password,密码随机生成,用户名:weblogic

漏洞复现

登录后台页面,点击base_domain的配置,在"高级"中开启"启用 Web 服务测试页"选项:

访问http://127.0.0.1:7001/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。将目录设置为ws_utc应用的静态文件css目录,访问这个目录是无需权限的,这一点很重要。

查看上传数据包,有时间戳

然后访问http://127.0.0.1:7001/ws_utc/css/config/keystore/[时间戳]_[文件名],即可执行webshell:

这里1.jsp文件写入成功,但是回显错误。仍然证明存在任意文件上传漏洞,使用蚁剑可成功连接。

代码

import requests

url1 = 'http://127.0.0.1:7001/ws_utc/config.do'
url2 = 'http://127.0.0.1:7001/ws_utc/begin.do'

def poc():
    headers = {
        'Content-Type':'text/html; charset=UTF-8',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
    }
    res1 = requests.get(url1,headers=headers)
    res2 = requests.get(url2,headers=headers)

    if res1.status_code == 200 and res2.status_code == 200:
        print("存在CVE-2018-2894")
    else:
        print("不存在此漏洞")

if __name__ == "__main__":
    poc()

更多推荐