sql注入原理
概述
大多数现代网络应用程序在后台使用数据库结构。此类数据库用于存储和检索与网络应用程序相关的数据,从实际网络内容到用户信息和内容等。
为了使网络应用程序具有动态性,网络应用程序必须与数据库实时交互。当用户发起 HTTP(S)请求时,网络应用程序的后台将向数据库发出查询以构建响应。这些查询可以包括来自 HTTP(S)请求或其他相关信息。
当用户提供的用于构建数据库查询的信息被恶意用户利用时,他们可以欺骗查询执行非原始程序员预期操作,从而使用一种名为 SQL 注入(SQLi)的攻击方式让用户查询数据库。
原理
web 应用程序中可能存在多种注入漏洞,例如 HTTP 注入、代码注入和命令注入。然而,最常见的例子是 SQL 注入。当恶意用户尝试传递输入以改变 web 应用程序发送到数据库的最终 SQL 查询时,就会发生 SQL 注入,从而使用户能够直接对数据库执行其他未打算的 SQL 查询。
有多种方法可以实现这一点。要让 SQL 注入生效,攻击者必须首先注入 SQL 代码,然后通过更改原始查询或执行全新的查询来破坏 Web 应用程序逻辑。首先,攻击者必须在预期的用户输入限制之外注入代码,这样它就不会被当作简单的用户输入来执行。在最基本的情况下,这是通过注入单引号( ' )或双引号( " )来完成的,以绕过用户输入的限制,并将数据直接注入 SQL 查询。
一旦攻击者能够注入,他们就必须寻找执行不同 SQL 查询的方法。这可以通过使用 SQL 代码来构建一个既能执行预期查询又能执行新查询的有效查询来完成。实现这一目标的方法有很多,比如使用堆叠查询或使用联合查询。最后,为了获取新查询的输出,我们必须对其进行解释或在 Web 应用的客户端捕获它。
影响
SQL 注入可能产生巨大的影响,特别是如果后端服务器和数据库的权限设置非常宽松的话。
首先,我们可能会检索到不应被我们看到的秘密/敏感信息,例如用户登录名和密码或信用卡信息,这些信息随后可能被用于其他恶意目的。SQL 注入导致许多针对网站的密码和数据泄露,这些信息随后被用来盗窃用户账户、访问其他服务或执行其他不正当行为。
SQL 注入的另一个用例是绕过预期中的 Web 应用程序逻辑。最常见的例子是绕过登录,而无需提供有效的用户名和密码凭证。另一个例子是访问特定用户锁定的功能,例如管理员面板。攻击者还可能能够直接在后端服务器上读取和写入文件,这反过来可能导致在后端服务器上放置后门,并获得对其的直接控制,最终控制整个网站。
数据库简介
在我们学习 SQL 注入之前,我们需要更多地了解数据库和结构化查询语言(SQL),数据库将执行必要的查询。Web 应用程序利用后端数据库来存储与 Web 应用程序相关的各种内容和信息。这可以是核心 Web 应用程序资产,如图像和文件,内容,如帖子更新,或用户数据,如用户名和密码。
数据库有各种不同类型,每种类型都适用于特定的用途。传统上,应用程序使用基于文件的数据库,这在数据量增加时非常慢。这导致了 Database Management Systems ( DBMS )的采用。
数据库管理系统
一个数据库管理系统(DBMS)帮助创建、定义、托管和管理数据库。随着时间的推移,设计出了各种类型的 DBMS,例如基于文件、关系型 DBMS(RDBMS)、NoSQL、基于图和键/值存储。
与 DBMS 交互有多种方式,例如命令行工具、图形界面,甚至 API(应用程序编程接口)。DBMS 用于银行、金融和教育等多个领域,以记录大量数据。DBMS 的一些重要特性包括:
| Feature 特性 | Description 描述 |
|---|---|
Concurrency |
A real-world application might have multiple users interacting with it simultaneously. A DBMS makes sure that these concurrent interactions succeed without corrupting or losing any data. 一个实际应用可能会有多个用户同时与其交互。数据库管理系统确保这些并发交互成功,而不会损坏或丢失任何数据。 |
Consistency |
With so many concurrent interactions, the DBMS needs to ensure that the data remains consistent and valid throughout the database. 由于有这么多并发交互,数据库管理系统需要确保数据在整个数据库中保持一致和有效。 |
Security |
DBMS provides fine-grained security controls through user authentication and permissions. This will prevent unauthorized viewing or editing of sensitive data. 数据库管理系统通过用户认证和权限提供细粒度的安全控制。这将防止未经授权查看或编辑敏感数据。 |
Reliability |
It is easy to backup databases and rolls them back to a previous state in case of data loss or a breach. 备份数据库并在数据丢失或发生入侵的情况下将其回滚到先前状态很容易。 |
Structured Query Language |
SQL simplifies user interaction with the database with an intuitive syntax supporting various operations. SQL 通过直观的语法简化了用户与数据库的交互,支持各种操作。 |
架构
Tier I 通常由客户端应用程序组成,例如网站或 GUI 程序。这些应用程序包含高级交互,如用户登录或评论。这些交互产生的数据通过 API 调用或其他请求传递给 Tier II 。
第二层是中间件,它解释这些事件并将它们转换为 DBMS 所需的格式。最后,应用层使用基于 DBMS 类型的特定库和驱动程序与其交互。DBMS 从第二层接收查询并执行请求的操作。这些操作可能包括插入、检索、删除或更新数据。处理完成后,DBMS 在查询无效的情况下返回任何请求的数据或错误代码。
可以在同一台主机上托管应用程序服务器和 DBMS。但是,支持许多用户的大量数据数据库通常分开托管以提高性能和可扩展性。


