SQL注入:通过把SQL命令插入到WEB表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令

SQLIsql injection,我们称之为sql注入。SQL,英文:Structured Query Language,叫做结构化查询语言。常见的结构化数据库有MySQL,MS SQL ,Oracle以及Postgresql。Sql语言就是我们在管理数据库时用到的一种。在我们的应用系统使用sql语句进行管理应用数据库时,往往采用拼接的方式形成一条完整的数据库语言,而危险的是,在拼接sql语句的时候,我们可以改变sql语句。从而让数据执行我们想要执行的语句,这就是我们常说的sql注入。

 

 

常见sql注入方式:

按照注入点分类

  1. 数字型注入:许多网页链接有类似的结构 http://xxx.com/users.php?id=1 基于此种形式的注入,注入点id为数字,一般被叫做数字型注入点,通过这种形式查询出后台数据库信息返回前台展示,可以构造类似以下的sql语句进行爆破:select *** from 表名 where id=1 and 1=1
  2. 字符型注入:网页链接有类似的结构 http://xxx.com/users.php?name=admin 这种形式,注入点name为字符串,被称为字符型注入,可以用:select *** from 表名  where  name='admin'  and 1=1
  3. 搜索型注入:主要是指在数据搜索时没有过滤搜索参数,一般在链接地址中有 "keyword=“关键字”",注入点提交的是sql语句,select * from 表名 where 字段 like '%关键字%' and '%1%'='%1%'

两者最大的区别:字符型注入一般要使用单引号进行闭合,而数字型注入则不需要

按照效果来分类

盲注入:盲注入不会展现任何数据库报错内容,它是依据构造真或假的问题对数据库进行“提问”,注入方式主要有两种:基于布尔值与基于时间。

  1. 基于布尔的盲注,根据页面返回判断条件真假注入|如在MySQL中判断数据名长度的输入为1' and length(database()) = 10 #,通过相应的正确与否判断数据名的长度是否为10,猜测数据库中数据的具体内容时,可以借助书本上SUBSTR、LIMIT、ASCII等一些特殊的命令及函数进行猜测;
  2. 基于时间的盲注,既不能页面返回内容判断任何信息,用条件语句查看时间延时语句是否执行(页面返回时间是否增加)来判断|  基于时间的SQL盲注入方式通常是在SQL语句中添加延时函数,依据相应时间来判断是否存在SQL注入,常用的延时函数或指令有sleep、repeat等。
  3. 基于报错的盲注,即页面会返回错误信息,或者是把注入的语句执行结果返回到页面
  • 单引号
  • 双引号
  • 基于数字型注入

4.联合查询注入:可以使用union的情况下注入

 

其他类型

延时注入:使用延时函数方式;

搜索注入:注入点在搜索框中;

编码注入:将输入的字符串进行编码,如base64编码;

堆查询注入:同时执行多条语句;

联合查询注入:使用union操作码合并两条或多条SQL语句;

多阶注入:由多个HTTP请求响应共同完成的注入;

 

注入位置分类

GET注入:注入字符在URL参数中;

POST注入:注入字段在POSt提交的数据中;

Cookie注入:注入字段在Cookie数据中,网站使用通用的防注入程序,会对GET、POST提交的数据进行过滤,却往往遗漏Cookie中的数据进行过滤。

其他注入:HTTP请求的其他内容触发的SQL注入漏洞;


You got to put the past behind you before you can move on.