Weblogic 任意文件上传漏洞(CVE-2018-2894)
前言
对 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 requestsurl1 = '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()