了解SQL注入

简介: SQL注入是一种通过操纵用户输入来篡改数据库查询的攻击方式,可导致身份验证绕过、数据泄露、篡改甚至远程命令执行。由于Web应用常将用户数据嵌入SQL语句,缺乏有效验证时极易受此攻击。OWASP将其列为头号Web安全威胁。

介绍

结构化查询语言 (SQL) 用于查询、操作和管理数据库系统,例如 Microsoft SQL Server、Oracle 或 MySQL。SQL 的一般用法在所有支持它的数据库系统中都是一致的;然而每个系统都有其特有的复杂性。

数据库系统通常用于为多种类型的 Web 应用程序提供后端功能。为了支持 Web 应用程序,用户提供的数据通常用于动态构建直接与数据库交互的 SQL 语句。SQL注入攻击是一种通过将攻击者提供的SQL语句直接提交到后端数据库来颠覆应用程序的初衷的攻击。根据 Web 应用程序以及它在构建 SQL 语句之前处理攻击者提供的数据的方式,成功的 SQL 注入攻击可能会产生深远的影响。可能的安全后果包括绕过身份验证、信息泄露以及向应用程序用户分发恶意代码。

SQL注入解释

SQL 注入攻击涉及通过使用攻击者提供的数据来更改 Web 应用程序中使用的 SQL 语句。Web 应用程序中输入验证不足和 SQL 语句构造不当可能会使它们遭受 SQL 注入攻击。SQL 注入是一种非常普遍且具有潜在破坏性的攻击,以至于 开放 Web 应用程序安全项目 (OWASP) 将其列为 Web 应用程序的头号威胁

成功的 SQL 注入攻击的后果

尽管成功的 SQL 注入攻击的影响因目标应用程序以及该应用程序处理用户提供的数据的方式而异,但 SQL 注入通常可用于执行以下类型的攻击:

  • 身份验证绕过: 此攻击允许攻击者在不提供有效用户名和密码的情况下,可能具有管理权限登录到应用程序。
  • 信息泄露: 此攻击允许攻击者直接或间接获取数据库中的敏感信息。
  • 数据完整性受损: 这种攻击涉及数据库内容的更改。攻击者可以使用此攻击来破坏网页,或更可能将恶意内容插入到其他无害的网页中。 该技术已通过SANS Internet Storm Center 的SQL 注入大规模攻击中描述的攻击得到证明 。
  • 数据可用性受损: 此攻击允许攻击者删除信息,意图造成损害或删除数据库中的日志或审核信息。
  • 远程命令执行: 通过数据库执行命令可能会让攻击者破坏主机操作系统。这些攻击通常利用现有的预定义存储过程来执行主机操作系统命令。这种攻击最常见的形式是使用 Microsoft SQL Server 安装中常见的 xp_cmdshell 存储过程,或者利用在 Oracle 数据库上创建外部过程调用的功能。

用于绕过身份验证的 SQL 注入示例

SQL 注入的多种可能用途之一涉及绕过应用程序登录过程。以下示例说明了 SQL 注入攻击的一般操作。以下 HTML 表单向应用程序用户请求登录信息。尽管此示例使用 HTTP POST 请求,但攻击者也可以使用使用 HTTP GET 方法的 HTML 表单。

<form action="/cgi-bin/login" method=post>  
  用户名:<输入类型=文本名称=用户名>  
  密码:<输入类型=密码名称=密码> 
<输入类型=提交值=登录>

当用户在此表单中输入信息并单击 “登录”时,浏览器会向 Web 服务器提交一个包含用户凭据的字符串。此字符串在 HTTP 或 HTTPS POST 请求的正文中显示为:

用户名=提交用户 & 密码=提交密码  

具有易受攻击的登录过程的应用程序可能会接受提交的信息并将其用作以下 SQL 语句的一部分,该语句查找包含提交的用户名和密码的用户配置文件:

select * from Users 
where (用户名 = ' subscribedUser ' AND 密码 = 'subscribedPassword ');

除非应用程序使用严格的输入验证,否则它可能容易受到 SQL 注入攻击。例如,如果应用程序在没有任何验证的情况下接受并处理用户提供的数据,则攻击者可能会提交恶意制作的用户名和密码。考虑攻击者发送的以下字符串:

用户名=admin%27%29+--+&密码=+

一旦接收到该字符串并对其进行 URL 解码,应用程序将尝试使用用户名 admin') 以及由单个空格组成的密码来构建 SQL 语句。将这些项目放入前面的 SQL 语句中会产生:

select * from Users where (用户名 = ' admin ') -- 密码 = ' ');

正如前面的示例所示,攻击者制作的用户名会更改 SQL 语句的逻辑,以有效地删除密码检查。在上面的示例中,攻击者可以使用管理员帐户成功登录应用程序,而无需知道该帐户的密码。

精心设计的输入中出现的两个破折号字符 (--) 的字符串非常重要;它向数据库服务器指示 SQL 语句中的其余字符是注释,应被忽略。此功能是攻击者可以使用的最重要的工具之一,如果没有它,就很难确保恶意 SQL 语句在语法上正确。

