本文主要是介绍GJ-CTF web之 来一波_ 关于$_REQUEST变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
GJ-CTF web之 来一波?
题目链接为:http://www.czlgjbbq.top/GJCTF/easyaduit.php
进入题目,题目直接给了源码提示
主要的内容为:
if($_REQUEST){foreach ($_REQUEST as $key => $value) {if(preg_match('/[a-zA-Z]/i', $value)){ //这里用preg_match函数检查传入的参数die("其实我劝你最好不要输入任何字母!"); //使传入的参数不能有字母}}}
这里的$_REQUEST
变量获得GET或POST的参数,值的注意的是,如果通过不同的方式获得相同变量的不同值,$_REQUEST
变量只会获得最后传入的那个参数的值
这里的preg_match
函数可以用数组来绕过
if(isset($_GET['GJCTF'])){if(!(substr($_GET['GJCTF'], 32) === md5($_GET['GJCTF']))){ //这里要传入GJCTF参数,并且要让它和它的md5值相等die('日爆md5!!!!!!');}
这里可以用数组来使substr
函数和md5
函数出错而绕过
else{$getflag = file_get_contents($_GET['flag']);if($getflag === 'get_flag'){include 'flag.php'; //这里需要注意的就是file_get_contents函数echo $flag;}else die('差一点哦!');}
}
file_get_contents
函数可以用data://伪协议
绕过
可以参考以前的一篇文章:https://blog.csdn.net/silence1_/article/details/90241302
综上,可以构造payload为?GJCTF[]=&flag=data://text/plain;base64,Z2V0X2ZsYWc=
并post方式传入:flag=1
这里我用hackbar来完成
提交后成功获得flag
这篇关于GJ-CTF web之 来一波_ 关于$_REQUEST变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!