第06课:SQL

第06课:SQL 注入介绍及分类

本课旨要:了解 SQL 注入的原理以及分类。

所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。具体来说,它是利用现有应用程序,将(恶意的)SQL 命令注入到后台数据库引擎执行的能力,它可以通过在 Web 表单中输入(恶意)SQL 语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL 语句。

SQL 注入分类

在进行注入测试之前,需要读者了解 SQL 注入的分类,SQL 注入可以分为数字型注入和字符型注入,也有人分的更多,比如 Cookie 注入啊、POST 注入啊,但是都产生于服务端没有做好过滤。

数字型注入

当页面的参数为 ID 时,测试注入语句如果执行了,说明存在 SQL 注入,比如:www.baidu.com/sql.php?id=3。

www.baidu.com/sql.php?id=3’,可以输入单引号进行测试,单引号肯定会报错,如果页面出现了异常,可以初步判断存在注入。

www.baidu.com/sql.php?id=3 and 1=1,如果执行语句正常,返回数据和正常的页面是一样的,就可以输入 and 1=2 进行测试。

www.baidu.com/sql.php?id=3 and 1=2,输入 and 1=2 之后,页面返回异常、报错,那么可以断定页面存在 SQL 注入,因为 and 1=2 条件始终为假。

以上三个步骤如果都满足,则说明程序存在 SQL 注入漏洞。

字符型注入

字符型例子如下:

当 SQL 执行语句为:select from tables where username ='admin‘时,当测试注入的时候,输入 and 1=1 是无法注入的,因为联合起来是 admin and 1=1 SQL 语句执行如下:

select from tables where username ='admin and 1=1 ‘

如果要测试注入,则需要闭合字符串,正确的注入语句如下:

select from tables where username ='admin and 1=1 -- ‘

再对字符串类型的页面进行 SQL 注入时,需要注意字符串闭合等问题。

有的人还把注入类型分为 POST 和 Cookie 注入、盲注、延时等注入。

但总的来说无论是什么注入类型,都可以归类为字符型或者数字型注入。

SQL 注入专业术语

  • POST 注入:注入点再 POST 字段里
  • Cookie 注入:注入点在 Cookie 数据中
  • 延时性注入:利用返回的时间来判断注入
  • 搜索性注入:注入点在搜索框里
  • base64 注入:注入字符串需要经过 base64 加密

在接下来的文章里将详细介绍几种分类类型,因为个人经验有限,只讨论常见的数据库类型的注入方式。

上一篇
下一篇
目录