SQL 注入 (SQLi ) 是一种网络攻击,与DDoS攻击一样,都是很常见的网络攻击。恶意 SQL 代码被注入易受攻击的 Web 应用程序。这允许攻击者干扰数据库查询并操纵它们以获取对服务器的未经授权的访问权限。根据命令,成功的 SQL 注入攻击可能会带来毁灭性的后果,导致企业收入和声誉损失。

SQL 注入是最大的漏洞之一,因为它的影响巨大,并且有多种方法可以识别和利用服务器和应用程序。不过,开发人员已经做出了一些改进来检测和防御 SQLi 攻击。

SQL注入如何工作?

结构化查询语言 (SQL) 是一种标准化语言,用于访问和操作数据库,为每个用户构建可自定义的数据视图。如果应用程序和代码未经过适当清理,恶意代码可能会被注入到网站和应用程序的输入部分和表单字段中。

SQL 注入是指攻击者识别恶意 SQL 查询并将其插入或“注入”到不安全的输入字段(如用户名和密码字段或搜索栏)中。查询被发送到后端数据库,然后后端数据库接受该代码作为合法请求,并将信息返回给请求者。

成功的 SQLi 攻击可以导致获得未经授权的访问、获取凭据等敏感信息以及操纵数据(如添加或删除数据或删除文件和文件夹):

  • 窃取凭证:攻击者可以使用 SQLi 查询来访问和窃取用户名和密码。
  • 访问网站和应用程序:可以使用 SQL 查询绕过用户和密码等登录字段 - 例如“OR 1 = 1 — — 在用户名和密码字段中。此代码会诱使应用程序执行始终返回 true 的查询,从而允许攻击者冒充有效用户并访问该应用程序。
  • 更改数据:易受 SQL 注入攻击的应用程序可让恶意攻击者访问数据库中的数据,包括健康和财务数据等敏感信息。如果攻击者通过 SQLi 漏洞提升了权限,他们就可以添加、修改或删除数据。

SQL 注入有多种形式,是近年来最常被利用的漏洞之一。然而,在查找应用程序代码中的错误并防止其被利用方面也取得了重大进展。

SQL 注入攻击的类型

SQL 注入攻击有多种形式。常见的类型包括基于错误的攻击、基于联合的攻击、盲 SQLi 攻击,以及不常见的带外攻击:

  • 基于错误的 SQL 注入:基于错误的 SQLi 依赖于攻击者通过分析数据库抛出的错误消息来收集有关数据库的信息。在某些情况下,错误消息为恶意行为者提供了有价值的见解,并帮助他们枚举易受攻击的数据库。
  • 基于联合的攻击:基于联合的 SQLi 是一种 SQL 注入技术,它使用 UNION SQL 运算符将多个 SELECT 语句的结果组合起来。基于联合的攻击可以将来自不同数据库表的数据检索到单个结果中。
  • 盲 SQL 注入:盲 SQLi 比基于错误或联合的攻击更难利用,部分原因是没有数据传输;您无法看到尝试利用的结果(这就是它通常被称为“盲”的原因)。相反,它们通过发送有效载荷来观察应用程序的响应,从而与数据库进行交互。
    这些有效载荷是基于时间和布尔的。基于时间的盲SQLi 攻击旨在触发时间延迟,而布尔攻击则触发应用程序 HTTP 响应的变化。
  • 带外 SQLi:带外 SQLi 不如其他类型常见,并且仅在启用数据库服务器的某些功能时才有效。带外攻击不依赖于数据库查询、错误消息或 HTTP 响应。相反,它们依赖服务器创建 DNS 或 HTTP 请求,以强制应用程序将数据发送到它们控制的远程端点。

无论利用哪种类型的 SQL 注入,其目的都是一样的:未经授权访问应用程序并窃取他们认为有用或可能产生最大影响的任何数据。多年来,由于数据库易受 SQL 注入攻击,我们都曾遭受过一次或多次数据泄露。

攻击者如何利用 SQL 注入漏洞的 3 个示例

