您的位置:学习中国 攻防天地 系统安全 正文
原作者:diannao 添加时间:2008-11-26 原文发表:2008-11-26 人气:143 来源:www

本文章共3180字,分2页,当前第1页,快速翻页:
 
-----------------------------------------------------------------------------------------------------------------------------------------------

本文提示:《如何防范强行暴破数据库攻击》是本站编辑们为广大网友精选的实用文章,本文阐述了关于文章的相关理论,相对来说专业性强,但是本文只是针对于某个问题提出的见解与论述,未必能辐射到相关问题的方方面面,所以本文处理问题的方法仅仅为您提供一些参考。更多问题请查阅学习中国网其他栏目哦.

-----------------------------------------------------------------------------------------------------------------------------------------------

 最近,一个沙特阿拉伯的少年黑客成功侵入微软英国网站,贴上一幅儿童摇沙特阿拉伯国旗的照片,覆盖了原来的内容。看到这里,你是不是为自己的网站安全感到担忧呢?黑客在入侵网站过程中一般会测试能否进行SQL注入,我们应该如何防范呢?
  上期我们介绍了Access(MSSQL)数据库的防范SQL注入的方法,该注入方法主要针对的是个人网站以及小型企业,但对电子商务网站、大中型企事业网站和大中型商业网站的管理员们来说就不适用了,因为这些网站很多都采用SQL Server作为数据库的。
  所以,本期小编将教大家如何防范针对SQL Server数据库的暴库。所谓暴库,就是利用各种方法得到数据库文件或是数据库文件的查看/修改权限,这样直接就有了站点的前台或者后台的权限。
ASP+SQL Server暴库技巧
1.暴出SQL Server表名和列名
  基本方法:查找并确认一个ASP+SQL Server注入点,在注入点后提交“'having 1=1--”,得到返回信息为英文,在这段英文中即可看到一个表名和一个列名。提交“group by 暴出的表名列名having 1=1--”,可得到另一个列名;继续提交“group by 暴了的表名列名,暴出的表名.第2个列名 having 1=1--”,可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。
  小知识:暴表名与列名是SQL语句“having 1=1—”与GROUP BY结合使用,进行条件判断的。由于语句不完整,因此数据库返回错误信息,并显示一个表名和一个列名。
  基本方法只能暴出数据库中的当前表。如果某个表中包含的列名非常多,用上述基本方法就非常困难了。比较有效的方法是,利用“0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])”语句,暴出数据库中任意表名和列名,其中“[N]”表示数据库中的第N个表。
  第一步:在注入点后提交如下语句:“0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=12)”,因为 dbid 的值从1到5,是系统使用的,所以用户自己建的一定是从6开始的,并且我们提交了 name>1,name字段是一个字符型的字段,和数字比较就会出错。
  因此在提交后,IE会返回如下的信息:“Microsoft OLE DB Provider for ODBC Drivers 错误'80040e07'[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值'Northwind'转换为数据类型为 int 的列时发生语法错误。”(图1),这样就把name字段的值暴出来了,也就是我们得到了一个库名“Northwind”。改变“dbid”的值可以得出所有的库名。

  第二步:得到了库名后,现在要得到库中所有的表名,提交如下语句:“and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U') ”,这里要暴的是master这个库中的表名,查询的SQL语句返回的是name的值,然后和数字0比较,这样就会暴露出name的值。提交后一个表名“spt_mon ito”就被暴出来了(图2)。

  第三步:再接着暴其他的表,继续提交如下语句:“and 0<>(select top 1 name from master.dbo.sysobjects where xtype='U' and name not in('spt_monito'))”提交后,又暴出一个表名为“cd512”(图3)。依次提交 “and name not in('spt_monito','cd512',..)”就可以查出所有的表名。

2.读取SQL Server数据库中的任意数据
  知道了数据库的表名、列名后,可以利用“查询语句”读取数据库中的任意信息。例如要读取某个表中某列中的第N个数据,可提交语句:“and (Select Top 1 列名 FROM 表名 where id=[N])>1”( [N]代表列中的第N条数据),从IE返回信息中即可得知想要的数据。这里以注入点http://online.idggame.com.cn/tiantang/shownews.asp?id=227为例进行讲解:
  首先,在注入点后提交“'having 1=1--”,从返回信息中得到表名为news,列名为id。接着用上面介绍的方法得到另外的列名如c_id、s_id、username、topic等。
 
本文章更多内容1 - 2 - 下一页>>
本页地址
相关文章

什么是端口和通道呢?
电脑无毒之绝招
9种办法解决20黑屏,总有一款适合你
揭示秘密 打开隐藏文件的方法
抛弃杀毒软件!只用10大免费服务
建立防火墙的主动性网络安全防护体系
反黑客--分析数据查找黑客方法
上网必备 如何判断你的电脑是否含病毒
高科技时代如何注意网络密码的安全
计算机网络安全

相关评论


本文章所属分类:首页 攻防天地 系统安全   系统安全