专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » sql注入攻击:SQL注入攻击的原理及其防范措施 »正文

sql注入攻击:SQL注入攻击的原理及其防范措施

来源: 发布时间:星期一, 2008年12月29日 浏览:156次 评论:0
="t18">  ASP编程门槛很低新手很容易上路段不长时间里新手往往就已经能够编出看来比较完美动态网站WebSite在功能上老手能做到新手也能够做到那么新手和老手就没区别了吗?这里面区别可就大了只不过外行人很难眼就看出来罢了在界面友好性、运行性能以及网站WebSite安全性方面是新手和老手的间区别 3个集中点而在安全性方面新手最容易忽略问题就是SQL注入漏洞问题用NBSI 2.0对网上些ASP网站WebSite稍加扫描就能发现许多ASP网站WebSite存在SQL注入漏洞教育网里高校内部机构些网站WebSite这种漏洞就更普遍了可能这是这些网站WebSite大都是些学生做缘故吧虽然个个都很聪明可是毕竟没有经验而且处于学习中难免漏洞多多了本文主要讲讲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' 转换为数据类型为 列时发生语法
/lawjia/show.asp, 第 47 行

  但是别有用心人从这个出错信息中可以获得以下信息:该站使用MS_SQL数据库用ODBC连接连接帐号名为:sonybb所谓SQL注入(SQL Injection)就是利用员对用户输入数据合法性检测不严或不检测特点故意从客户端提交特殊代码从而收集及服务器信息从而获取想得到资料通常别有用心者目标是获取网站WebSite管理员帐号和密码比如当某个人知道网站WebSite管理员帐号存在表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' 转换为数据类型为 列时发生语法
/lawjia/show.asp, 第 47 行

  你知道吗?上面标红部分就是管理员帐号admin密码!虽然很复杂让人看几遍也记不住但它就这样显示在你面前了这时您就可以用这个帐号和密码接管人家网站WebSite了!这时你可能还会说如果他不是事先知道管理员帐号存在表login中而且知道管理员帐号为admin那他就不可能获得管理员密码你错了只要人家愿意多花时间尝试他将可以获得数据库连接帐号权限内所能获得所有信息!具体过程请参看网上这篇文章:SQL注入漏洞全接触

  当然这个过程是很烦琐而且要花费很多时间如果只能以这种手动方式进行SQL注入入侵那么许多存在SQL注入漏洞ASP网站WebSite会安全很多了不是漏洞不存在了而是利用这个漏洞入侵成本太高了但是如果利用专门黑客工具来入侵那情况就大大区别了手动方式进行SQL注入入侵至少需要半天或天乃至很多天时间而利用专门工具来入侵就只需要几分钟时间了(视网速快慢决定)再利用获得管理帐号和密码上传个从网上下载ASP后门就轻易获得整个网站WebSite管理权限了甚至整个服务器管理权限最有名种SQL注入入侵工具是NBSI 2.0现在已经出到2.0版本了不过人家正式名称不叫SQL注入入侵工具而叫做网站WebSite安全漏洞检测工具有了这个所谓检测工具使得入侵存在SQL注入漏洞ASP网站WebSite成了小儿科游戏那些既不懂ASP又不懂SQL、年纪小小男性青年常常得以在天的内入侵十多个ASP网站WebSite他们以此获得内心极大满足他们似乎也非常讲究职业道德往往并不破坏网站WebSite数据和系统常见破坏方式大都仅仅是改换掉网站WebSite主页留下"善意警告"如:你网站WebSite存在SQL注入漏洞请管理员做好防范措施!并声明"我没有破坏数据和系统"还要借机发布下他倡导:"国内网站WebSite大家不要入侵有本事入侵小日本!"最后签上他鼎鼎大名是必不可少

  如此大成就多数情况下仅需动动鼠标就做到了打开最新版NBSI 2.0如图1所示:输入地址到A区注意网址必须是带传递参数那种点击右边检测按钮即出来B区信息显示当前用户为sonybb权限为PUBLIC当前库为lawjia有点可惜啊如果是SA权限就可以跨库注入了不过这个权限也足够获取该网站WebSite管理员帐号和密码了点C区下自动猜解按钮即出来当前库lawjia中各种表login表中定是存管理员帐号和密码吧?选中它吧接着点击D区下自动猜解按钮立即出来login表里列名称果然是存放用户名和密码太棒了!赶快打上勾迫不急待点击E区下自动猜解按钮激动人心时刻就要到来啦只见唰唰地几下帐号和密码全部出来了剩下事就是辨别哪个帐号是管理员了


