CTF_web01对方不想和你说话,并向你扔了一段代码
分析这段代码
首先了解每个函数的功能和用法!
函数Extract:
定义和用法
extract() 函数从数组中将变量导入到当前的符号表。
该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。
该函数返回成功设置的变量数目。
语法
extract(array,extract_rules,prefix)
参数 描述
array 必需。规定要使用的数组。
extract_rules 可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。
prefix 可选。该参数规定了前缀。前缀和数组键名之间会自动加上一个下划线。
再看下面的代码
isset() 函数用于检测变量是否已设置并且非 NULL。
If判断,$a的值,发现整个代码中没有出现$a,所以我们可以get提交一个a=111,这个时候就有$a了,并且$a=111 ,再继续,就可以进入到if语句中了,又遇到了一个
$c=trim(file_get_comtents($b))
trim() 函数移除字符串两侧的空白字符或其他预定义字符。
trim(string,charlist)
参数 描述
string 必需。规定要检查的字符串。
charlist 可选。规定从字符串中删除哪些字符。如果省略该参数,则移除下列所有字符:
“\0” - NULL
“\t” - 制表符
“\n” - 换行
“\x0B” - 垂直制表符
“\r” - 回车
" " - 空格
file_get_contents() 函数
file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
其中file_get_contemts($b)就是吧$b的值给读取到里面了,然后再用trim函数处理,trim函数的用法是删除指定的字符,然后trim后面什么都没有指定,所以导致全部给删了。
我有疑问,看函数的定义和用法,未指定参数,不是只删除了那些特殊的字符吗?为什么为全部删除。
最后得到$c=’’,什么都没有,所以这里我们就可以构造参数获取flag了,成功获取
构造:url ?a=