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

 

posted @ 2021-01-16 19:59  fallingskies  阅读(679)  评论(1编辑  收藏  举报