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

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

 2009-02-10 10:23:52 来源:WEB开发网   
核心提示: 通过截断进行 SQL 注入图 7 显示了相同代码的另一变体,但可使用单独的变量进行修复,SQL 安全性: 新型 SQL 截断攻击和防御方法(10),可以看出,此代码将转义后的字符串存放在单独的变量中,使 @escaped_newpw 也成为 123...n'(REPLACE 函数返

通过截断进行 SQL 注入

图 7 显示了相同代码的另一变体,但可使用单独的变量进行修复。可以看出,此代码将转义后的字符串存放在单独的变量中,而且 @command 有足够的缓冲区来存放整个字符串。@escaped_username、@escaped_oldpw 和 @escaped_newpw 被声明为 varchar(25),但如果 @username、@old 和 @new 中的所有字符是 25 个单引号,则它们需要存放 50 个字符。这就为截断已转义的字符串创造了机会。

SQL 安全性: 新型 SQL 截断攻击和防御方法Figure7Using Seperate Variables to Avoid Injection

CREATE PROCEDURE sp_setPassword
  @username varchar(25),
  @old varchar(25),
  @new varchar(25)
AS
-- Declare variables.
DECLARE @escaped_username varchar(25)
DECLARE @escaped_oldpw varchar(25)
DECLARE @escaped_newpw varchar(25)
DECLARE @command varchar(250)
SET @escaped_username = REPLACE(@username, ‘‘‘‘, ‘‘‘‘‘‘)
SET @escaped_oldpw = REPLACE(@old, ‘‘‘‘, ‘‘‘‘‘‘)
SET @escaped_newpw = REPLACE(@new, ‘‘‘‘, ‘‘‘‘‘‘)
SET @command =
  ‘update Users set password=‘‘‘ + @escaped_newpw + ‘‘‘‘ +
  ‘ where username=‘‘‘ + @escaped_username + ‘‘‘‘ +
  ‘ AND password = ‘‘‘ + @escaped_oldpw + ‘‘‘‘
EXEC (@command)
GO

攻击者可以传递 123...n' 作为新密码,其中 n 是第 24 个字符,使 @escaped_newpw 也成为 123...n'(REPLACE 函数返回的第二个单引号字符会被截断),使最后的查询如下所示,攻击者可以通过用户名字段注入代码,从而利用此查询:

上一页  5 6 7 8 9 10 

Tags:SQL 安全性 新型

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