文件上传漏洞实战 Bypass 教学文档
一、前言
文件上传漏洞是Web安全中常见的漏洞类型,其核心目标是上传可被服务器解析的恶意木马(如PHP/JSP脚本)以实现Getshell。实战中,文件上传功能常出现在小程序、举报/投诉模块、监管部门系统等业务场景,可通过搜索“举报”“监管”等关键字定位潜在上传点。本文结合实战案例,详细讲解文件上传漏洞的绕过技巧与利用流程。
二、知识铺垫:文件上传漏洞核心要点
要实现Getshell,需满足两个条件:上传恶意文件 + 服务器解析该文件。以下是常见绕过方向与基础原理:
2.1 后缀绕过
服务器通常通过“黑名单/白名单”校验文件后缀(如禁止.php但允许.jpg),常见绕过思路包括:
- 利用组件解析漏洞(如IIS 6.0解析
.asp;.jpg为ASP文件、Nginx解析.php.jpg为PHP文件); - 双写后缀(如
.pphphp,部分过滤规则仅替换一次php); - 大小写混淆(如
.PhP,适用于未统一转为小写校验的场景)。
2.2 MIME类型绕过
MIME类型用于标识文件类型,服务器可能通过请求头中的Content-Type字段校验。常见MIME类型如下:
| 文件类型 | MIME类型 |
|---|---|
| PNG图片 | image/png |
| JPEG图片 | image/jpeg |
| GIF图片 | image/gif |
| PHP脚本 | text/php |
| JSP脚本 | text/jsp |
| HTML文件 | text/html |
绕过方法:修改请求包中的Content-Type字段,将恶意文件的MIME类型伪装为合法类型(如将.php文件的Content-Type改为image/png)。
2.3 内容绕过:文件头检测
部分服务器会检测文件内容开头的“文件头”(Magic Bytes)以验证文件类型。常见文件头的十六进制表示如下:
| 文件类型 | 文件头(十六进制) |
|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A |
| JPEG | FF D8 FF E0 |
| GIF | 47 49 46 38 |
绕过方法:使用Burp Suite等工具修改请求包中的文件内容,在恶意代码前添加合法文件头(如在PHP一句话木马前添加PNG文件头)。
2.4 限制敏感词绕过
若服务器通过关键词过滤(如拦截eval、system等恶意函数),可尝试以下方法:
- 使用混淆马(如冰蝎、哥斯拉的加密木马,避免明文出现敏感词);
- 字符编码转换(如Unicode转义、Base64编码);
- 参考针对性绕过教程:
- PHP绕过:
https://zhuanlan.zhihu.com/p/1984306099051071020 - JSP绕过:
https://zhuanlan.zhihu.com/p/2028469513780310954
- PHP绕过:
三、实战漏洞挖掘与Bypass流程
3.1 定位上传点
目标系统的“我要投诉举报”模块存在文件上传功能(此类模块因需用户提交证据,常开放文件上传接口)。
3.2 捕获并分析请求包
使用浏览器开发者工具或代理工具(如Burp Suite)捕获上传请求,关键信息包括:
- 请求URL:上传接口的地址;
- Cookie:包含
PHPSESSID(会话标识,用于维持登录状态); - 请求体:包含文件名、文件内容、
Content-Type等参数。
3.3 后缀绕过测试
尝试直接上传.php后缀的文件(如shell.php),发现服务器未过滤后缀(返回200 OK),但内容被过滤(提示“文件内容非法”)。
3.4 内容绕过:Unicode转义与文件头修改
- Unicode转义测试:将恶意代码中的中文注释或字符串转为Unicode编码(如
<?php eval($_POST['cmd']);?>中的中文转为\uXXXX格式),但仍提示“文件类型错误”。 - 修改文件头:在文件内容开头添加合法文件头(如PNG的
89 50 4E 47 0D 0A 1A 0A),具体操作:- 用Burp Suite拦截上传请求,修改请求体中的文件内容,在恶意代码前插入PNG文件头的十六进制数据;
- 将
Content-Type改为image/png(匹配文件头类型)。
3.5 上传与路径获取
修改后重新发送请求,服务器返回文件存储路径(如/upload/20260511/shell.png)。拼接域名访问该路径,确认文件已成功上传。
3.6 连接木马与命令执行限制
使用蚁剑连接上传的一句话木马(配置连接密码与路径),成功访问服务器文件目录,但执行虚拟终端命令时失败——原因是phpinfo显示disable_functions禁用了system、exec等危险函数。
3.7 绕过disable_functions
利用蚁剑插件**disable_functions绕过工具**(选择模式:disable_functions-8.137.123.30),通过LD_PRELOAD、PHP反射等方法绕过函数限制,最终成功执行系统命令,获取服务器Shell。
四、总结与扩展资源
4.1 关键流程回顾
- 定位上传点(举报/监管模块优先);
- 捕获请求包,分析后缀、MIME、内容过滤规则;
- 依次尝试后缀、MIME、文件头、敏感词绕过;
- 上传木马后,处理
disable_functions等限制。
4.2 扩展学习资源
- PHP一句话木马绕过:
https://zhuanlan.zhihu.com/p/1984306099051071020 - JSP一句话木马绕过:
https://zhuanlan.zhihu.com/p/2028469513780310954 disable_functions绕过:https://www.cnblogs.com/DumpInfou/p/18023278
注意:实战中需遵守法律法规,仅在授权范围内测试,避免非法入侵。