暑期练习web20:FALSE(实验吧)sha1,md5碰撞

解题连接: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即可

猜你喜欢

转载自blog.csdn.net/qq_41618162/article/details/81947125
今日推荐