文件上传bypass安全狗
字数 925 2025-08-05 11:39:40
文件上传Bypass安全狗4.0技术详解
前言
本文详细分析绕过安全狗4.0文件上传防护的技术方法,适用于渗透测试人员和安全研究人员。安全狗作为国内常见的WAF产品,其4.0版本对文件上传防护进行了多项改进,但依然存在可绕过的方法。
基本原理
WAF在文件上传时主要检查以下内容:
- 请求的URL
- Boundary边界
- MIME类型
- 文件扩展名
- 文件内容
常见扩展名黑名单包括:
asp|asa|cer|cdx|aspx|ashx|ascx|asax
php|php2|php3|php4|php5|asis|htaccess
htm|html|shtml|pwml|phtml|phtm|js|jsp
vbs|asis|sh|reg|cgi|exe|dll|com|bat|pl|cfc|cfm|ini
测试环境
- 环境:MySQL + Apache + PHP
- WAF:安全狗4.0
- 上传页面限制:仅允许Content-Type为image/gif、image/jpeg、image/pjpeg的文件
绕过技术详解
1. 增大文件大小
- 原理:安全狗对Content-Disposition字段的长度验证不准确
- 方法:增加Content-Disposition字段的长度
- 示例:
Content-Disposition: form-data; name="file"; filename="shell.php"
[大量空格]
2. 文件名中间加符号
- 方法:在文件名中间加入特殊字符扰乱匹配
- 有效字符:
;、"、' - 示例:
filename="shell;.php"
filename="shell'.php"
3. 切断filename=与值
- 方法:在filename=和值之间加入干扰
- 示例:
filename= ; filename="shell.php"
4. 文件名换行
- 方法:在filename值中插入换行符(0x0a)
- 示例:
filename="shell
.php"
5. 多个等号
- 方法:使用多个等号干扰匹配
- 示例:
filename=="shell.php"
filename==="shell.php"
6. %00截断
- 原理:利用0x00作为结束符的特性
- 方法:在文件名后添加%00
- 示例:
filename="shell.php%00.jpg"
已失效的方法(安全狗4.0)
- 去除form-data关键字
- Content-Disposition大小写混淆
- 添加额外的Content-Type头
- 添加额外的Content-Length头
- 简单的双引号去除
总结思路
绕过安全狗4.0文件上传防护的核心思想:
- 大小写转换:虽然简单大小写混淆已失效,但可尝试更复杂的组合
- 干扰字符污染:插入特殊字符、换行符等
- 字符编码:使用URL编码、Unicode编码等
- 拼凑法:组合多个干扰因素
- 边界扰乱:修改boundary或Content-Disposition结构
这些技术思路不仅适用于文件上传绕过,也可应用于其他WAF绕过场景,如SQL注入防护绕过等。实际测试中需要根据目标环境灵活组合使用多种方法。