bugku ——各种绕过哟
2026/7/7 9:33:09 网站建设 项目流程

启动靶场读取源码

<?php highlight_file('flag.php'); $_GET['id'] = urldecode($_GET['id']); $flag = 'flag{xxxxxxxxxxxxxxxxxx}'; if (isset($_GET['uname']) and isset($_POST['passwd'])) { if ($_GET['uname'] == $_POST['passwd']) print 'passwd can not be uname.'; else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')) die('Flag: '.$flag); else print 'sorry!'; } ?>

分析一下代码:

必须传入GET参数uname,还要传入POST参数passwd;

uname(GET)和password(POST)不能相等,否则会返回“passwd can not be uname”

uname 的sha1加密结果和passwd的sha1的加密结果必须完全相等(===),同时GET参数id必须等于margin;

满足所有条件,就会输出flag。

漏洞就在于如果给sha1加密函数传入一个数组就会返回NULL

NULL === NULL是严格相等的。

例如 uname[]=123和 passwd[]=456

这个时候sha1(uname) === sha1(passwd)就成立了

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询