SQL注入攻击的原理及其防备办法[MSSQL防范]
本文“SQL注入攻击的原理及其防备办法[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
ASP编程门坎很低,新手很简单上路.在一段不长的时间里,新手常常就已经可以编出看来对比完善的动态网站,在功效上,熟行能做到的,新手也可以做到.那么新手与熟行就没辨别了吗?这里面辨别可就大了,只不过外行人很难一眼就看出来罢了.在界面的友好性、运行性能以及网站的安全性方面是新手与熟行之间辨别的三个集合点.而在安全性方面,新手最简单忽视的问题就是SQL注入漏洞的问题.用NBSI 2.0对网上的一些ASP网站略加扫描,就可以发现很多ASP网站存在SQL注入漏洞,教诲网里高校内部机构的一些网站这种漏洞就更广泛了,大概这是因为这些网站大都是一些学生做的来由吧,固然个个都很聪明,但是毕竟没有经验,并且处于学习中,不免漏洞多多了.本文主要讲讲SQL注入的防备办法,而要懂得这些防备办法的用处,须先具体讲授操纵SQL注入漏洞入侵的历程.新手们看懂得啦.
相当大一部份程序员在编写代码的时刻,没有对用户输入数据的合理性举行判断,使利用程序存在安全隐患.如这是一个正常的网址http://localhost/lawjia/show.asp?ID=444,将这个网址提交到服务器后,服务器将举行近似Select * from 表名 where 字段="&ID的查询(ID即客户端提交的参数,本例是即444),再将查询后果返回给客户端,假如这里客户端成心提交这么一个网址:
http://localhost/lawjia/show.asp?ID=444 and user>0,这时,服务器运行Select * from 表名 where 字段=444 and user>0这样的查询,当然,这个语句是运行不下去的,必定出错,错误信息以下:
·错误范例:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC sql server Driver][SQL Server]将 nvarchar 值 'sonybb' 转换为数据范例为 int 的列时发生语法错误.
/lawjia/show.asp, 第 47 行
但是心胸叵测的人从这个出错信息中,可以得到以下信息:该站利用MS_SQL数据库,用ODBC衔接,衔接帐号名为:sonybb.所谓SQL注入(SQL Injection),就是操纵程序员对用户输入数据的合理性检测不严或不检测的特点,成心从客户端提交特别的代码,从而汇集程序及服务器的信息,从而获得想得到的资料.普通心胸叵测者的目标是获得网站管理员的帐号和密码.比方当某个人知道网站管理员帐号存在表login中,管理员帐号名为admin,他想知道管理员密码,这里他从客户端接着提交这样一个网址:
http://localhost/lawjia/show.asp?ID=444 and (Select password from login where user_name='admin')>0,返回的出错信息以下:
·错误范例:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC SQL Server Driver][SQL Server]将 varchar 值 '!@#*&admin' 转换为数据范例为 int 的列时发生语法错误.
/lawjia/show.asp, 第 47 行
[1] [2] [3] 下一页
你知道吗?上面标红的部份就是管理员帐号admin的密码!固然很复杂,让人看几遍也记不住的,但它就这样显示在你眼前了,这时您便可以用这个帐号和密码接纳人家的网站了!这时你大概还会说,假如他不是事前知道管理员帐号存在表login中,并且知道管理员帐号为admin,那他就不大概得到管理员密码.你错了,只要人家乐意多花时间尝试,他将可以得到数据库衔接帐号权限内所能得到的全部信息!具体历程请参看网上的这篇文章:SQL注入漏洞全接触.
当然这个历程是很烦琐的并且要耗费很多的时间,假如只能以这种手动方法举行SQL注入入侵的话,那么很多存在SQL注入漏洞的ASP网站会安全很多了,不是漏洞不存在了,而是操纵这个漏洞入侵的本钱太高了.但是假如操纵专门的黑客工具来入侵的话,那情形就大大差别了.手动方法举行SQL注入入侵至少需求半天或一天乃至很多天的时间,而操纵专门的工具来入侵就只需求几分钟时间了(视网速快慢决意),再操纵得到的管理帐号和密码,上传一个从网上下载的ASP后门程序,就简单得到整个网站的管理权限了,乃至整个服务器的管理权限.最闻名的一种SQL注入入侵工具是NBSI 2.0,目前已经出到2.0版本了,不过,人家正式名称不叫SQL注入入侵工具,而叫做网站安全漏洞检测工具.有了这个所谓的检测工具,使得入侵存在SQL注入漏洞的ASP网站成了小儿科的游戏,那些既不懂ASP又不懂SQL、年纪小小的男性青年常常得以在一天之内入侵十多个ASP网站,他们以此得到心里的极大满意.他们仿佛也非常讲究职业德行,常常并不破坏网站数据和系统,常见的破坏方法大都仅仅是改换掉网站的主页,留下"好心的告诫",如:你的网站存在SQL注入漏洞,请管理员做好防备办法!并声明"我没有破坏数据和系统",有的还要借机公布一下他的倡导:"国内网站大家不要入侵,有本领入侵小日本的!",最后,签上他的鼎鼎大名是必不可少的程序.
如此大的成就大都情形下仅需动动鼠标就做到了.翻开最新版的NBSI 2.0,如图1所示:输入地址到A区,注意网址必须是带传送参数的那种,点击右边的检测按钮,即出来B区信息,显示当前用户为sonybb的权限为PUBLIC,当前库为lawjia.有点惋惜啊,假如是SA权限的话,便可以跨库注入了.不过,这个权限也充足获得该网站管理员帐号和密码了.点C区下的自动猜解按钮,即出来当前库lawjia中的各种表,哇,login表中一定是存管理员帐号和密码的吧?选中它吧,接着点击D区下的自动猜解按钮,当即出来login表里的列名称,公然是存放用户名和密码的啊,太棒了!赶忙打上勾,迫不急待的点击E区下的自动猜解按钮.冲动人心的时刻就要到来啦,只见唰唰地几下,帐号与密码全部出来了.剩下的事就是辨别哪一个帐号是管理员了.
图1(图中的示例网站在作者本地电脑上运行) |
不知那些没注意过SQL注入漏洞的ASP程序员们看了上图的例子,要作何感触呢?是不是认为这个所谓的网站安全漏洞检测工具SBSI 2.0简直就是MS_SQL的企业管理器呢?只不过人家不需求帐号和密码便可以查看您数据库里的全部信息了.假如您的网站就这样被人不费吹灰之力入侵了,您是不是要吐几升血了呢?大概您已经为系统安全费尽心机了,装补钉、安防火墙、装杀毒软件、巧妙配置IIS及数据库用户权限,但您就是没有注意到SQL注入漏洞,于是"千里之堤,溃于蚁穴".防火墙与杀毒软件对SQL注入是没办法防备的,因为SQL注入入侵跟普通的WEB页面拜候没什么辨别,所以常常是防不甚防.并且一个服务器上安排的网站常常是有很多个的,服务器管理员不大概挨个网站挨个页面的检查其能否存在SQL注入漏洞.那么应当若何防备SQL注入入侵呢?作为服务器管理员或网站程序员应当辨别怎么做呢?服务器管理员要做的事主如果配置IIS和数据库用户权限,而网站程序员主如果要在程序代码编写上防备SQL注入入侵.下面具体论述:
对了服务器管理员,既然你不大概挨个查抄每个网站能否存在SQL注入漏洞,那么就来个一个绝招.这个绝招能有效避免SQL注入入侵并且"费心又省力,效果真好!"SQL注入入侵是按照IIS给出的ASP错误提醒信息来入侵的,假如你把IIS设置成不管出什么样的ASP错误,只给出一种错误提醒信息,即http 500错误,那么人家就没办法入侵了.具体设置请参看图2.主要把500:100这个错误的默许提醒页面 C:\WINDOWS\Help\iisHelp\common\500-100.asp改成
C:\WINDOWS\Help\iisHelp\common\500.htm便可,这时,无论ASP运行中出什么错,服务器都只提醒HTTP 500错误.
图2、IIS出错信息设置 上一页 [1] [2] [3] 下一页 |
但是这样设置一个不好的地方是程序员编写的代码出错时,服务器不给出具体的错误提醒信息,会给程序员带来很大的不便.不过,服务器毕竟不是测试代码的地方,应保持安全安定第一,这样设置也是无可厚非的,事实上很多服务器的出错信息都是如此设置.
服务器管理员还应在IIS中为每个网站设置好履行权限,可千万别给人家静态网站以"脚本和可履行"权限.普通情形下给个"纯脚本"权限就够了,关于那些通过网站后台管理中央上传的文件存放的目录,就更鄙吝一点吧,履行权限设为"无"好了,这样做是为了避免人家上传ASP木马,履行权限设为"无",人家上传ASP木马也运行不了.普通情形下,SQL注入漏洞仅是触及一个网站安全的事,假如人家通过这个漏洞上传了ASP木马并运行起来,那整个服务器都失陷了.所以有远见的、有责任心的服务器管理员应当非常鄙吝的配置IIS的履行权限.
一样的鄙吝态度应实用于数据库用户的权限配置上,当然这里数据库是指MS_SQL啦,Access都没有效户权限配置这一步骤.假如PUBLIC权限充足利用的毫不给再高的权限,可千万别把SA级别的权限随随便便地给人家啊.那个所谓的网站安全漏洞检测工具NBSI 2.0可有跨库举行SQL注入的功效啊,假如你把SA权限给了存在SQL注入漏洞的库,那别的库就不保啦!城门失火,殃及池鱼呀.而人家还可以通过调用xp_cmdshell号令得到系统的最高权限.具体步骤还是请参看上面提到的那篇《SQL注入漏洞全接触》这篇文章吧.
接下来要讲讲程序员的防备办法了.程序主要要做两件事,最重要的一件事,当然是对客户端提交的变量参数举行细心地检测啦.对客户端提交的变量举行查抄以避免SQL注入,有各种办法,到http://community.csdn.net/上搜索一下,你能得到很多有益信息.这里介绍一种现成的办法,别人已经写好了检测代码,拿来用一下,不用自己辛劳啦.那就是"枫叶SQL通用防注入V1.0 ASP版",这是一段对用户通过网址提交过来的变量参数举行查抄的代码,发现客户端提交的参数中有"exec、insert、select、delete、from、update、count、user、xp_cmdshell、add、net、Asc"等用于SQL注入的常用字符时,当即终止履行ASP并给出告诫信息或转向出错页面.大家可以到网上搜索一下,下载这段代码,存为一个ASP页面,如checkSQL.asp,把这个页面include到每个需求带参数查询SQL数据库ASP页面中,记着,只要加一行这样的<!--#include file="checkSQL.asp"-->代码就行了.
程序员要做的第二件事是给用户密码加密啦.比方用MD5加密.MD5是没有反向算法,不能解密的.人家即便知道经加密后存在数据库里的像乱码一样的密码,他也没办法知道原始密码了.不过,人家可以用UPDATE办法用他的密码替换你的密码,但这个操作还是有点麻烦,人家大概会怕麻烦而放弃.而那个所谓的网站安全漏洞检测工具NBSI 2.0是没有供应UPDATE操作功效的,所以用MD5加密后,人家仅用NBSI 2.0而不辅以手动操作的话,就不大概得到网站管理员帐号的密码,这将挡住很多菜鸟级的攻击者,至少那些既不懂ASP又不懂SQL、年纪小小的男性青年是没有办法啦!
文章写到这,已经够长了,本来还想对那些所谓的网站安全漏洞检测工具如NBSI之流的黑客工具举行一番理性的探究的,看来还是放弃好了.为了加强网站安全,理解攻击手段是必须的,但是,操纵漏洞开辟专门的黑客工具,使那些其实并不具有必要的网络技术和网络安全知识的人(就是文中提到的"既不懂ASP又不懂SQL、年纪小小的男性青年")轻而易举地侵入一家网站,这除了为很多网络管理员制造麻烦外,能否还具有加强网络安全意识提高网络安全水平的功效呢?
上一页 [1] [2] [3]
以上是“SQL注入攻击的原理及其防备办法[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |