$_get[‘ ’]在harkber的网址后加上?加参数名=什么,即可输入参数
system()是将命令传给主机运行、
preg_match() 函数用于进行正则表达式匹配
正则表达式看不懂,所以我先访问url?c=system("ls");查看目录里有什么文件,发现可以运行且有flag.php和index.php。
但是不知道怎么把flag弄出来,所以看了wp
wp说直接访问这个url?c=system("tac%20fla*")
经过调查发现tac是个命令符,作用是将文件显示出来
我试着访问?c=system("tac flag.php");失败
再看*和?查询是通配符用来模糊搜索文件,当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。
我猜测 if(!preg_match("/flag/i", $c))的意思是c变量中不能出现flag这个词,所以用通配符模糊
我再访问
?c=system("tac fla?.php");失败
又看了其他wp,发现
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
那么要输出flag还需要输出语句于是
我访问?c=echo system("tac fla?.php");得到flag
ctfshow{62036f7c-6c8f-4db0-b7f2-3fc1ec83b7d2}