过去,SQL 注入非常流行。它一度位居 OWASP 十大 Web 应用程序漏洞榜首。这是因为大多数应用程序都存在 SQL 注入漏洞,而开发人员没有使用清理技术等最佳实践。这导致了包括 Heartland Payment Systems、Sony Pictures 和 Equifax 在内的多起重大数据泄露事件:

  • Heartland Payment Systems: 2008 年,攻击者在登录页面中发现了一个 SQL 注入漏洞。然后他们在用户名和密码字段中使用了恶意 SQL 代码,如user 'OR 1=1 – 。当数据库处理这些查询时,它们会返回 true,从而获得访问权限,并窃取敏感的用户数据,如社会安全号码和其他信息,以创建自己的信用卡。
  • 索尼影业:一个名为 LulzSec 的黑客组织入侵了索尼影业的网站,并泄露了包含 100 多万人未加密个人信息的数据库。该组织声称,如果他们愿意,他们可以“窃取每一点信息”。根据网站上执行有效负载的位置,黑客组织可能提交了类似“UNION SELECT username, password FROM users”的输入来窃取用户数据。此命令检索名为 users 的数据库表的内容以及名为 username 和 password 的两列。
  • Equifax: 2017 年 5 月,恶意攻击者在 Equifax 旗下的一款应用程序中发现了一个漏洞,该漏洞允许他们远程执行命令。然后,他们利用此漏洞向服务器发送精心设计的 SQL 命令,并访问近 1.5 亿人的个人数据,这成为历史上最大的数据泄露事件之一。

SQL 注入对组织来说可能是毁灭性的。但是,只要积极主动,抢在坏人之前发现漏洞,就可以防止这种情况发生。

您的网站容易受到 SQL 注入攻击的常见迹象

在查找 SQL 注入漏洞时,您可以利用多种工具和技术,包括漏洞扫描程序。您还可以进行渗透测试等评估或执行代码审查。虽然这些工具需要熟练的专业人员,但您还可以检查其他一些事项。

您的网站可能存在漏洞的常见迹象包括:

  • 包含数据库信息的错误消息:在表单或搜索栏中输入特定字符(例如单引号或勾号 ('))时,应用程序会显示包含 SQL 数据库信息(例如 SQL 的类型或版本、列和表信息或 SQL 查询的部分内容)的错误消息。
  • 意外行为:在输入字段中输入某些字符会导致应用程序返回意外结果,例如显示大量数据或导致网站崩溃。
  • 数据库查询数量异常大:监控数据库活动时,您可能会注意到用户输入或查询数量突然激增,或者数据似乎被访问或修改。这可能是由于有人试图利用漏洞造成的。
  • 未经授权的数据操纵:数据库中的敏感数据在没有任何明显的用户操作的情况下被修改或访问。

使用简单的 SQL 注入字符串(如“ ' OR '1='1 ”)直接手动测试网站上的输入字段(如搜索栏和登录屏幕)、URL 参数甚至数据库,并检查意外行为就足以检测到 SQLi 漏洞。

防止 Web 应用程序中的 SQL 注入的 3 个技巧

随着时间的推移,Web 应用程序的安全性得到了显著改善。开发人员对 SQL 注入漏洞的认识有所提高,并实施了各种预防措施。其中一些预防策略包括输入验证、Web 应用程序防火墙和参数化查询:

  • 净化输入:定期检查和监控应用程序中允许用户输入并与数据库交互的所有区域。务必删除或“净化”输入,方法是删除任何不安全的字符,以防止使用恶意代码。创建允许列表以确定有效输入并拒绝任何可疑输入。
  • 安装 Web 应用程序防火墙:使用高防CDN服务部署Web 应用程序防火墙或“WAF ”来检测和阻止 SQL 注入等常见攻击。WAF 监控 Web 流量是否存在任何异常活动。防火墙可以提醒 IT 团队注意与 SQLi 同义的异常请求或模式。
  • 使用参数化查询:参数化查询或预处理语句使用占位符作为参数而不是值,将 SQL 逻辑与传递的数据分开。因此,数据库将输入视为数据而不是可执行代码。

采取这些措施并定期进行安全检查和渗透测试可以大大降低应用程序遭受 SQL 注入的风险。这些预防方法使得 SQL 注入更难被发现和利用,在 OWASP Top 10 中从第 1 位降至第 3 位。

 

常见问题

以下是有关 SQL 注入的一些常见问题:

  1. 所有 SQL 版本都容易受到 SQL 注入攻击吗?
    是的。尽管查询语法可能不同,但所有 SQL 数据库(如 MySQL、Oracle、PostgreSQL、NoSQL 等)都容易受到 SQL 注入攻击。
  2. 哪些应用程序会受到影响?
    任何与数据库交互的网站或应用程序如果没有适当的保护,都可能遭受 SQLi 攻击。这包括数据驱动的应用程序,如社交媒体、调查、搜索应用程序和报告生成应用程序。
  3. 如何测试 SQL 注入?
    有多种工具和扫描程序可以测试所有 Web 应用程序漏洞。但是,也可以通过将 SQL 有效负载插入每个应用程序的入口点来手动进行测试。应用程序的入口点允许用户输入,例如论坛、评论部分和登录页面。

为了获得最佳效果,请聘请一家专门从事应用程序渗透测试的公司并对您的应用程序进行定期测试。