暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

07 sha()函数比较绕过

digo8wx安全 2021-01-09
748

源码:

<?php

 

$flag="flag";

 

if(isset($_GET['name'])andisset($_GET['password']))

{

if($_GET['name']==$_GET['password'])

echo'<p>Yourpasswordcannotbeyourname!</p>';

elseif(sha1($_GET['name'])===sha1($_GET['password']))

die('Flag:'.$flag);

else

echo'<p>Invalidpassword.</p>';

}

else

echo'<p>Loginfirst!</p>';

?>

 

函数释义:

sha1()函数计算字符串的 SHA-1 散列。

===会比较类型,比如bool sha1()函数和md5()函数存在漏洞,sha1()函数默认的传入参数类型是字符串型,如果传入数组类型会出现错误,从而使sha1()函数返回false,这样===运算符就可以发挥作用,因此获取flag需要构造username和password既不相等,又同样是数组类型。

代码分析:

输出flag的条件:

$_GET['name']==$_GET['password']name和password的值不能相等

且需要

sha1($_GET['name'])===sha1($_GET['password'])

 

===会比较类型,比如bool sha1()函数和md5()函数存在漏洞,sha1()函数默认的传入参数类型是字符串型,如果传入数组类型会出现错误,从而使sha1()函数返回false,这样===运算符就可以发挥作用,因此获取flag需要构造username和password既不相等,又同样是数组类型。

 

解题过程:

 

两个参数都不赋值时尝试:

http://localhost:63342/php_bugs-master/07%20sha()%E5%87%BD%E6%95%B0%E6%AF%94%E8%BE%83%E7%BB%95%E8%BF%87.php?name=&password=

 


 

两个参数都设置成数组类型且值不相同,可获取flag:

http://localhost:63342/php_bugs-master/07%20sha()%E5%87%BD%E6%95%B0%E6%AF%94%E8%BE%83%E7%BB%95%E8%BF%87.php?name[]=1&password[]=2

 


 

参考链接:

https://github.com/bowu678/php_bugs

 

 


文章转载自digo8wx安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论