尽管精心设计的字段(即上一个示例中的用户名字段)必须针对易受攻击的应用程序进行定制,但事实证明,Internet 上随时可用的大量记录字符串可以成功启用 SQL 注入攻击。前面的示例可能很简单,但它说明了 SQL 注入攻击技术的有效性。

盲注和二阶 SQL 注入

在后端 SQL 数据库的数据不直接返回给用户或攻击者的情况下,攻击者可能需要使用 SQL 盲注技术。通过这种技术,攻击者可以确定 SQL 语句是否是通过直接呈现数据以外的方式执行的。使用 SQL 盲注,攻击者可以执行侦察、获取敏感信息或更改数据库内容,包括身份验证凭据。

SQL 盲注技术的一个示例是在恶意 SQL 语句中引入延迟。根据所使用的数据库软件,攻击者可以构建旨在使数据库服务器执行耗时操作的 SQL 语句。使用 MySQL 数据库软件,可以使用以下命令编写 SQL 语句:sleep() 函数。例如,将 sleep(10)合并 到恶意查询中将产生 10 秒的延迟。 攻击者可以通过执行操作系统命令或耗时的子查询或尝试建立出站 HTTP 连接,在不包含 sleep()函数的数据库服务器上引起可识别的延迟。如果执行耗时的 SQL 语句,Web 应用程序的响应时间可能会比通常情况要长得多。此方法允许攻击者确定他们的 SQL 语句是否正在以某种程度的确定性执行。

二阶 SQL 注入攻击涉及用户提交的数据,这些数据首先存储在数据库中,然后检索并用作易受攻击的 SQL 语句的一部分。此类漏洞更难定位和利用,但二阶 SQL 注入攻击证明在应用程序中执行所有 SQL 语句以及综合使用参数化查询之前进行数据验证是合理的。

相关文章
|
存储 编解码 算法
H.264编码及AAC编码基础 3
H.264编码及AAC编码基础
805 0
|
6月前
|
Java
高效遍历 Map:优先使用 entrySet 或 JDK 8 的 forEach
在Java开发中,遍历Map时推荐使用`entrySet()`或JDK 8的`forEach()`,避免通过`keySet()`重复查找值。前者直接获取键值对,效率更高;后者结合Lambda,代码更简洁。根据场景选择合适方式,提升性能与可读性。
|
6月前
|
Java 数据库 开发者
Java 类加载与代码块执行顺序详解
本文详解Java中静态代码块、实例初始化块、构造器及局部代码块的执行顺序。通过示例分析,揭示类加载与对象创建时的生命周期机制,并总结“静→局→初→构”口诀,帮助开发者合理初始化资源,避免常见错误,提升代码健壮性与可读性。
|
6月前
|
存储 安全
3.OAuth2.0四种授权模式
本文详解OAuth2授权码模式流程:A服务客户端通过B服务认证服务,经用户授权获取授权码,再换取访问令牌,从而安全调用B服务资源。该模式安全性高,广泛应用于第三方登录场景。
3.OAuth2.0四种授权模式
|
6月前
|
SQL 监控 安全
生产环境发布管理:从开发到上线的全链路保障
本文详解大型互联网团队的四环境发布体系(DEV→TEST→PRE→PROD),阐述如何通过标准化流程与自动化平台实现安全、高效、可追溯的生产发布,涵盖环境职责、CI/CD核心能力及风险应对策略,助力团队实现快速迭代与零重大故障。
|
6月前
|
运维 监控 安全
为什么禁止使用 Executors 创建线程池?
Java并发中,`Executors`快捷方法易导致OOM或系统雪崩,因隐藏关键配置。阿里手册禁止其在生产使用。应显式创建`ThreadPoolExecutor`,设定核心参数与有界队列,结合Guava命名线程,提升系统稳定性与可维护性。
|
6月前
|
SQL 前端开发 测试技术
如何写好一篇技术方案(精简版)
一份好的技术方案是推动项目落地、对齐认知、降低协作成本的关键。应包含变更记录、背景、功能模块、流程图、接口设计等十大结构,遵循图文结合、聚焦可执行、简洁明了的原则,800–1500字为宜,重在指导行动而非堆砌文字。
|
6月前
|
Java
ArrayList 的扩容机制解析
ArrayList扩容机制解析:添加元素时先检查容量,不足则触发扩容。默认初始容量为10,每次扩容1.5倍,通过数组拷贝实现,耗时O(n)。频繁扩容影响性能,建议预估容量并初始化指定大小,提升效率。
|
11月前
|
SQL JSON 数据可视化
多维计划落点工具深度分析:如何实现计划颗粒度、优先级、节点的多维落点?
多维计划落点工具帮助团队将战略目标拆解为可执行任务,实现目标、时间、角色与资源的一体化管理,确保计划真正落地执行。
|
数据采集 人工智能 自然语言处理
阶跃星辰联合光影焕像开源 3D 大模型 Step1X-3D,高保真+可控!
阶跃星辰联合光影焕像开源 3D 大模型 Step1X-3D,高保真+可控!
472 4

热门文章

最新文章