实验吧web-FALSE
2019-03-27 本文已影响5人
追求科技的足球
又是菜鸡的一天,一道简单题。
1、题目提示:
2、打开网站,发现下面直接可以看源码,那就看吧,直接view:
读一下代码的意思,基本是这样的
if 非空:
if 用户名=密码:
错误
else if (sha1(用户名) = sha1(密码)):
输出flag
else:
错误
else:
错误
也就是说有三个要求:
(1)用户名、密码非空
(2)用户名不与密码相同
(3)经过sha1函数后的用户名和密码相同。
3、这是个什么概念呢,我们来看一下sha1函数:
定义如下:
(1)sha1() 函数计算字符串的 SHA-1 散列。
(2)sha1() 函数使用美国 Secure Hash 算法 1。
(3)来自 RFC 3174 的解释 - 美国 Secure Hash 算法 1:SHA-1 产生一个名为报文摘要的 160 位的输出。报文摘要可以被输入到一个可生成或验证报文签名的签名算法。对报文摘要进行签名,而不是对报文进行签名,这样可以提高进程效率,因为报文摘要的大小通常比报文要小很多。数字签名的验证者必须像数字签名的创建者一样,使用相同的散列算法。
也就是说经过散列加密后的用户名和密码要一致,但是原始值不一致,这几乎是不存在的。
4、看一下W3school上的说明,重点在这个地方:
如果将函数返回值都做成false,则可以通过。
5、如果对于sha1进行数组运算,则会返回一个false,因为其是字符串运算的。
6、看一下它的请求头:
将这个sha1的处理改成数组的即可,于是为:
http://ctf5.shiyanbar.com/web/false.php?name[]=1&password[]=2
7、有一个地方用到了三个等号,于是搜了一下用法:
===:等同符,当等号两边的值为相同类型的时候,直接比较等号两边的值,值相同则返回true,若等号两边的值类型不同时直接返回false。
但是在这里都是两侧都是用的字符串,所以无法从这个地方下手。
小结:学到了sha1()函数数组返回false绕过,和===的用法。