[i=s] 本帖最后由 yuri 于 2025-8-1 01:44 编辑 [/i]
一、内容概括
- 文件包含漏洞原理和文件包含漏洞;
- PHP里涉及文件包含的函数;
- PHP伪协议。
二、重要知识和细节
- 文件包含漏洞原理:当程序使用用户可控的参数(如URL参数、表单输入)动态包含文件时,若未对输入进行校验,攻击者可操纵路径加载任意文件;
- 文件包含漏洞文件包含漏洞:①LFI: local file include(本地文件包含)②RFI:remote file include(远程文件包含),需要满足php.ini配置文件内
allow_url_fopen和allow_url_include都要为ON;
- PHP里涉及文件包含的函数:
include():用到文件就去读取使用,如果出错只会警告但代码会继续执行
Incluede_once():用到文件就去读取使用,如果出错只会警告但代码会继续执行(包含的文件只会读取一次,不会重复读取)
Require():如果发生错误,代码会停止执行
require_once():如果发生错误,代码会停止执行(包含的文件只会读取一次,不会重复读取)
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
php://filter/read=convert.base64-encode/resource=文件名
php://input:将 post请求的数据当做代码执行
压缩类型:可以直接访问压缩包里面的子文件
zlib:// compress.zlib://压缩包名 (只能够执行 gz 后缀的压缩包)
zip://压缩文件绝对路径%23压缩文件内的子文件名
bzip://
phar://压缩文件绝对路径/子文件名 (可以使用相对路径也可以使用绝对路径)
bzip2://
data:// — 数据(RFC 2397) 执行代码
data://text/plain;base64,编码的代码
data://text/plain,原始代码
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — 安全外壳协议 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流
三、实操和作业
- 为什么会需要文件包含功能?
方便,代码简洁
- 文件包含漏洞的原理是什么?
当程序使用用户可控的参数(如URL参数、表单输入)动态包含文件时,若未对输入进行校验,攻击者可操纵路径加载任意文件
- 实操课程内讲解的文件包含漏洞靶场
