等量登录——PHP中sha1加密函数的漏洞/蓝鲸CTF(Web)

蓝鲸CTF(Web):等量登录
题目列表:http://daka.whaledu.com:9999/challenges
答题地址:http://ctf.whaledu.com:10010/web16/

题目描述:

进入后页面就一行「Your password can not be your name.」,大意为密码不能和账号相同。右键查看源代码,发现一行很显眼的注释:「index.phps」,访问即可得一段超简洁的php代码。

根据代码逻辑来看,GET到的name和password变量都不能为空,两者不能相等,且两者的sha1加密必须相等才能获得flag。乍一看觉得不可能,但这里sha1函数有个漏洞,可以凭借这个绕过验证。将这两个字段构造成数组,即:

?name[]=a&password[]=b

函数接收到了不符合的类型,无法处理,会返回false,满足if条件,便可绕过,得到flag{I_think_that_I_just_broke_sha1}。

同样的,strcmp、md5等函数也有相似的漏洞。

参考文章:

[1].PHP sha1() md5()函数漏洞,扎克伯哥@CSDN,https://blog.csdn.net/zhaohansk/article/details/44153141
[2].【从零开始学CTF】4、PHP中的弱类型比较,罗林浩Rman@知乎,https://zhuanlan.zhihu.com/p/30323499

==========

后记:前几个月滴滴CTF2018刚刚结束,各路大佬尽显神通,简直跪下了…我个小渣渣连签到题都没做出来,只好默默仰望各位大佬…拿到题之前两眼一抹黑不知道该干什么,真的做完后感慨果然这是个最简单级别的题了吧(直接base64加密的那种不算题)…说起来我只是个种地的,对这些也懂得不多,只能默默学习各位大佬的blog,并加以实践运用。我争取以后每弄懂一题就发一篇,权当做复习了。