Bugku-WEB-冬至红包
打开网页
显然是代码审计了,分析代码
当没有用GET方法传入flag时,会显示Click here的链接。
点击链接会用GET方法传入一串字符串$exam,后面是当前时间的一串sha1哈希值。
判断传入的flag长度与$exam是否相同,不同则显示 长度不允许
第二个判断过滤了一大堆
第三个判断传入flag的值等于flag值的哈希值,正确就输出flag。用的是严格的三个等号的比较,我们flag都不知道,哈希值更不可能知道了,==
但容易发现此处存在任意代码执行漏洞,
eval($_GET['flag'])
尝试绕过过滤
echo被过滤了,用php短标签进行输出
flag被过滤了,用先赋其他值,再修改的方法绕过
当php开启短标签后,
能正常解析类似于这样形式的php文件: phpinfo() ?>
并且可以使用<?=$a?>的形式输出
$exam字符串长度为49
为了使payload长度与$exam长度相等,在代码间加入无意义的语句。
构造payload:$a=blag;$a{0}=f;111111111111111111111;?><?=$$a;?>
成功得到flag