05-23-周六_11-42-46
This commit is contained in:
@@ -92,26 +92,28 @@ include $_GET['file'];
|
||||
|
||||
### 2.1 常见协议
|
||||
|
||||
file:// — 访问本地文件系统
|
||||
http:// — 访问 HTTP(s) 网址
|
||||
ftp:// — 访问 FTP(s) URLs
|
||||
php:// — 访问各个输入/输出流(I/O streams)
|
||||
zlib:// — 压缩流
|
||||
data:// — 数据(RFC 2397)
|
||||
glob:// — 查找匹配的文件路径模式
|
||||
phar:// — PHP 归档
|
||||
ssh2:// — Secure Shell 2
|
||||
rar:// — RAR
|
||||
ogg:// — 音频流
|
||||
expect:// — 处理交互式的流
|
||||
- file:// — 访问本地文件系统
|
||||
|
||||
- http:// — 访问 HTTP(s) 网址
|
||||
- ftp:// — 访问 FTP(s) URLs
|
||||
- php:// — 访问各个输入/输出流(I/O streams)
|
||||
- zlib:// — 压缩流
|
||||
- data:// — 数据(RFC 2397)
|
||||
- glob:// — 查找匹配的文件路径模式
|
||||
- phar:// — PHP 归档
|
||||
- ssh2:// — Secure Shell 2
|
||||
- rar:// — RAR
|
||||
- ogg:// — 音频流
|
||||
- expect:// — 处理交互式的流
|
||||
|
||||

|
||||
|
||||
### 2.2 php.ini 参数设置
|
||||
|
||||
在 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 里的封装协议包含文件;
|
||||
|
||||

|
||||
|
||||
@@ -281,9 +283,11 @@ foreach($it as $f){
|
||||
|
||||
#### 2.3.9 phar://
|
||||
|
||||
PHP 伪协议 phar:// 可以用于在 PHP 中访问 Phar(PHP 归档)文件中的资源(如文件和目录)。
|
||||
Phar 文件是一个 PHP 应用程序或库的预打包归档文件,它可以包含代码、配置、模板、图片、音频等相关资源。Phar 格式相当于 Java 中的 JAR 包,.NET 中的 DLL 文件,或者 Python 中的 Egg 包。
|
||||
通过 phar:// 协议,我们可以在 PHP 中方便地对 Phar 文件中的特定资源进行读取、写入、修改、添加和删除等操作,而无需解压缩整个 Phar 文件,从而提高了文件操作的效率。
|
||||
- PHP 伪协议 phar:// 可以用于在 PHP 中访问 Phar(PHP 归档)文件中的资源(如文件和目录)。
|
||||
|
||||
- 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 |
|
||||
| copy | unlink | stat | readfile |
|
||||
|
||||
phar文件要能够上传到服务器端。如file_exists(),fopen(),file_get_contents(),file()等文件操作的函数要有可用的魔术方法作为“跳板”。文件操作函数的参数可控,且:、/、phar等特殊字符没有被过滤。
|
||||
可以理解为一个标志,格式为` xxx<?php xxx ;__HALT_COMPILER() ;?> `,前面内容不限,但必须以__HALT_COMPILER() ;?> 来结尾,否则phar扩展将无法识别这个文件为phar文件。
|
||||
phar的本质是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data,这是上述攻击手法最核心的地方。
|
||||
- phar文件要能够上传到服务器端。如file_exists(),fopen(),file_get_contents(),file()等文件操作的函数要有可用的魔术方法作为“跳板”。文件操作函数的参数可控,且:、/、phar等特殊字符没有被过滤。
|
||||
|
||||
- 可以理解为一个标志,格式为` xxx<?php xxx ;__HALT_COMPILER() ;?> `,前面内容不限,但必须以__HALT_COMPILER() ;?> 来结尾,否则phar扩展将无法识别这个文件为phar文件。
|
||||
- phar的本质是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data,这是上述攻击手法最核心的地方。
|
||||
|
||||
##### 2.3.9.1 案例
|
||||
|
||||
|
||||
Reference in New Issue
Block a user