前言
在CTF中我们经常会遇到各种文件读取(包含),SSRF的漏洞,遇到这些漏洞的时候可能会经常看到各种PHP的伪协议,这篇文章就是总结一下常用到的PHP伪协议以及用途。
PHP常见的伪协议
PHP中常见的伪协议如下:
协议 | 协议作用 | 用法举例 |
http(s):// | 这个不用多说,最常用的一个协议,用来访问http(s)网站 | ?file=http://127.0.0.1:8080 |
file:// | 访问本地文件系统 | ?file=file:///etc/passwd |
php:// | 访问各个输入/输出流,包括php://filter,php://input等 | ?file=
php://filter/convert.base64-encode/resource=xxx.php ?file= php://input [post data] <?php phpinfo()?> |
phpar:// |
php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压 |
?file=phar://压缩包/内部文件 phar://xxx.png/shell.php |
zip:// |
zip伪协议和phar协议类似,但是用法不一样 |
?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名] zip://xxx.png#shell.php |
data:// |
php://相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中 |
?file=
data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4 |
PHP伪协议常用于的场景
读取本地文件
当有SSRF漏洞或者文件包含漏洞时,我们可以利用file协议读取系统中的任意文件。当PHP中有下面的函数时要尝试是否可以利用file协议读取协议文件:file_get_contents(),curl_exec(),readfile(),fopen()。
文件包含限制了文件后缀名为PHP
遇到了一个文件包含漏洞但是限制了文件的后缀名只能是PHP时,可以通过php://协议来读取任意的PHP文件或者通过php://执行任意系统命令
如下的一个例子,限制了文件的后缀名为PHP,直接输入文件路径到include中会被当做代码执行,想要获取到文件内容时,就可以利用php://filter协议
利用php://filter回显include包含文件的内容
文件上传+文件包含得到webshell
有的上传点往往限制了只能上传图片或者压缩包,当有一个文件包含漏洞的时候,可以通过上传+文件包含拿到webshell。
首先将文件压缩成zip格式,然后改变后缀为png,上传文件后,拿到路径可以利用文件包含执行文件内容,拿到webshell。
总结
PHP伪协议的用法有很多,在实际利用中要可以灵活的利用,结合其它的漏洞可能会得到意想不到的效果。
原文始发于微信公众号(信安路漫漫):常见的伪协议以及利用场景
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论