Lamber's Blog

SQL注入

字数统计: 1.1k阅读时长: 3 min
2021/08/21
  • 什么是SQL注入
  • 如何寻找SQL注入漏洞
  • 如何利用SQL注入漏洞
  • 如何防御SQL注入漏洞

什么是SQL注入

A SQL injection attack consists of insertion or “injection” of a SQL query via the input data from the client to the application.

SQL注入(SQL injection)是因为程序未能正确对用户的输入进行检查,将用户的输入以拼接的方式带入SQL语句中,

SQL注入的主要危害

  • 由于SQL数据库通常保存有敏感数据,因此丢失机密性是SQL注入常见的问题
  • 如果用危险的SQL命令来查询用户名和密码,可能会以其他用户的身份登录到系统,尽管攻击者不知道密码。
  • 如果授权信息保存在SQL数据库中,则有可能通过利用SQL注入漏洞来更改此信息
  • 正如可以读取敏感信息一样,也可以通过SQL注入来更改甚至删除这些信息。

SQL注入的种类

1
2
3
4
5
6
7
8
9
.
├─内联型SQL注入
│ ├─基于ERROR的SQL注入(报错型)
│ └─基于UNION的SQL注入(联合型)
├─SQL盲注
│ ├─基于布尔值的SQL注入(布尔盲注)
│ └─基于时间的SQL注入(时间盲注)
├─带外SQL(Out-Of-Band)
└─基于语音的SQL注入
  1. 内联型SQL注入,是最常见和最容易利用的SQL注入。当攻击者能够使用相同的通信通道发起攻击并收集结果的时候,就会发生内联SQL注入。并且向查询注入一些SQL代码之后,原来的查询仍然会全部执行。两种最常见的内联SQL注入是,报错型SQL注入和联合型SQL注入
  2. 报错型SQL注入,通过数据库服务器抛出的错误信息来获取有关数据库结构的信息。在某些情况下,仅基于错误的SQL注入就足以让攻击者枚举整个数据库。
  3. 联合型SQL注入,利用 UNION SQL语句将两个或多个 SELECT 语句的结果组合成 单个结果,然后作为HTTP响应的一部分返回。
  4. SQL盲注,SQL盲注与内联SQL注入不同,攻击者需要更长的时间来利用它。在SQL盲注中,实际上没有数据通过Web应用程序传输,攻击者将无法看到内联攻击的结果(这就是为什么要叫SQL盲注)。然而,攻击者能够通过发送 payload,观察Web应用程序的响应以及数据库服务器的结果来重建数据库结构。SQL盲注的两个种类是,布尔型SQL盲注和基于时间的SQL盲注
  5. 布尔型SQL盲注(也叫基于内容的盲注),向数据库发送SQL查询后强制应用程序返回不同的结果,具体取决于查询结果为 True 或者 False。根据返回的结果,HTTP响应中的内容将发生变化或保持不变。这允许攻击者推断所使用的有效负载是否返回 True 或者 False,即使没有返回数据库中的数据
  6. 时间盲注,向数据库发送SQL查询后,强制数据库在响应之前等待指定的时间。响应时间将向攻击者表明查询的结果是 True 还是 False。根据结果,HTTP响应 将延迟返回或者立即返回。这允许攻击者推断所使用的有效负载是否返回 True 或者 False,即使没有返回数据库中的数据
  7. 带外SQL不是特别常见,它需要依赖于Web应用程序使用的数据库服务器上启用的功能。当攻击者无法使用同一通道发起攻击并收集结果时,会使用到带外SQL注入。带外技术为攻击者提供了一种替代时间盲注的方法,尤其是在服务器响应不是很稳定的情况下(使基于时间的推理攻击不可靠)
  8. 基于语音的SQL注入。可应用于 通过语音命令提供对数据库的访问 的应用程序。攻击者可以通过发送带有声音的SQL查询来从数据库中提取信息。

SQL注入常用工具

  • SQLMap

SQL注入清单

CATALOG
  1. 1. 什么是SQL注入
  2. 2. SQL注入的主要危害
  3. 3. SQL注入的种类
  4. 4. SQL注入常用工具
  5. 5. SQL注入清单