一、定义
SQL 注入 (SQLi) 是一个 Web 安全漏洞,允许攻击者干扰应用程序对其数据库进行的查询。它通常允许攻击者查看他们通常无法检索的数据。这可能包括属于其他用户的数据,或应用程序本身能够访问的任何其他数据。在许多情况下,攻击者可以修改或删除此数据,从而导致应用程序的内容或行为发生持续更改。
在某些情况下,攻击者可以升级 SQL 注入攻击以危害底层服务器或其他后端基础结构,或执行拒绝服务攻击。
二、SQL注入示例
SQL注入漏洞、攻击和技术种类繁多,出现在不同的情况下。一些常见的 SQL 注入示例包括:
- 检索隐藏数据,您可以在其中修改 SQL 查询以返回其他结果。
- 颠覆应用程序逻辑,您可以在其中更改查询以干扰应用程序的逻辑。
- UNION 攻击,您可以在其中从不同的数据库表中检索数据。
- 检查数据库,您可以在其中提取有关数据库版本和结构的信息。
- 盲 SQL 注入,其中您控制的查询结果不会在应用程序的响应中返回。
1.检索隐藏数据
考虑一个显示不同类别产品的购物应用程序。当用户单击“礼品”类别时,其浏览器会请求 URL:
https://insecure-website.com/products?category=Gifts
这会导致应用程序进行 SQL 查询,以从数据库中检索相关产品的详细信息:
select * from products where category = 'Gifts' and released = 1
该应用程序不会针对 SQL 注入攻击实现任何防御措施,因此攻击者可以构建如下攻击:
https://insecure-website.com/products?category=Gifts'--
这将导致 SQL 查询:
select * from products where category = 'Gifts'--' and released = 1
这里的关键是双破折号序列是 SQL 中的注释指示符,这意味着查询的其余部分被解释为注释。这将有效地删除查询的其余部分。这意味着将显示所有产品,包括未发布的产品。--
AND released = 1
更进一步,攻击者可以使应用程序显示任何类别中的所有产品,包括他们不知道的类别:
https://insecure-website.com/products?category=Gifts'+OR+1=1--
这将导致 SQL 查询:
select * from products where category = 'Gifts' OR 1=1--' AND released = 1
由于1=1始终为 true,因此查询将返回所有项。
2.颠覆程序应用逻辑
考虑一个允许用户使用用户名和密码登录的应用程序。如果用户提交用户名和密码,应用程序将通过执行以下 SQL 查询来检查凭据:wiener
bluecheese
select * from users where username = 'wiener' and password = 'bluecheese'
如果查询返回用户的详细信息,则登录成功。否则,将被拒绝。
在这里,攻击者只需使用 SQL 注释序列从查询子句中删除密码检查,即可在没有密码的情况下以任何用户身份登录。
例如,提交用户名和空白密码会导致以下查询:--
WHERE
administrator'--
select * from users where username = 'administrator'--' and password = ''
此查询返回用户名为administrator的用户,并成功将攻击者登录到该用户。
3.从其他数据库表中检索数据
如果 SQL 查询的结果在应用程序的响应中返回,攻击者可以利用 SQL 注入漏洞从数据库中的其他表中检索数据。这是使用关键字UNION
SELECT
完成的,该关键字允许您执行其他查询并将结果追加到原始查询。
例如,如果应用程序执行以下包含用户输入“礼物”的查询:
select name,description from products where category = 'Gifts'
然后,攻击者可以提交输入:
' union select username,password from users--
这将导致应用程序返回所有用户名和密码以及产品的名称和描述。
4.检查数据库
在初步识别 SQL 注入漏洞后,获取有关数据库本身的一些信息通常很有用。这些信息通常可以为进一步利用铺平道路。
您可以查询数据库的版本详细信息。执行此操作的方式取决于数据库类型,因此您可以从任何有效的技术推断数据库类型。例如,在 Oracle 上,您可以执行:
select * from v$version
您还可以确定存在哪些数据库表以及它们包含哪些列。例如,在大多数数据库上,可以执行以下查询来列出表:
select * from information_schema.tables
5.盲SQL注入漏洞
许多 SQL 注入实例都是盲目漏洞。这意味着应用程序不会在其响应中返回 SQL 查询的结果或任何数据库错误的详细信息。盲漏洞仍然可以被利用来访问未经授权的数据,但所涉及的技术通常更复杂且难以执行。
根据漏洞的性质和所涉及的数据库,可以使用以下技术来利用盲SQL注入漏洞:
- 您可以更改查询的逻辑,以根据单个条件的真实情况触发应用程序响应中的可检测差异。这可能涉及将新条件注入到某些布尔逻辑中,或有条件地触发错误,例如除以零。
- 您可以在查询处理过程中有条件地触发时间延迟,从而允许您根据应用程序响应所需的时间推断条件的真实性。
- 您可以使用 OAST 技术触发带外网络交互。这种技术非常强大,在其他技术不起作用的情况下有效。通常,您可以通过带外通道直接泄露数据,例如,将数据放入您控制的域的 DNS 查找中。
标签:--,数据库,应用程序,查询,SQL,攻击者,注入 From: https://www.cnblogs.com/alinSong/p/17375535.html