WEB开发网
开发学院数据库MSSQL Server SQL 安全性: 新型 SQL 截断攻击和防御方法 阅读

SQL 安全性: 新型 SQL 截断攻击和防御方法

 2009-02-10 10:23:52 来源:WEB开发网   
核心提示: update Users set password='NewP@ssw0rd'where username='admin''--' and password='dummy'这样就不容易受到通常的 SQL 注入问题的影响了,通过

update Users set password='NewP@ssw0rd'
where username='admin''--' and password='dummy'
这样就不容易受到通常的 SQL 注入问题的影响了。

通过截断进行修改

如果您仔细留意上面显示的存储过程,您会发现 @command 变量只能存放 100 个字符,但当 25 个字符都为单引号时,这些字符的每个变量经过 REPLACE 函数处理后可返回 50 个字符。如果变量没有足够大的缓冲区,SQL Server 2000 SP4 和 SQL Server 2005 SP1 会自行截断数据。这就为攻击者提供了截断命令字符串的机会。

在此例中,如果有人可以在 username='username' 表达式后截断命令,那么无需知道已知用户的当前密码,就可更改其帐户的密码。

假设攻击者知道 administrator 用户名存在于 Web 应用程序中(这可以是任何用户帐户)。攻击者需要提供长度为 41 个字符的新密码,以使命令的长度足以被适当截断 — 之所以是 41 个字符,是因为在用于命令的 100 个字符中,27 个字符用于更新语句,17 个字符用于 where 子句,13 个字符用于“administrator”,2 个字符用于新密码前后的单引号。

攻击者只能传递 25 个字符作为新密码。但他可以通过传递单引号避开这一限制,因为 REPLACE 函数会使单引号数量增加一倍。因此,通过传递 18 个单引号、1 个大写字母、1 个符号、2 个小写字母和 1 个数字,攻击者就可以截断 where username='administrator' 表达式后面的命令了。如果攻击者将 ''''''''''''''''''!Abb1 传递给 @new 参数,并将 administrator 作为用户名参数,那么 @command 就会变成:

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:SQL 安全性 新型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接