题目链接为:/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://伪协议
绕过
可以参考以前的一篇文章:
综上,可以构造payload为?GJCTF[]=&flag=data://text/plain;base64,Z2V0X2ZsYWc=
并post方式传入:flag=1
这里我用hackbar来完成
提交后成功获得flag
本文发布于:2024-01-31 15:38:45,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170668672729580.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |