#解决方法#
include包含,直接用伪协议就可以。
?file=php://filter/convert.base64-encode/resource=flag.php
我所能理解的是include()函数是会执行我们所上传的文件名(这里的文件名一定是该网页后台所有的,我们上传该文件名直接被赋值了,就是一个空壳子被塞了东西,然后执行),但是我们不需要执行该文件,我们只要该文件的源代码就行,所有怎么让他只读取而不执行呢?那就是要用到“
highlight_file(__FILE__);”我们被赋值后直接进行base64加密,而include()函数无法执行base64加密后的东西,他就报错,而这时highlight_file(__FILE__)就会返回改赋值文件名的源代码!
filter:过滤
convert:转变
encode:编码
resourece:资源
#理解#
-
if(isset($_GET['file'])){
这行代码检查$_GET['file']
是否已经设置。$_GET
是PHP中用于获取GET请求参数的数组。isset()
函数用来检查变量是否已设置并且非NULL。 -
$file = $_GET['file'];
如果$_GET['file']
存在,这行代码将其值赋给变量$file
。这意味着用户可以通过URL传递一个名为file
的参数来指定一个文件名。 -
include($file);
这行代码使用include
语句来包含并执行变量$file
中指定的文件。这可能导致执行任意代码,如果用户能够控制$file
的值。 -
}else{
这是一个else
语句,与上面的if
语句配对。如果$_GET['file']
没有被设置,那么将执行else
块中的代码。 -
highlight_file(__FILE__);
这行代码调用highlight_file()
函数,它输出当前文件的源代码,并使用HTML格式化和颜色高亮显示。__FILE__
是一个魔术常量,它返回当前文件的完整路径。
#大白话#
-
检查用户请求:首先,这段代码是在检查用户通过网址发送过来的一个叫
file
的东西。你可以把file
想象成一个指向某个文件的名字或路径。 -
包含文件:如果用户确实发送了
file
这个信息,PHP代码就会把这个信息存储到变量$file
里。然后,它会尝试找到这个文件,并且包含(或者说“执行”)里面的内容。这就好比你告诉电脑:“嘿,去书架上找到这本书,然后读给我听。” -
没有请求怎么办:但是,如果用户没有发送
file
这个信息,PHP代码就会执行另一套操作。它会显示当前这个PHP文件的内容。这有点像,如果没人告诉你要拿哪本书,它就会说:“好吧,那我就读读我自己的说明书给你听。”