记一次实战文件上传的简单bypass
字数 2692
更新时间 2026-05-13 12:27:58

文件上传漏洞实战 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 限制敏感词绕过

若服务器通过关键词过滤(如拦截evalsystem等恶意函数),可尝试以下方法:

  • 使用混淆马(如冰蝎、哥斯拉的加密木马,避免明文出现敏感词);
  • 字符编码转换(如Unicode转义、Base64编码);
  • 参考针对性绕过教程:
    • PHP绕过:https://zhuanlan.zhihu.com/p/1984306099051071020
    • JSP绕过:https://zhuanlan.zhihu.com/p/2028469513780310954

三、实战漏洞挖掘与Bypass流程

3.1 定位上传点

目标系统的“我要投诉举报”模块存在文件上传功能(此类模块因需用户提交证据,常开放文件上传接口)。

3.2 捕获并分析请求包

使用浏览器开发者工具或代理工具(如Burp Suite)捕获上传请求,关键信息包括:

  • 请求URL:上传接口的地址;
  • Cookie:包含PHPSESSID(会话标识,用于维持登录状态);
  • 请求体:包含文件名、文件内容、Content-Type等参数。

3.3 后缀绕过测试

尝试直接上传.php后缀的文件(如shell.php),发现服务器未过滤后缀(返回200 OK),但内容被过滤(提示“文件内容非法”)。

3.4 内容绕过:Unicode转义与文件头修改

  1. Unicode转义测试:将恶意代码中的中文注释或字符串转为Unicode编码(如<?php eval($_POST['cmd']);?>中的中文转为\uXXXX格式),但仍提示“文件类型错误”。
  2. 修改文件头:在文件内容开头添加合法文件头(如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禁用了systemexec等危险函数。

3.7 绕过disable_functions

利用蚁剑插件**disable_functions绕过工具**(选择模式:disable_functions-8.137.123.30),通过LD_PRELOAD、PHP反射等方法绕过函数限制,最终成功执行系统命令,获取服务器Shell。

四、总结与扩展资源

4.1 关键流程回顾

  1. 定位上传点(举报/监管模块优先);
  2. 捕获请求包,分析后缀、MIME、内容过滤规则;
  3. 依次尝试后缀、MIME、文件头、敏感词绕过;
  4. 上传木马后,处理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

注意:实战中需遵守法律法规,仅在授权范围内测试,避免非法入侵。

相似文章
相似文章
 全屏