[BJDCTF2020]EzPHP
(0)

参考链接:
题解

1.

$_SERVER是一个包含了诸如头信息、路径、以及脚本信息等等信息的数组。里面有服务器和执行环境的信息,还有很多的参数

这里是要绕过$_SERVER['QUERY_STRING']

该方法不会自动解码url编码后的文字,就是不会进行urldecode,所以要传入编码后的文字
urldecode——解码已编码的url字符串(百分号加两位十六进制数,空格为加号),但是超全局变量$_GET和$_REQUEST已经被解码了,对这两个元素使用urldecode()可能会导致漏洞出现

2.

这里用GET方法传入了两个参数,一个是file,另一个是debu

正则表达式——行起始/结束位置

^和$分别匹配字符串的开始位置和结束位置,用来判断“**整个字符串能否由表达式匹配**”
在某些情况下,**^也可以匹配字符串内部的“行起始位置”。**在编辑文本时,敲回车键就输入行终止 
符,结束当前行,新起一行。

所以这种情况,可以用%0a换行绕过:?debu=aqua_iscute%0a

3.

$_REQUEST默认情况下包含了$_GET,$_POST,$_COOKIE的**数组**,由于$_REQUEST中的变量通过GET, 
POST,COOKIE输入机制传递给脚本文件,因此可以被远程用户篡改而不可信

在php.ini配置文件中规定了$_REQUEST数组中内容的优先级为'EGPCS',E代表$_ENV,G代表$_GET,P代 
表$_POST,C代表$_COOKIE,S代表$_SESSION。后面出现的数据会覆盖前面写入的数据,其默认的数据 
写入方式就是EGPCS。在代码中最好要明确使用$_GET和$_POST全局变量

这里可以post一个数字绕过

4.

$file变量是可控的,但是前面有正则匹配替代了http和https,我们的目的是让file_get_contents($file)可以返回debu_debu_aqua
data://伪协议:

file=data://text/plain,debu_debu_aqua

5.

这里是让两个sha1值相同,但是原本的值不同
根据sha1函数特性,sha1函数参数为数组时直接返回false
?shana[]=a&passwd[]=b

这里的extract函数可以从数组中将变量导入到当前的符号表,使用数组键名作为变量名,数组键值当做变量值。当函数内的数组键名为arg和code,键值为注入的代码,实现变量覆盖,导致代码注入

6.

这里包含了flag.php这个文件,代表可以使用里面的变量。

get_defined_vars()可以输出所有变量和值

flag[code]=create_function&flag[arg]=}var_dump(get_defined_vars());//

require可以代替include:
他们两个几乎一样,require出错时停止运行,include会警告,继续运行

flag[arg]=}require(base64_decode(cmVhMWZsNGcucGhw));vardump(get_defined_vars());//&flag[code]=create_function
flag[arg]=require(php://filter/read=convert.base64-encode/resource=rea1fl4g.php)

这个步骤可以参考上面的链接 里面内容更全面

本文为作者hackerbo.com发布,未经允许禁止转载!
上一篇 下一篇
评论
暂无评论 >_<
加入评论