一、分析
经常碰到一类验证账号、密码的写法(与php、asp、jsp具体语言无关,以下以asp为例),即先判定user是否存在: "select * from user_info where user_name='" & request("user_name") &"'";然后判定密码的md5配对不配对。
if(rs("passwd")=md5(request("passwd"))) then
reponse.write "login suc"
else
reponse.write "error password"
end if
二、猜解
那么猜解密码的思路就是,构造user_name输入为:xxxx' and passwd>'a
这儿可以用折半比较:
(假设md5第一位为b) 比如如果>'a为真,那么将字母变大,比如>'z,.那么为假,又测试>'p.....直到>'a成立,但是>'b不成立,那么肯定就是b了。以为只有字母b>a 为真且b>b为假。
如此重复:一直可以尝试,如,假设第一位为b已经猜出,那么第二位可以这么写:
passwd>'ba等等【这儿为什么不用mid(passwd,1,1)这种,是以为mid函数跟mysql、sql server还是oracle有关系】。
三、破解
这儿先确定md5是16位还是32位的,对于32位的猜测其中8~24位就是了(32位md5变16位md5)。
猜出16位md5,再去cmd5.com/xmd5.org破解就是了。
然后就是真正输入破解的密码。呵呵。
总结一下:
1.要有提示你账号是否存在,就是知道一个账号存在的错误提示。
2.登陆过程的密码不是直接比较,而是经过md5加密以后比较
3.通过MD5猜解来破解密码(即在输入账号那个输入框中输入注入语句)。
4.数据库user信息表的字段如何确定:通过form表单的name来确定(很多开发者都是取的相同名字的)
|