SQL注入分类以及联合查询回显注入

SQL 注入的定义:

        很多应用程序都使用数据库来存储信息。SQL 命令就是前端应用程序和后端数据库之间的接口。攻击者可利用应用程序根据提交的数据动态生成SQL 命令的特性, 在URL 、表单域, 或者其他的输入域中输入自己的SQL 命令, 改变SQL 命令的操作, 将被修改的SQL 命令注入到后端数据库引擎执行。

SQL注入危害

  • 窃取数据库敏感信息

- 任意查询用户信息

- 任意查询管理员账号密码

  • 对数据进行恶意的增删改
  • 造成拒绝服务

- 通过sleep, benchmark 等函数使数据库阻塞不能正常工作

  • 文件系统操作: 列目录, 读取、写入文件( 一句话木马) 等。
  • 获取服务器权限( 执行系统命令)

- 使用数据库内置的一些函数来执行系统命令

 SQL 注入分类(以字符类型方式)

按传递参数类型分:

  • 数字型

- 例如id = 1 , 数字型注入不需要考虑单引号或者双引号闭合。用如下方式验证注入点:

and 1 = 1

and 1 = 2

  • 字符型

- 例如name= 'root' , 字符型住入, 需要考虑单引号的闭合和注释问题。用如下方式验证注入点:

root' and '1' = '1
root' and '1' = '2      #用于将原有引号闭合

root' and 1 = 1 --+       #通过注释符号,注释后面的单引号。用于将name = 'root'   root后面的 ' 注释掉就变成了name = 'root' and 1 = 2 --+

root' and 1 = 2 --+       #注意:-- 在MySQL中,要求第二个 - 后面跟一个空格或控制字符,+可以代替空格

 

数据库的注释语法

SQL 注入分类( 以注入方式)

  • 回显注入

- 回显正常: 通过执行构造的SQL 注入语句之后, 页面与原页面存在差异, 但没有报错信息。
- 回显报错: 通过执行构造的SQL 语句之后, 页面报错, 且将报错信息显示百面上

  • 盲注

- 布尔型盲注: 构造SQL 语句之后, 根据页面显示差异来判断
- 基于时间的盲注: 构造SQL 语句之后,根据页面响应时间来判断

联合查询回显注入

1. select user from users where user_id=1 union select password from users where user_id = 2;

 2. select user from users order by user;    //系统默认对users进行排序

order by 1按照第一列排序,order by 2按照第二列排序

没有第三列 因此order by 3报错

 

order by判断正常数据库查询有多少列。同理查询有11列结果。

联合查询select 1,2显示为一行

查询user_id=1的user和password,并将数字1,2显示出来

执行union后的语句,结果只显示1行

 

上面数据库查询已知有11列,分别用数字1到11在页面中显示出来

经过之前的注入测试,已知数据库中存在admin、password两个字段。因为页面中显示了2,3,8,9,10总共五个数字,我们随意替换五个中的两个为admin、password字段,这样admin、password这两个字段的内容就显示出来。

 

总结:

首先 通过order by判断正常数据库查询有多少列,只要查询结果最终能回显到页面上,可以用联合查询注入的方法。

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/52kj/p/12404893.html