WEB开发网
开发学院网络安全黑客技术 SQL注入漏洞攻防必杀技 阅读

SQL注入漏洞攻防必杀技

 2008-10-27 16:49:07 来源:WEB开发网   
核心提示: 们知道,user是SQLServer的一个内置变量,SQL注入漏洞攻防必杀技(4),它的值是当前连接的用户名,类型为nvarchar,由于找不到表msysobjects,会提示出错,拿一个nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型

们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个

nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错

,SQLServer的出错提示是:将nvarchar值 ”abc” 转换数据类型为 int

的列时发生语法错误,呵呵,abc正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。在

以后的篇幅里,大家会看到很多用这种方法的语句。

顺便说几句,众所周知,SQLServer的用户sa是个等同Adminstrators权限的角色,拿到了sa权限,几

乎肯定可以拿到主机的 Administrator了。上面的方法可以很方便的测试出是否是用sa登录,要注意的是

:如果是sa登录,提示是将”dbo”转换成int的列发生错误,而不是”sa”。

如果服务器IIS不允许返回错误提示,那怎么判断数据库类型呢?我们可以从Access和SQLServer和区

别入手,Access和

SQLServer都有自己的系统表,比如存放数据库中所有对象的表,Access是在系统表[msysobjects]中,但

在Web环境下读该表会提示“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常读取。

在确认可以注入的情况下,使用下面的语句:

http://www.mytest.com/showdetail.asp?id=49 ;and (select count(*) from sysobjects)>0

http://www.mytest.com/showdetail.asp?id=49 ;and (select count(*) from msysobjects)>0

如果数据库是SQLServer,那么第一个网址的页面与原页面http://www.mytest.com/showdetail.asp?

id= 49是大致相同的;而第二个网址,由于找不到表msysobjects,会提示出错,就算程序有容错处理,

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

Tags:SQL 注入 漏洞

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