瑞星卡卡安全论坛

首页 » 技术交流区 » 反病毒/反流氓软件论坛 » 别让人盯上你的Server数据库——如何防范ASP+SQL Server暴库攻击【转贴】
9876532 - 2007-8-22 10:32:00
所属主题:SQL注入
杀伤力值:★★★★
操作难度:适中
适合读者:菜鸟黑客、大中型网站管理员


别让人盯上你的Server数据库



——如何防范ASP+SQL Server暴库攻击





[attach]330458[/attach]

最近,一个沙特阿拉伯的少年黑客成功侵入微软英国网站,贴上一幅儿童摇沙特阿拉伯国旗的照片,覆盖了原来的内容。看到这里,你是不是为自己的网站安全感到担忧呢?黑客在入侵网站过程中一般会测试能否进行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 的列时发生语法错误。”(图2),这样就把name字段的值暴出来了,也就是我们得到了一个库名“Northwind”。改变“dbid”的值可以得出所有的库名。






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




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




[attach]330461[/attach]
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等。


然后,将“查询语句”中的[N]改为221,并提交,如“and (Select Top 1 topic FROM news where id=221)>1”,该句的意思表示从“news”表中读出“id=221”的新闻标题“topic”,提交后返回页信息中包含“视频MM大赛初赛告捷 绿色6月揭开火暴半决赛”这段内容(图5),这就说明“news”表中“topic”列的第一个值为“视频MM大赛初赛告捷 绿色6月揭开火暴半决赛”。





[attach]330462[/attach]



由于这是一个文章系统,因此其在网页中代表的真实含义为:ID为221的文章其标题为“视频MM大赛初赛告捷 绿色6月揭开火暴半决赛”。


小提示:上面的例子中读取的只是一篇文章的标题,在实际的应用中,可以读取包含用户名和密码的表中的数据,可以获得任意用户名的密码,这种方法比使用ASCII码一个一个的猜解快的多。
3.修改数据库,插入数据
当成功地获得了表名,列名后,就可以在数据库里修改甚至插入新的数据。例如可以将上面的新闻标题进行修改,提交如下命令:“ ;update news set topic='我不是黑客,我喜欢MM,哈哈!' WHERE id='221'”。
命令运行后正常显示,在IE地址栏中输入链接“http://online.idggame.com.cn/tiantang/shownews.asp?id=221”,可以看到ID为221的文章其标题已经变成了更改的内容:“我不是黑客,我喜欢MM,哈哈!”(图6)。




[attach]330463[/attach]
如果要在数据库中插入一条新的数据,可提交如下语句:“;insert
into
news(id,topic)
values('228','您的网站有安全漏洞,请注意防护')--”提交语句后返回正常页面,说明语句正常执行了。然后打开链接“http://online.idggame.com.cn/tiantang/shownews.asp?id=228”时,可以看到新添加的文章。
ASP+SQL然后防范暴库
服务器上放置的网站比较多,管理员不可能针对所有网站的每个页面来审查其是否存在SQL注入漏洞。因为SQL注入入侵是根据IIS给出的ASP错误提示信息来入侵的,所以只要管理员把IIS设置成不管出什么样的ASP错误,只给出一种错误提示信息,即HTTP 500错误,那么黑客就没办法进行入侵了。具体设置如下:
单击“开始”菜单,选择“设置→控制面板”命令,然后进入“控制面板”的“管理工具”中,双击打开“Internet信息服务”,在“默认网站”上单击右键,在弹出的快捷菜单中选择“属性”命令。
然后在打开的“默认网站属性”对话框中选择“自定义错误”标签,把500:100这个错误的默认提示页面 C:\WINDOWS\Help\iisHelp\common\500-100.asp改成C:\WINDOWS\Help\iisHelp\common\500.htm(图7),这样无论ASP运行中出什么错,服务器都只提示HTTP 500错误,杜绝了黑客利用错误提示信息暴出数据库。







[attach]330464[/attach]



攻防博弈


攻 黑客:我们除了对ASP+SQL Server类的网站进行注入攻击外,还可以对PHP+MYSQL类的网站进行注入。相对而言,ASP+SQL Server的注入攻击比较普及,防御方法也比较单一,而知道这么防御PHP+MYSQL注入攻击的人就比较少,且防御很困难,我们还是可以继续为所欲为。
防 安全人士:对客户端提交的变量参数进行仔细检测、相关的账户信息加密、对IIS上进行安全设置都可以进一步杜绝ASP类型网站的SQL注入入侵攻击,但是针对PHP+MYSQL类型的网站来说,这些安全防御工作还是不够的。我们还应在IIS中为每个网站设置好执行权限,不能轻易的给静态网站以“脚本和可执行”权限。对于那些通过网站后台管理中心上传文件存放的目录,直接将执行权限设为“无”即可。




[用户系统信息]Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
1
查看完整版本: 别让人盯上你的Server数据库——如何防范ASP+SQL Server暴库攻击【转贴】