解题连接:http://ctf5.shiyanbar.com/web/false.php
题目一开始就给了一段代码:
<?php
if (isset($_GET['name']) and isset($_GET['password'])) {
if ($_GET['name'] == $_GET['password'])
echo '<p>Your password can not be your name!</p>';
else if (sha1($_GET['name']) === sha1($_GET['password']))
die('Flag: '.$flag);
else
echo '<p>Invalid password.</p>';
}
else{
echo '<p>Login first!</p>';
?>
代码告诉我们,要获得flag的条件:
1.name不等于password
2.但sha1(name)要求=sha1(password)
hint:sha1函数你有认真了解过吗?听说也有人用md5碰撞o(╯□╰)o
根据hint,我们先去百度sha1有什么漏洞可让我们绕过的
sha1函数的作用是计算字符串的 SHA-1 散列,默认的传入参数类型是字符串型,而当我们传入别的类型是就返回null,所以利用这个漏洞我们可以传数组进去,形式如下:
name[]=1&&password[]=5,然后得到flag
这里再说一下第二种方法,百度md5碰撞可以查到:
从根本上讲,MD5算法是一种摘要算法,它可以从多个字节组成的串中计算出由32个字节构成的“特征串”。对于超过32字节的串来说,MD5计算得出的值必然是其一个子集,所以必然存在两个(或更多)不同的串能够得出相同MD5值的情况。这种情况就叫做MD5碰撞。
这里贴一个md5碰撞的例子:https://www.jianshu.com/p/c9089fd5b1ba
这里再贴一个常见php函数漏洞:php函数常见漏洞
总结:根据提示及时的去检索所需要的信息,再修改payload即可