05-23-周六_11-42-46
This commit is contained in:
@@ -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:// — 处理交互式的流
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 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 里的封装协议包含文件;
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -281,9 +283,11 @@ foreach($it as $f){
|
|||||||
|
|
||||||
#### 2.3.9 phar://
|
#### 2.3.9 phar://
|
||||||
|
|
||||||
PHP 伪协议 phar:// 可以用于在 PHP 中访问 Phar(PHP 归档)文件中的资源(如文件和目录)。
|
- PHP 伪协议 phar:// 可以用于在 PHP 中访问 Phar(PHP 归档)文件中的资源(如文件和目录)。
|
||||||
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 案例
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user