SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

开始挑战第二十三关(Error Based- no comments) 

先尝试下单引号进行报错

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

再来利用and来测试下,加入注释符#,编码成%23同样的报错

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

再来试试--+,同样的效果

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

 

同样的,先看看源代码,这里利用正则查找,对注释符等都进行了过滤

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

 

这里一来,注释符不能使用了,只能采用单引号闭合的方法来绕过了,成功

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

接下来构造语句来获取数据库

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

此处讲解几个知识点:

1.ID = -1,为什么要用-1,因为SQL语句执行了两个选择语句,第一个选择为ID的选择语句,第二个为我们构造的选择语句。只有一个数据可以输出,为了让我们自己构造的数据可以正常输出,第一个选择要没有结果,所以-1或者超过数据库所有数据都可以。

  SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)2.- 1'union select 1,2,database()  or ‘1’=‘’1,or 1=1是为了闭合后面的,这样将查询内容显示在用户名处。

3.或者使用union select 1,2,dabase(),'3,第一个'(单引号)闭合-1,第二个'(单引号)闭合后面的

利用union select获取数据库名

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

还可以利用报错注入来获取

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

获取表名

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

 获取字段名

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)

获取数据

SQL注入之Sqli-labs系列第二十三关(基于过滤的GET注入)