渗透学习:SQL盲注

SQL 盲注

可能会查看、修改或删除数据库条目和表

可能原因

未对用户输入正确执行危险字符清理

技术描述

该软件使用受外部影响的输入来构造 SQL 命令的全部或一部分,但是它未能对可能在 SQL 命令发送到数据库时修改该命令的元素进行无害化处理。如果在用户可控制的输入中没有对 SQL 语法充分地除去或加上引号,那么生成的 SQL 查询可能会导致将这些输入解释为 SQL 而不是普通用户数据。这可用于修改查询逻辑以绕过安全性检查,或者插入其他用于修改后端数据库的语句,可能包括执行系统命令。
例如,假设有一个带有登录表单的 HTML 页面,该页面最终使用用户输入对数据库运行以下 SQL 查询: SELECT * FROM accounts WHERE username='$user' AND password='$pass'

这两个变量($user 和 $pass)包含了用户在登录表单中输入的用户凭证。如果用户输入“jsmith”作为用户名,并输入“Demo1234”作为密码,那么 SQL 查询将如下所示:
SELECT * FROM accounts WHERE username='jsmith' AND password='Demo1234'

但如果用户输入“’”(单引号)作为用户名,输入“’”(单引号)作为密码,那么 SQL 查询将如下所示:
SELECT * FROM accounts WHERE username=''' AND password='''

当然,这是格式错误的 SQL 查询,并将调用错误消息,而 HTTP 响应中可能会返回此错误消息。通过此类错误,攻击者会知道 SQL 注入已成功,这样攻击者就会尝试进一步的攻击媒介。SQL 盲注类似于 SQL 注入。不同之处在于,要利用该攻击,攻击者无需寻找响应中的 SQL 错误。因此,AppScan 用于识别该攻击的方法也不同。AppScan 会查找易受 SQL 注入(通过多个请求来操纵应用程序的逻辑,而不是尝试调用 SQL 错误)影响的脚本。

该技巧需要发送特定请求,其中易受攻击的参数(嵌入在 SQL 查询中的参数)进行了相应修改,以便响应中会指示是否在 SQL 查询上下文中使用数据。该修改涉及将 AND 布尔表达式与原始字符串一起使用,使其一时求值为 True,一时求值为 False。在一种情况下,净结果应该与原始结果相同(登录成功),而在另一种情况下,结果应该完全不同(登录失败)。在某些少见的情况下,求值为 True 的 OR 表达式也可能很有用。如果原始数据是数字,可以使用更简单的花招。假设原始数据为 123。此数据可以在一个请求中替换为 0+123,而在另一个请求中替换为 456+123。第一个请求的结果应该与原始结果相同,第二个请求的结果应该不同(因为得出的数字是 579)。在某些情况中,我们仍需要上面所说明的攻击版本(使用 AND 和 OR),但并不转义字符串上下文。

SQL 盲注背后的概念是,即使不直接从数据库接收数据(以错误消息或泄漏的信息的形式),也可能从数据库中抽取数据(每次一个比特),或以恶意方式修改查询。其原理在于,应用程序的行为(返回与原始响应相同或不同的响应)可以提供有关所求值的(已修改)查询的单比特信息,也就是说,攻击者有可能设计出一个 SQL 布尔表达式,其求值(单比特)通过应用程序行为(与原始行为相同/不同)来造成破坏。

引用和相关链接

“Web Application Disassembly with ODBC Error Messages”(作者:David Litchfield)
“Using Binary Search with SQL Injection”(作者:Sverre H. Huseby)
Blind SQL Injection Training Module

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值