PHP伪协议
一.PHP支持的伪协议
1 | 1 file:// — 访问本地文件系统 |
二.详解
1.php://filter
元封装器。文件过滤筛选。php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。
eg.[ACTF2020 新生赛]Include1
1 | http://71a5b17a-a293-4fe5-95a3-99aa00f4c77a.node5.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php #PHP伪协议 |
上述也是比较常用的。
| 名称 | 描述 |
|---|---|
| resource=<要过滤的数据流> | 这个参数是必须的。它指定了你要筛选过滤的数据流。 |
read=<读链的筛选列表> |
该参数可选。可以设定一个或多个过滤器名称,以管道符(` |
| write=<写链的筛选列表> | 该参数可选。可以设定一个或多个过滤器名称,以管道符(` |
| <;两个链的筛选列表> | 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。 |
过滤器
字符串过滤器
该类通常以string开头,对每个字符都进行同样方式的处理。
string.rot13
一种字符处理方式,字符右移十三位。
string.toupper
将所有字符转换为大写。
string.tolower
将所有字符转换为小写。
string.strip_tags
这个过滤器就比较有意思,用来处理掉读入的所有标签,例如XML的等等。在绕过死亡exit大有用处。
转换过滤器
对数据流进行编码,通常用来读取文件源码。
convert.base64-encode & convert.base64-decode
base64加密解密
convert.quoted-printable-encode & convert.quoted-printable-decode
可以翻译为可打印字符引用编码,使用可以打印的ASCII编码的字符表示各种编码形式下的字符。
补充资料:https://www.leavesongs.com/PENETRATION/php-filter-magic.html
2.data://
数据流封装器,以传递相应格式的数据。可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。
eg.
1 | 1、data://text/plain, |
3 file://
用于访问本地文件系统,并且不受allow_url_fopen,allow_url_include影响
file://协议主要用于访问文件(绝对路径、相对路径以及网络路径)
比如:
1 | http://www.xx.com?file=file:///etc/passsword |
4 php://
在allow_url_fopen,allow_url_include都关闭的情况下可以正常使用
php://作用为访问输入输出流
包含php://filter和php://input
5 php://input
php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。
例如:
1 | http://127.0.0.1/cmd.php?cmd=php://input |
POST数据:
注意:
当enctype="multipart/form-data"的时候 php://input` 是无效的
遇到file_get_contents()要想到用php://input绕过。
其中php://input通常与
1 | <?php system(' ')?> |
联合使用,用于读取文件内容,查看目录等等。
6 zip://
zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。
Leave a comment