PHP伪协议
一、伪协议介绍
PHP伪协议,也是php支持的协议和封装协议。
常见的有:
- file:// 访问本地文件系统
- php:// 访问各个输入/输出流
- data:// 数据
- zip:// 压缩流
不过有些伪协议需要allow_url_fopen和allow_url_include的支持。
- allow_url_fopen On/Off 允许或禁止打开URL文件
- allow_url_include On/Off 允许或禁止引用URL文件
file://伪协议用作是展现本地文件系统。 CTF中一般用来读取本地文件或者执行php脚本。 绝对路径和相对路径或者网络路径(http://127.0.0.1/info.php)都可以。不过网络路径就需要allow_url_fopen和allow_url_include都为On。
tips: include()/require()/include_once()/require_once()的参数可控的情况下,如果导入的文件为非.php文件,仍会按照PHP语法进行解析,这是include()函数所决定的。
例:使用file://伪协议去包含本地的phpinfo.php和flag.txt
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
远程包含需要allow_url_fopen和allow_url_include都为On。 允许通过HTTP 1.0的GET方法,以只读的方式访问文件或者资源。 CTF中通常用于远程包含。
?file=http:/127.0.0.1/phpinfo.txt
phar://伪协议和zip://类似,同样可以访问zip格式压缩包内容
?file=phar://E:\WWW/phpinfo.zip\phpinfo.txt