图1(图中举例网站WebSite在作者本地电脑上运行)



  不知那些没注意过SQL注入漏洞ASP员们看了上图例子要作何感想呢?是不是觉得这个所谓网站WebSite安全漏洞检测工具SBSI 2.0简直就是MS_SQL企业管理器呢?只不过人家不需要帐号和密码就可以查看您数据库里所有信息了如果您网站WebSite就这样被人不费吹灰的力入侵了您是不是要吐几升血了呢?也许您已经为系统安全费尽心思了装补丁、安防火墙、装杀毒软件Software、巧妙配置IIS及数据库用户权限但您就是没有注意到SQL注入漏洞于是"千里的堤溃于蚁穴"防火墙和杀毒软件Software对SQL注入是没办法防范SQL注入入侵跟普通WEB页面访问没什么区别所以往往是防不甚防而且个服务器上放置网站WebSite往往是有很多个服务器管理员不可能挨个网站WebSite挨个页面审查其是否存在SQL注入漏洞那么应该如何防范SQL注入入侵呢?作为服务器管理员或网站WebSite员应该分别如何做呢?服务器管理员要做事主要是配置IIS和数据库用户权限而网站WebSite员主要是要在代码编写上防范SQL注入入侵下面详细叙述:

  对了服务器管理员既然你不可能挨个检查每个网站WebSite是否存在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出错信息设置




  但是这样设置个不好地方是员编写代码出错时服务器不给出详细提示信息会给员带来很大不便不过服务器毕竟不是测试代码地方应坚持安全稳定第这样设置也是无可厚非事实上许多服务器出错信息都是如此设置

  服务器管理员还应在IIS中为每个网站WebSite设置好执行权限可千万别给人家静态网站WebSite以"脚本和可执行"权限般情况下给个"纯脚本"权限就够了对于那些通过网站WebSite后台管理中心上传文件存放目录就更吝啬点吧执行权限设为"无"好了这样做是为了防止人家上传ASP木马执行权限设为"无"人家上传ASP木马也运行不了般情况下SQL注入漏洞仅是涉及个网站WebSite安全如果人家通过这个漏洞上传了ASP木马并运行起来那整个服务器都失陷了所以有远见、有责任心服务器管理员应该十分吝啬配置IIS执行权限

  同样吝啬态度应适用于数据库用户权限配置上当然这里数据库是指MS_SQL啦ACCESS都没有用户权限配置这步骤如果PUBLIC权限足够使用绝不给再高权限可千万别把SA级别权限随随便便地给人家啊那个所谓网站WebSite安全漏洞检测工具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把这个页面到每个需要带参数查询SQL数据库ASP页面中记住只要加行这样<!--# file="checkSQL.asp"-->代码就行了

  员要做第 2件事是给用户密码加密啦比如用MD5加密MD5是没有反向算法,不能解密人家即使知道经加密后存在数据库里像乱码密码他也没办法知道原始密码了不过人家可以用UPDATE思路方法用他密码代替你密码但这个操作还是有点麻烦人家可能会怕麻烦而放弃而那个所谓网站WebSite安全漏洞检测工具NBSI 2.0是没有提供UPDATE操作功能所以用MD5加密后人家仅用NBSI 2.0而不辅以手动操作就不可能获得网站WebSite管理员帐号密码这将挡住许多菜鸟级攻击者至少那些既不懂ASP又不懂SQL、年纪小小男性青年是没有办法啦!

  文章写到这已经够长了本来还想对那些所谓网站WebSite安全漏洞检测工具如NBSI的流黑客工具进行番理性探讨看来还是放弃好了为了增强网站WebSite安全了解攻击手段是必须但是利用漏洞开发专门黑客工具使那些其实并不具备必要网络技术和网络安全知识人(就是文中提到"既不懂ASP又不懂SQL、年纪小小男性青年")轻而易举地侵入家网站WebSite这除了为许多网络管理员制造麻烦外是否还具有加强网络安全意识提高网络安全水平功效呢?

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: