网络安全

位置:IT落伍者 >> 网络安全 >> 浏览文章

如何防范暴库攻击


发布日期:2021年01月05日
 
如何防范暴库攻击

最近,一个沙特阿拉伯的少年黑客成功侵入微软英国网站,贴上一幅儿童摇沙特阿拉伯国旗的照片,覆盖了原来的内容。看到这里,你是不是为自己的网站安全感到担忧呢?黑客在入侵网站过程中一般会测试能否进行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--”,可再得到一个列名。用同样的方法提交,直到页面不再返回错误信息,就可以得到所有的列名。tW.WingWit.cOM小知识:暴表名与列名是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_monito”就被暴出来了(图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等。然后,将“查询语句”中的[N]改为221,并提交,如“and (Select Top 1 topic FROM news where id=221)>1”,该句的意思表示从“news”表中读出“id=221”的新闻标题“topic”,提交后返回页信息中包含“视频MM大赛初赛告捷 绿色6月揭开火爆半决赛”这段内容(图4),这就说明“news”表中“topic”列的第一个值为“视频MM大赛初赛告捷 绿色6月揭开火爆半决赛”。由于这是一个文章系统,因此其在网页中代表的真实含义为: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,哈哈!”(图5)。如果要在数据库中插入一条新的数据,可提交如下语句:“;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(图6),这样无论ASP运行中出什么错,服务器都只提示HTTP 500错误,杜绝了黑客利用错误提示信息暴出数据库。攻防博弈攻 黑客:我们除了对ASP+SQL Server类的网站进行注入攻击外,还可以对PHP+MYSQL类的网站进行注入。相对而言,ASP+SQL Server的注入攻击比较普及,防御方法也比较单一,而知道这么防御PHP+MYSQL注入攻击的人就比较少,且防御很困难,我们还是可以继续为所欲为。防 编辑:对客户端提交的变量参数进行仔细检测、相关的账户信息加密、对IIS上进行安全设置都可以进一步杜绝ASP类型网站的SQL注入入侵攻击,但是针对PHP+MYSQL类型的网站来说,这些安全防御工作还是不够的。我们还应在IIS中为每个网站设置好执行权限,不能轻易地给静态网站以“脚本和可执行”权限。对于那些通过网站后台管理中心上传文件存放的目录,直接将执行权限设为“无”即可。

上一篇:如何保护QQ密码

下一篇:如何清除KL木马