FALSE-实验吧

1.打开之后查看源码

  1. <?php
  2. if (isset($_GET['name']) and isset($_GET['password'])) {
  3.     if ($_GET['name'] == $_GET['password'])
  4.         echo '<p>Your password can not be your name!</p>';
  5.     else if (sha1($_GET['name']) === sha1($_GET['password']))
  6.       die('Flag: '.$flag);
  7.     else
  8.         echo '<p>Invalid password.</p>';
  9. }
  10. else{
  11.     echo '<p>Login first!</p>';
  12. ?>

2.代码的意思是登录成功条件:

(1)通过Get方法传入name,password的值

(2)name和password的值不能相等

(3)  name和password的sha1加密散列值相等

要知道sha1是一种单向散列函数,不仅不能通过sha1值返回去得到原值,而且每个值得到的散列值都是唯一的,不存在两个不同的值得到的sha1值相同。也就是说乍一看这个条件是根本不可能实现的。

我们先随便输入一个abc、abc试试,发现现在的url也跟着发生变化了,变为:http://ctf5.shiyanbar.com/web/false.php?name=123&password=456,那么我们就可以看出值是在URL中直接传递的,那么这里我们的思路是可以通过构造URL利用sha1函数的漏洞来实现。

FALSE-实验吧-Writeup学院

 

3.当sha1(哈希)函数遇见数组的时候,会返回false,那我们就可以直接构造语句:http://ctf5.shiyanbar.com/web/false.php?name[]=123&password[]=456构造的URL中,因为name和password都是数组,所以它们的sha1值都是false,这里我们就巧妙的运用了sha1函数的漏洞使得两个值的sha1值相同,即可得flag。

发表评论

电子邮件地址不会被公开。必填项已用 * 标注