SQL 安全性: 新型 SQL 截断攻击和防御方法
2009-02-10 10:23:52 来源:WEB开发网update Users set password='NewP@ssw0rd'
这样就不容易受到通常的 SQL 注入问题的影响了。
where username='admin''--' and password='dummy'
通过截断进行修改
如果您仔细留意上面显示的存储过程,您会发现 @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 就会变成:
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接