码迷,mamicode.com
首页 > 其他好文 > 详细

三个等号的题

时间:2016-10-18 18:39:11      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

打开是一个简单的登陆界面,查看源码:

<?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>‘;
?>
如果想登录成功,必须满足两个条件:

$_GET[‘name‘] != $_GET[‘password‘]
sha1($_GET[‘name‘]) === sha1($_GET[‘password‘])

这里需要注意一下,第二个条件是===,和==是有点区别的:

===是恒等计算符   同时检查表达式的值与类型

==是比较运算符号  不会检查条件式的表达式的类型

所以,===会比较类型,比如bool。
在这里,sha1()函数和md5()函数存在着漏洞,sha1()函数默认的传入参数类型是字符串型,那要是给它传入数组呢,当然,会出现错误,使sha1()函数返回错误,也就是返回false,这样一来===运算符就可以发挥作用了,所以,这道题需要构造username和password既不相等,又同样是数组类型,构造url:

http://ctf4.shiyanbar.com/web/false.php?name[]=a&password[]=b

a,b既可以看成不同的值,也可以看成a,b啦。
得到flag。

 

三个等号的题

标签:

原文地址:http://www.cnblogs.com/test404/p/5974098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!