[转载]SQL注入攻击的网络分析及防御方法
上一篇 / 下一篇 2008-11-22 13:58:07 / 个人分类:SQL注入
SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。51Testing软件测试网!dK[9R*DC E
p5ok:T3NPYl Y%mLa0 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。51Testing软件测试网"Td~:j7xSC&o
51Testing软件测试网v;Znn(yG(a1Fve但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高手与“菜鸟”的根本区别。下面从SOL注入的背景讲起,再谈谈如何防御等问题。
3Ez~}Zf051Testing软件测试网)`(yR(K6Lv)n8Cq一 SQL注入攻击的背景:51Testing软件测试网+[IG\@-N,B1T
51Testing软件测试网MtMA!Y}*q8ne)v在计算机技术高速发展的今天,越来越让人们头疼的是面临越来越“变态”和复杂的威胁网站技术,他们利用Internet 执行各种恶意活动,如身份窃取、私密信息窃取、带宽资源占用等。它们潜入之后,还会扩散并不断更新自己。这些活动常常利用用户的好奇心,在用户不知道或未来允许的情况下潜入用户的PC,不知不觉中,帐户里的资金就被转移了,公司讯息也被传送出去,危害十分严重。2006年8月16日,第一个Web威胁样本出现,截止到2006年10月25日,已经产生了第150个变种,并且,还在不断地演化下去。
rt'@k0E~V0(u.f9h6HJ3xF7H0 网站威胁的目标定位有多个维度,是个人还是公司,还是某种行业,都有其考虑,甚至国家、地区、性别、种族、宗教等也成为发动攻击的原因或动机。攻击还会采用多种形态,甚至是复合形态,比如病毒、蠕虫、特洛伊、间谍软件、僵尸、网络钓鱼电子邮件、漏洞利用、下载程序、社会工程、rootkit、黑客,结果都可以导致用户信息受到危害,或者导致用户所需的服务被拒绝和劫持。从其来源说Web威胁还可以分为内部攻击和外部攻击两类。前者主要来自信任网络,可能是用户执行了未授权访问或是无意中定制了恶意攻击;后者主要是由于网络漏洞被利用或者用户受到恶意程序制定者的专一攻击。51Testing软件测试网O4TL%_ v]#|-O
51Testing软件测试网9V9j*[_E(Ys二 SQL注入攻击的网络分析:51Testing软件测试网Ds`-a)XRk
'u$gR:e_5^oV}O0 SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西。不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是,他们的客户极其容易受到攻击。51Testing软件测试网5}FI!\6i,m!P"@H$h"t
6[6i)TN@&r_0 Michael Sutton 最近发表了一篇非常发人深省的帖子,讲述在公共网上这问题是多么地普遍。他用Google的Search API建了一个C#的客户端程序,寻找那些易受SQL 注入攻击的网站。其步骤很简单:
#q v7z/Ju$v,J-Oq051Testing软件测试网1D*[ujm%fq;K6i)T1、寻找那些带查询字符串的网站(例如,查询那些在URL里带有 "id=" 的URL)
f7do0uj1UGYp051Testing软件测试网y"a]1j3U'Wv2、给这些确定为动态的网站发送一个请求,改变其中的id=语句,带一个额外的单引号,来试图取消其中的SQL语句(例如,如 id=6' )
Cu w/`Jr^[051Testing软件测试网u2h/[o*t)s9~Z#N[ w3、分析返回的回复,在其中查找象“SQL” 和“query”这样的词,这往往表示应用返回了详细的错误消息(这本身也是很糟糕的)
d3c W7I|:pwd0#FfY0Hb0 4、检查错误消息是否表示发送到SQL服务器的参数没有被正确加码(encoded),如果如此,那么表示可对该网站进行SQL注入攻击。
xk(D#LZDx.z M Y051Testing软件测试网 b7g!}9B{对通过Google搜寻找到的1000个网站的随机取样测试,他检测到其中的11.3%有易受SQL注入攻击的可能。这非常,非常地可怕。这意味着黑客可以远程利用那些应用里的数据,获取任何没有hashed或加密的密码或信用卡数据,甚至有以管理员身份登陆进这些应用的可能。这不仅对开发网站的开发人员来说很糟糕,而且对使用网站的消费者或用户来说更糟糕,因为他们给网站提供了数据,想着网站是安全的呢。51Testing软件测试网\w;w"eT6x
51Testing软件测试网'n T8I*@'q ~W!\那么SQL注入攻击到底是什么玩意?51Testing软件测试网!{T+HZR@$t
D"r Q R)upnF0 有几种情形使得SQL注入攻击成为可能。最常见的原因是,你动态地构造了SQL语句,却没有使用正确地加了码(encoded)的参数。譬如,考虑这个SQL查询的编码,其目的是根据由查询字符串提供的社会保险号码(social security number)来查询作者(Authors):
7A*yEp1GV(u0jz(ag/uj0i T0 Dim SSN as String51Testing软件测试网qi2Vh2c(e Y2e
51Testing软件测试网sLN"D!j\Dim SqlQuery as String
v,qu/TPd5W.HL05o,G*`.e?0 SSN = Request.QueryString("SSN")
Z|@4w@ @0F#I"cRG x,} j(X}(^0 SqlQuery = "SELECT au_lname, au_fname FROM authors WHERE au_id = '" + SSN + "'"51Testing软件测试网~W j&h%n^3C
{ w(p1g2h)n$vF1og0 如果你有象上面这个片断一样的SQL编码,那么你的整个数据库和应用可以远程地被黑掉。怎么会呢?在普通情形下,用户会使用一个社会保险号码来访问这个网站,编码是象这样执行的:
|0ID:v;Rq0u051Testing软件测试网+xG:tW;s-i9K' URL to the page containing the above code51Testing软件测试网 Ozoj3\VNT*e,l
Kz'?o4mOi0 http://mysite.com/listauthordetails.aspx?SSN=172-32-9999
W'b!z"x-Frp(xOC0w%nDDj!vN0 ' SQL Query executed against the database
P1B1z!y)G%xn#n2n0|o$d|#K"u.?Q0 SELECT au_lname, au_fname FROM authors WHERE au_id = '172-32-9999'51Testing软件测试网Lv;]Bw b@
51Testing软件测试网Ag H3jT$i2\*X这是开发人员预期的做法,通过社会保险号码来查询数据库中作者的信息。但因为参数值没有被正确地加码,黑客可以很容易地修改查询字符串的值,在要执行的值后面嵌入附加的SQL语句 。譬如,
E/\r"H8f0l8f)roE@R5q7R0 ' URL to the page containing the above code51Testing软件测试网 {;~$A]8e;{s8w3i
51Testing软件测试网\ o\3o"L7f4P?f)Ehttp://mysite.com/listauthordetails.aspx?SSN=172-32-9999';DROPDATABASE pubs --
6ssk+]9E2V+D0g9E C"L:S0 ' SQL Query executed against the database51Testing软件测试网!l H6Wk^C5]
51Testing软件测试网5mi^\*Fd?SELECT au_lname, au_fname FROM authors WHERE au_id = '';DROP DATABASE pubs --
eb3V:I8O&B051Testing软件测试网&tv\RRHx7A注意到没有,可以在SSN查询字符串值的后面添加“ ';DROP DATABASE pubs -- ”,通过 “;”字符来终止当前的SQL语句,然后添加了自己的恶意的SQL语句,然后把语句的其他部分用“--”字符串注释掉。因为是手工在编码里构造SQL语句,最后把这个字符串传给了数据库,数据库会先对authors表进行查询,然后把我们的pubs数据库删除。“砰(bang)”的一声,数据库就没了!
-\3]:j mn;Ro}0