远程协议
如果PHP的配置选项allow_url_include
、allow_url_fopen
状态为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含(RFI)
下面来做个CTFHub技能树上的一个题,远程包含
启动环境
查看phpinfo,发现allow_url_include
、allow_url_fopen状态为ON
打开BP抓包
修改第一行和最后一行,得到flag
php://协议
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter
和php://input
php://filter用于读取源码。
php://input用于执行php代码。
php://filter/convert.base64-encode/resource=文件路径
是 PHP 中一种特殊的流过滤器用法,它允许你读取文件内容并以 Base64 编码的形式返回。
-
php://filter/
- 表示使用 PHP 的过滤器流 -
convert.base64-encode
- 应用 Base64 编码过滤器 -
resource=文件路径
- 指定要读取的文件路径
php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。
利用该方法,我们可以直接写入php文件,输入file=php://input
,然后使用burp抓包
下面来做一个题
开启环境
同样发现allow_url_include
、allow_url_fopen状态为ON
下面步骤同上一题