我们都知道 include()
是文件包含的意思,举个简单的例子:
#include<stdio.h>
void main() {
. . .
}
很显然,include()
用法同C语言:引入一个文件,则这个文件中的所有内容(变量、函数、类)都可以在本文件中使用。
回到PHP,文件包含的具体细节:
我在本地写一个 1.jpg
(这里讲将文件类型不写成PHP,意为:include
函数会读取文件内容,不需要知道这是什么文件)
访问本地页面
此时我将 1.jpg
中的内容改掉(只要不是PHP就行)
访问本地
我们发现他会原样输出
但这和伪协议有什么关系?
我在WWW的上级目录写一个 1.php
文件
payload:?a=php://filter/read=convert.base64-encode/resource=../1.php
当 include()
不认识这个文件的时候(不为PHP。我们使用 base64 加密,故不为PHP),同样原样输出