05-23-周六_11-42-46

This commit is contained in:
AaronXu
2026-05-23 11:42:46 +08:00
parent fdf5066e85
commit 7faafcd0b2

View File

@@ -92,26 +92,28 @@ include $_GET['file'];
### 2.1 常见协议 ### 2.1 常见协议
file:// — 访问本地文件系统 - file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs - http:// — 访问 HTTP(s) 网址
php:// — 访问各个输入/输出流I/O streams - ftp:// — 访问 FTP(s) URLs
zlib:// — 压缩流 - php:// — 访问各个输入/输出流I/O streams
data:// — 数据RFC 2397 - zlib:// — 压缩流
glob:// — 查找匹配的文件路径模式 - data:// — 数据RFC 2397
phar:// — PHP 归档 - glob:// — 查找匹配的文件路径模式
ssh2:// — Secure Shell 2 - phar:// — PHP 归档
rar:// — RAR - ssh2:// — Secure Shell 2
ogg:// — 音频流 - rar:// — RAR
expect:// — 处理交互式的 - ogg:// — 音频
- expect:// — 处理交互式的流
![image-20240130134253405](07.文件包含漏洞/image-20240130134253405.png) ![image-20240130134253405](07.文件包含漏洞/image-20240130134253405.png)
### 2.2 php.ini 参数设置 ### 2.2 php.ini 参数设置
在 php.ini 里有两个重要的参数allow_url_fopen、allow_url_include。 在 php.ini 里有两个重要的参数allow_url_fopen、allow_url_include。
allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件;
allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件; - allow_url_fopen:默认值是 ON。允许 url 里的封装协议访问文件;
- allow_url_include:默认值是 OFF。不允许包含 url 里的封装协议包含文件;
![image-20240130134255497](07.文件包含漏洞/image-20240130134255497.png) ![image-20240130134255497](07.文件包含漏洞/image-20240130134255497.png)
@@ -281,9 +283,11 @@ foreach($it as $f){
#### 2.3.9 phar:// #### 2.3.9 phar://
PHP 伪协议 phar:// 可以用于在 PHP 中访问 PharPHP 归档)文件中的资源(如文件和目录)。 - PHP 伪协议 phar:// 可以用于在 PHP 中访问 PharPHP 归档)文件中的资源(如文件和目录)。
Phar 文件是一个 PHP 应用程序或库的预打包归档文件它可以包含代码、配置、模板、图片、音频等相关资源。Phar 格式相当于 Java 中的 JAR 包,.NET 中的 DLL 文件,或者 Python 中的 Egg 包。
通过 phar:// 协议,我们可以在 PHP 中方便地对 Phar 文件中的特定资源进行读取、写入、修改、添加和删除等操作,而无需解压缩整个 Phar 文件,从而提高了文件操作的效率 - Phar 文件是一个 PHP 应用程序或库的预打包归档文件它可以包含代码、配置、模板、图片、音频等相关资源。Phar 格式相当于 Java 中的 JAR 包,.NET 中的 DLL 文件,或者 Python 中的 Egg 包
- 通过 phar:// 协议,我们可以在 PHP 中方便地对 Phar 文件中的特定资源进行读取、写入、修改、添加和删除等操作,而无需解压缩整个 Phar 文件,从而提高了文件操作的效率。
举例来说,假设我们的目录结构如下: 举例来说,假设我们的目录结构如下:
``` ```
@@ -309,9 +313,10 @@ $fileContent = file_get_contents($pharFile);
| is_readable | is_writable | is_writeable | parse_ini_file | | is_readable | is_writable | is_writeable | parse_ini_file |
| copy | unlink | stat | readfile | | copy | unlink | stat | readfile |
phar文件要能够上传到服务器端。如file_exists()fopen()file_get_contents()file()等文件操作的函数要有可用的魔术方法作为“跳板”。文件操作函数的参数可控,且:、/、phar等特殊字符没有被过滤。 - phar文件要能够上传到服务器端。如file_exists()fopen()file_get_contents()file()等文件操作的函数要有可用的魔术方法作为“跳板”。文件操作函数的参数可控,且:、/、phar等特殊字符没有被过滤。
可以理解为一个标志,格式为` xxx<?php xxx ;__HALT_COMPILER() ;?> `前面内容不限但必须以__HALT_COMPILER() ;?> 来结尾否则phar扩展将无法识别这个文件为phar文件。
phar的本质是一种压缩文件其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data这是上述攻击手法最核心的地方 - 可以理解为一个标志,格式为` xxx<?php xxx ;__HALT_COMPILER() ;?> `前面内容不限但必须以__HALT_COMPILER() ;?> 来结尾否则phar扩展将无法识别这个文件为phar文件
- phar的本质是一种压缩文件其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data这是上述攻击手法最核心的地方。
##### 2.3.9.1 案例 ##### 2.3.9.1 案例