进入靶场,要求提交查询,尝试提交几个,发现都没有回显,只会改变URL后的password
抓包看看网页的头,看到了一条sql语句 且password=md5($pass,ture)
经过查询,md5的加密包含两部分,为md5(string,raw)
其中,string是必需,它规定了需要计算的字符串;而raw则是可以选择16进制或者2进制
当选择TRUE时则为16字符的二进制格式;
当选择FLASE时默认为32字符的十六进制格式;
这个数据经过md5(“ffifdyop”,true)和默认情况后的输出为'or'6É]™é!r,ùíb
可以看到关键就前面几个字符:'or'6
拼接上sql语句就是:select * from 'admin' where password=''or'6É]™é!r,ùíb'
首先第一个单引号和查询语句进行了闭合,然后使用了or判断,后面为'6É]™é!r,ùíb'
关键:在mysql中,在用作布尔型判断时,1或者其他数字,比如这里的6开头的字符串会被当做整形常数,也就是说这里的sql语句变为了select * from 'admin' where password=''or 6,返回值就为true
————————————————
版权声明:本文为CSDN博主「pakho_C」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pakho_C/article/details/122821330
输入ffifdyop,就会返回true,得到另一个界面
查看源代码,发现的md5的弱比较,需要绕过他的弱比较
md5的弱比较有两种绕过方法,可以用md5()函数漏洞绕过,也可以用“==”比较漏洞绕过,通俗讲就是用数组绕过和就科学计数法绕过
1.利用md5()函数漏洞绕过
原理:md5在识别数组时,会返回NULL,所以两者相等,也就可以绕过;
如/?a[]=1&b[]=2;
2.利用"=="比较漏洞绕过
原理:输入可以被md5加密为0eXXXX的数,这样在md5识别是都会翻译为0的几次方,都等于0,也就相等;下列是部分会被加密为0eXXXX的数
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
在绕过弱比较后,看到了flag的提示,只要同时绕过弱比较和强比较就能拿到flag,上面说过强比较需要用数组绕过,同时也能绕过弱比较param1[]=1¶m2[]=2拿到flag,这题也是把md5的强弱比较都学习了一下,good