web29
这道题考察的是sha1()函数的漏洞,也就是可以把参数变成数组绕过,我们先分析代码
<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']); // 使用get方式传入id并且会url编码
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) { // 使用get方式传入uname的参数,
// 使用post方式传入passwd参数
if ($_GET['uname'] == $_POST['passwd']) // 如果这两个参数相等
print 'passwd can not be uname.'; // 打印 passwd不能是uname
else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))
// 如果经过sha1加密后的uname和passwd相等,并且id=margin
die('Flag: '.$flag); // 返回flag
else
print 'sorry!'; // 不满足条件就打印 sorry
}
?>
如果当sha1加密的使用传入数组,该函数时无法处理数组的,就会返回NULL,返回NULL就会变成 NULL === NULL ,使得if成立,所以使用bp改包,构造payload
得到flag
注:萌新第一次写write up,不足之处还请见谅,不对之处欢迎批评指正