自动注入攻击工具的研发_第1页
自动注入攻击工具的研发_第2页
自动注入攻击工具的研发_第3页
自动注入攻击工具的研发_第4页
自动注入攻击工具的研发_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西南科技大学本科生毕业论文 PAGE 56第1章 绪论1.1 项目背景及意义SQL注入攻击是一种非常有效且破坏性很大的渗透手段。它是针对于数据库的一种攻击手段,通过利用数据库的外部接口把恶意代码插入到SQL语言中使数据库服务器解析并执行,以达到入侵目标数据库及至整个操作系统的目的。了解和熟悉SQL注入原理,掌握防御SQL注入攻击的原理和技巧就变得至关重要。SQL注入攻击的普遍性、难捉摸性、简易性等特点让其成为了网络中黑客主流攻击方式之一。因为SQL注入是从正常的Web平台入口进行请求访问,和请求正常的Web页面没有什么区别,所以目前市面上除了专门的Web防御防火墙外,大部分防火墙都不会对这类S

2、QL注入攻击进行监控和发出警报,若网站管理员没有经常查看IIS日志的经验和习惯,有可能被入侵很长一段时间后都没有任何发觉。由于现在广泛流行的恶意攻击工具,SQL注入在近年来呈现一种增长的趋势。据OWASP(开放式web应用程序安全项目)每隔三年更新一次的“十大安全隐患列表”,在近几次公布的总结Web应用程序最可能、最常见、最危险的十大安全隐患中,SQL注入攻击一直排列靠前。OWASP TOP 10 2010中列出的最严重的Web应用程序的漏洞中,注入(Injection)风险位居第一。Web应应用的发发展越来来越成熟熟,应用用的各项项技术发发展得也也越来越越复杂。它们涵涵盖了从从外部动动态展示

3、示INTTERNNET和和内部工工作网络络到以WWEB协协议方式式传递数数据的企企业工作作应用(如文档档管理系系统等)。这些些系统的的实用性性及其数数据存储储、处理理内容的的机密性性和敏感感性对于于企业的的主要业业务而言言都非常常重要。当前市面面的注入入攻击检检测工具具只能对对单个网网页或者者单个UURL进进行检测测和注入入,无法法对整个个网站的的漏洞进进行检测测。而漏漏洞扫描描工具可可以对整整个网站站漏洞进进行扫描描却无法法进行进进一步的的注入攻攻击检测测。很大大程度上上不能满满足开发发人员和和管理人人员对网网站SQQL注入入漏洞全全面了解解的要求求。本研研究的最最终目的的是分析析SQLL注

4、入攻攻击的类类型、关关键技术术和原理理,并研研究SQQL注入入在实际际应用中中的操作作方法,在此基基础之上上,设计计并开发发了一套套自动注注入工具具。因为恶意意攻击者者不仅可可以通过过SQLL注入攻攻击对WWeb应应用数据据进行盗盗取、篡篡改信息息,还可可以进一一步对于于服务器器进行恶恶意操作作,并且且植入木木马或者者后门程程序,甚甚至控制制整个服服务器,这就严严重影响响了应用用的正常常运行以以及对于于应用的的信息安安全带来来严重后后果。所所以,对对于功能能齐备的的SQLL注入攻攻击扫描描与检测测工具的的研究与与开发具具,具有有非常重重要的现现实意义义。应用用程序开开发者或或网站管管理人员员使

5、用此此工具对对自已的的网站进进行安全全检测,以达到到减小SSQL注注入的可可能性。同时,在渗透透测试工工作中,对于安安全测试试也具有有很大的的帮助。1.2 研究究内容1.2.1 自动注注入攻击击工具的的研发本研究首首先理解解Webb应用的的工作原原理,首首先简要要概述WWeb应应用系统统通用的的架构模模式,理理解了构构建模式式后能更更清晰的的了解SSQL注注入的产产生过程程,然后后从Weeb应用用的代码码层来分分析介绍绍是什么么引起了了通用的的SQLL注入,然后研研究介绍绍SQLL注入漏漏洞的利利用过程程。从框框架到利利用逐步步分析SSQL注注入的过过程和利利用,然然后根据据分析的的内容构构建

6、SQQL注入入的自动动化检测测及注入入攻击利利用框架架。1.2.2 SQLL注入原原理SQL注注入的原原理,是是将SQQL代码码插入或或者非正正常时添添加到应应用的参参数当中中,并且且进行了了一定的的拼接传传入到了了后台的的数据库库服务器器,最终终使服务务器执行行了该拼拼接的恶恶意SQQL命令令。所有有的是通通过SQQL语句句执行的的应用过过程均存存在被攻攻击的威威胁,因因为SQQL的多多样多变变性语言言结构特特征使得得攻击者者可以拼拼接构建建丰富的的代码编编码手段段等来拼拼接语句句来欺骗骗服务器器。SQQL注入入攻击的的主要方方式就是是直接将将命令插插入到应应用服务务的表单单参数中中传入到到

7、后台数数据库查查询字符符串中,这些参参数就会会被带入入到后台台数据库库服务器器进行执执行解析析,攻击击者便可可以构造造恶意命命令来达达到攻击击目的。1.2.3 SQLL注入检检测技术术检测发现现SQLL注入漏漏洞有一一条简单单的规则则:SQQL注入入是通过过发送特特殊数据据来触发发异常操操作。该该规则包包括如下下含义:检测Weeb应用用上所有有的输入入数据;集合SQQL语法法,归类类所有可可能触发发异常的的数据类类型;检测数据据库服务务器应用用响应中中的异常常。首先需要要清楚WWeb浏浏览器向向Webb服务器器发送请请求的过过程。不不同的服服务应用用会有不不同的体体现方式式,它们们均处在在基于

8、WWeb的的环境中中,所以以基本原原理是相相同的。识别和检检测应用用接受的的所有数数据,攻攻击一般般都会修修改这些些数据,所以需需要识别别并分析析服务器器对它们们的响应应。有时时响应中中会直接接包含来来自数据据库的SSQL错错误,有有时需要要不断的的方式来来检测和和确定响响应中细细微的差差别。1.3 章节节安排本论文章章节安排排如下:第一章 绪论:综述此此研究设设计的背背景意义义以及研研究内容容。第二章 SQLL注入技技术研究究:主要要对SQQL注入入攻击方方式过程程和攻击击特点进进行归类类、识别别,首先先理解WWeb应应用的工工作原理理,概述述Webb应用通通用的构构建方式式,为理理解SQQ

9、L注入入的产生生过程提提供一些些背景知知识,接接下来从从Webb应用的的代码层层介绍引引发SQQL注入入的因素素以及哪哪些开发发实践和和行为会会引发SSQL注注入。分分析SQQL注入入过程和和利用,并架构构如何将将SQLL注入的的发现过过程自动动化以提提高检测测简单SSQL注注入的框框架。第三章 SQLL注入攻攻击技术术研究:根据SSQL注注入技术术,研究究利用数数据库中中的功能能来攻击击系统端端口的技技术。数数数据库库大多均均带有丰丰富的数数据库编编程功能能,可以以利用SSQL注注入漏洞洞来访问问文件系系统以执执行有效效的任务务,可以以在基础础操作上上执行各各种命令令,扩大大范围攻攻击的利利

10、用技术术细节。当发现现SQLL注入漏漏洞以及及初步的的利用获获取数据据后,可可以利用用SQLL注入漏漏洞来访访问文件件系统来来扩大渗渗透范围围。还可可以在操操作系统统上执行行各种命命令,攻攻击可以以使用它它们扩展展数据库库的可达达区域并并在更大大的范围围内发动动攻击。第四章 注入高高级技巧巧研究:Webb应用通通常会使使用过滤滤应用,设计这这些过滤滤的目的的就是防防御SQQL注入入在内的的常见攻攻击。这这些过滤滤方式可可以是位位于weeb应用用的代码码层中,也可以以通过第第三方的的外部实实现,如如Webb应用防防火墙(WAFF)或入入侵防御御系统(IPSS)。当当注入攻攻击碰到到这些防防御应用

11、用,若想想进一步步利用漏漏洞,则则需要寻寻找一种种能避开开过滤器器防护的的高级方方法以便便恶意输输入传递递给易受受攻击的的代码。第五章 自动注注入工具具框架设设计:根根据项目目的设计计需求,以及PPythhon编编程语言言的特点点,对自自动注入入攻击工工具整体体框架进进行分析析和设计计。并且且分析功功能模块块中的重重点和关关键技术术。第六章 SQLL注入测测试:自自动注入入攻击实实例测试试。第2章 SQQL注入入技术2.1 Weeb应用用工作原原理和架架构简析析不论是是用何种种脚本语语言开发发的Weeb应用用,都有有一个共共同点:具有交交互性并并且大多多是数据据库驱动动的。基基于数据据库驱动动

12、的Weeb应用用一般都都包含三三层:aa prreseentaatioon ttierr(表示层层,Webb浏览器器或呈现现引擎)、a loggic tieer(逻辑层层,如C#、ASSP、.NETT、PHHP、JJSP等等编程语语言)和和a sstorragee tiier(存储层层,如Miicroosofft SSQL Serrverr、MyySQLL、Orraclle等数数据库)。Weeb浏览览器(表表示层,如Innterrnett Exxploorerr、Saafarri、FFireefoxx等)向向中间层层(逻辑辑层)发发送请求求,中间间层通过过查询、解析数据据库(存存储层)来响应应

13、该请求求。图2-11 简单单的三层层架构 Web三三层架构构解决方方案没有有扩展性性,研究究人员不不断地对对Webb三层架架构进行行改进优优化,在在可维护护性和可可扩展性性的基础础上建立立了一种种新概念念:n层层应用开开发模式式。其中中有一种就是是Webb四层架构构解决方方案,该该方案在在Webb服务器器和数据据库之间间使用了了一层中中间件服服务器(通常称称为应用用服务器器)。下下图2-2中中,Weeb浏览览器(表表示层)向中间间层(逻逻辑层)发送请请求,后后者一次次调用由由位于应应用层的的应用服服务器所所提供的的APII,应用用层通过过查询、更新数数据库(存储层层)来响响应该请请求。图2-2

14、2 四层层架构2.2 识别别SQLL注入SQL注注入就是是程序员员对程序序中动态态的SQQL语句句没有作作严格的的过滤或或检测,导致黑黑客能在在注入点点提交非非法的SSQL语语句,导导致程序序和服务务器的信信息被泄泄漏。由由于SQQL注入入的入门门门槛低低,隐蔽蔽性好,破坏性性大,杀杀毒软件件无法查查杀,是是当前最最主流的的入侵手手段。SQL注注入攻击击的本质质,就是是服务器器将用户户传入的的数据在在数据库库中当成成了SQQL代码码执行。这里便便有两个个关键因因素:第第一个是是用户有有权限输输入数据据;第二二个是服服务器应应用数据据执行了了用户传传入的数数据。2.2.1 识别数数据输入入Web

15、环环境是一一种C/S(客客户端/服务器器)架构构。客户户端使用用浏览器器向Weeb服务务器发送送请求并并等待响响应。WWeb服服务器接接收到请请求后,通过查查询、解解析数据据库,将将响应发发送回客客户端。很明显显,双方方便必须须使用一一种协议议作为双双方的约约定,这这种传输输协议就就是HTTTP。首先,必必须识别别远程WWeb应应用所接接收的所所有数据据输入。HTTTP协议议定义了了可以发发送给服服务器的的操作方方式,这这里只关关注研究究与SQQL注入入攻击相相关的两两种方法法:GEET和PPOSTT。GET请请求:GET是是向服务务器发索索取数据据的一种种请求,是一种种请求服服务器的的HTT

16、TP方法法。使用用GETT请求时时,信息息是显示示在URRL中的的。GEET请求求对用户户是透明明的,如如下例,WEBB服务器器的GEET请求求如下所所示:GET /geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=1311 HTTTP/1.11Userr-Aggentt: OOperra/99.800 (WWinddowss NTT 6.1; U; Ediitioon IIBISS; zzh-ccn) Preestoo/2.10.2299 Veersiion/11.62Hostt: *.Acceept: teext/htmml, apppl

17、iccatiion/xmll;q=0.99, aappllicaatioon/xxhtmml+xxml, immagee/pnng, imaage/webbp, imaage/jpeeg, imaage/giff, iimagge/xx-xbbitmmap, */*;qq=0.1Acceept-Lannguaage: zhh-CNN,zhh;q=0.99,enn;q=0.88Acceept-Enccodiing: gzzip, deeflaateCookkie: SIID_441433=822b900aeee; SSID_99=bfbb67dd86; UII_COOOKIIE=00; LLWr

18、77_21132_ulaastaactiivitty=885ebbvMTTfOWWVLvvxgzzzzVV4uvv0PkkMG114SLL7yUUg9SSVBPP%2BBzMNNhDttpaSSVL; PHHPSEESSIID=0073eedfee78994accb3222baa106616778e8820990; lzsstatt_uvv=100735529112922559957445677|288799946Proxxy-CConnnecttionn: KKeepp-Allivee该请求中中与数据据查询相相关的参参数在UURL中中,格式式如下所所示:listt.phhp?VVOTEE_I

19、DD=1331上述示例例中包含含一个参参数:VVOTEE_IDD。服务务器应用用将会把把参数值值带入数数据库中中解析执执行,然然后将响响应结果果返回给给客户端端。POSTT请求:POSTT请求是是作为HHTTPP消息的的实际内内容发送送给weeb服务务器的HHTTPP方法。在浏览览器中填填写表单单并点击击Subbmitt按钮时时通常使使用该方方法。下下面的例例子是浏浏览器发发送给远远程WEEB服务务器的内内容,请请求如下下所示:POSTT /ggeneerall/voote/shoow/wwebsst/ppl_wwritte.pphp?ITEEM_IID=3345 HTTTP/11.1User

20、r-Aggentt: OOperra/99.800 (WWinddowss NTT 6.1; U; Ediitioon IIBISS; zzh-ccn) Preestoo/2.10.2299 Veersiion/11.62Hostt: *.Acceept: teext/htmml, apppliccatiion/xmll;q=0.99, aappllicaatioon/xxhtmml+xxml, immagee/pnng, imaage/webbp, imaage/jpeeg, imaage/giff, iimagge/xx-xbbitmmap, */*;qq=0.1Acceept-Lanng

21、uaage: zhh-CNN,zhh;q=0.99,enn;q=0.88Acceept-Enccodiing: gzzip, deeflaateRefeererr: hhttpp:/*.n/geenerral/votte/sshoww/weebstt/pll_wrritee.phhp?IITEMM_IDD=3445Cookkie: SIID_441433=822b900aeee; SSID_99=bfbb67dd86; UII_COOOKIIE=00; LLWr77_21132_ulaastaactiivitty=885ebbvMTTfOWWVLvvxgzzzzVV4uvv0PkkMG114S

22、LL7yUUg9SSVBPP%2BBzMNNhDttpaSSVL; PHHPSEESSIID=0073eedfee78994accb3222baa106616778e8820990; lzsstatt_uvv=100735529112922559957445677|288799946Connnecttionn: KKeepp-AlliveeConttentt-Leengtth: 40Conttentt-Tyype: apppliicattionn/x-conttentt=POOST+TESST&ssubmmit=+%CCC%EE1+%BD%BB+其他注入入数据:除了GEET或PPOSTT参数传

23、传输检索索数据外外,HTTTP请请求的其其他内容容也可能能会触发发SQLL注入漏漏洞。Cookkie就就是个很很典型的的例子。Coookiee由服务务器发发发送到用用户端的的浏览器器,并会会在用户户端每次次请求中中都会回回发给服服务器。Coookiee一般被被用于辨辨别用户户身份、进行ssesssionn跟踪而而储存在在用户本本地终端端上的数数据。由由此可见见,用户户完全可可以控制制发送给给服务器器的Coookiie内容容,所以以Coookiee也作为为一种有有效的用用户数据据输入方方式和易易受注入入影响的的对象。如:GET HTTTP/1.11Hostt: nUserr-Aggentt: M

24、Moziillaa/5.0 (X111; UUbunntu; Liinuxx i6686; rvv:199.0) Geeckoo/20010001011 Fiireffox/19.0Acceept: teext/htmml,aappllicaatioon/xxhtmml+xxml,apppliccatiion/xmll;q=0.99,*/*;qq=0.8Acceept-Lannguaage: enn-USS,enn;q=0.55Acceept-Enccodiing: gzzip, deeflaateCookkie: _utmma=223555048861.1044586639006.11362

25、272111588.1336399221147.1366417788777.117; _uutmzz=233550048661.11363387883977.133.3.utmmcsrr=|utmmccnn=(rrefeerraal)|utmmcmdd=reeferrrall|uttmccct=/appp/prrocuuremmentt/biids/; ss_nrr=13364119744019953-Reppeatt; ss_vnnum=13664799960003337%226vnn%3DD19; s_vi=CSSv11|2889CCC3ECC8511D1CC92-400000113266

26、0122B188CCCE; fssr.rr=d:90,i:dd04660122-55516444944-d9970-14660-ee76119,e:13363333044793331; eelf_e=hhackk; ellf_ss=abb; eelf_h=886b99fa333b11b6552a33c733ea882f55e62263bbeConnnecttionn: kkeepp-allivee该应用系系统存在在一个ccookkie注注入漏洞洞,漏洞洞代码下下图2-3,程程序代码码没有任任何过滤滤就将用用户传入入的coookiie参数数带入到到数据库库中进行行执行。用户只只要利用用抓包工工具

27、将传传入的数数据包截截下来修修改coookiie字段段的数据据就可以以将恶意意命令传传入到后后台数据据库进行行执行。图2-33 存在在漏洞的的代码文文件2.2.2 操作请请求参数数下面先通通过介绍绍一个非非常简单单的例子子来熟悉悉SQLL注入漏漏洞。以我们学学校htttp:/*./为例。浏览到到某页面面的URRL如下下: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 httpp:/*.n/geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=1311Listt.ph

28、hp页面面收到一一个名为为VOTTE_IID的参参数。现在开始始开始手手动修改改VOTTE_IID参数数的值,将其改改为意外外的数值值。按照照下列方方式进行行首次尝尝试: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 httpp:/*.n/geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=atttackker上例中使使用不存存在的类类型名向向服务器器发出请请求。服服务器返返回如下下图2-4响应应:图2-44 服务务器响应应结果11该警告是是当用户户尝试从从空结果

29、果集中读读取记录录时,数数据库返返回的一一个MYYSQLL数据库库错误。该错误误表明远远程应用用未能正正确处理理意外的的数据。继续进行行推理操操作,现现在向之之前发送送的值添添加一个个单引号号(),发送送下列请请求: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 httpp:/*.n/geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=atttackker下图2-5是服服务器的的响应:图2-55 服务务器响应应结果22服务器返返回下列列错误:请联系管管理员 错误#

30、110644: Youu haave an errror in youur SSQL synntaxx; cchecck tthe mannuall thhat corrressponnds to youur MMySQQL sservver verrsioon ffor thee riightt syyntaax tto uuse neaar att liine 1SQL语语句: SELLECTT ENND_DDATEE frrom VOTTE_TTITLLE wwherre VVOTEE_IDD=atttacckerr文件:DD:/*rroott/geenerral/votte/sshow

31、w/weebstt/liist.phpp不难发现现,有些些应用在在处理用用户数据据时会返返意想不不到的结结果。WWEB检检测的异异常并非非都是由由SQLL注入漏漏洞引起起的,还还会受到到很多其其他因素素的影响响。这里还可可以通过过进行另另一个测测试来识识别SQQL SServver和和Oraaclee中的漏漏洞。向向Webb服务发发送下面面两个请请求: HYPERLINK httpp:/*.n/geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=1311 HYPERLINK +1 httpp:/*.n/geenerral/votte/sshow

32、w/weebstt/liist.phpp?VOOTE_ID=13+11在MYSSQL中中,与其其等价的的请求为为: HYPERLINK httpp:/*.n/geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=1311 HYPERLINK httpp:/*.n/geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=13 11如果两个个请求结结果相同同,则很很可能存存在SQQL注入入漏洞。2.2.3 数据库库响应测试SQQL注入入攻击漏漏洞时,可能会会从WEEB服务务器收到到不同的的数据库库错误响响

33、应,所所以对于于这些错错误的意意义需要要熟悉和和掌握。图2-6展示示了产生生SQLL注入错错误的过过程和WWEB服服务器对对错误进进行处理理得过程程。图2-66 产生生SQLL注入错错误的过过程中的的信息流流产生SQQL注入入错误的的过程中中发生了了以下事事件:用户端发发送请求求数据,尝试触触发SQQL注入入漏洞。假设用用户发送送了一个个带单引引号的值值。WEB服服务器接接收到用用户端的的请求数数据,并并向数据据库服务务器发送送SQLL查询。本例中中,在WWEB服服务器执执行的SSQL语语句中包包含了用用户输入入参数并并且构造造了一条条SQLL查询,该查询询因末尾尾存在单单引号而而导致语语法错

34、误误。数据库服服务器接接收执行行了格式式不正确确的SQQL查询询,并向向WEBB服务器器返回一一条错误误消息。WEB服服务器接接收到的的来自数数据库的的错误向向用户发发送HTTML响响应。下面列举举常见的的SQLL错误。SQL Serrverr错误在请求中中插入一一个单引引号在参参数中会会产生数数据库错错误。对于SQQL SServver中中,远程程应用返返回类似似于下列列内容的的错误,图2-7所示示:图2-77 SSQL Serrverr错误通过上面面的例子子,我们们可以确确定运行行在数据据库上的的远程SSQL语语句与下下面的内内容相似似:SELEECT *FROMM NeewsWHERRE

35、 AArtiicleeID=26650该Webb应用未未检测单单引号,所以数数据库服服务器响响应返回回了一个个错误。MYSQQL错误误下面介绍绍一下典典型的mmysqql错误误。MYYSQLL可以在在很多架架构和操操作系统统下执行行,兼容容性很好好,常见见的配置置是在装装有liinuxx操作系系统的aapacche webb服务器器上运行行phpp,但它它也可以以出现在在很多其其他场合合中。下列错误误通常表表明存在在MYSSQL注注入漏洞洞:Warnningg:myysqll_feetchh_arrrayy(1):suupplliedd arrgummentt iss noot aa vaal

36、idd MyySQLL reesullt rresoourcce iin /varr/ oon llinee 92.2.4 自动寻寻找SQQL注入入对于SSQL注注入工具具的开发发,如何何的适度度的自动动化SQQL注入入的请求求是其中中的关键键。识别别数据输输入是可可以自动动化的内内容,它它涉及搜搜索WEEB站点点和寻找找GETT及POOST请请求。数数据注入入也可以以自动完完成,因因为上一一阶段已已经获取取了发送送请求所所需要的的所有数数据。若若想自动动寻找SSQL注注入漏洞洞,主要要问题在在于检测测远程服服务器响响应中的的异常。对于管管理员来来说,区区别一个个错误页页面或其其他类型型的异常

37、常页面非非常容易易;但对对于程序序来说,要识别别出服务务器异常常输出,有时会会非常困困难。某些情情况下,应用可可以很容容易地检检测到数数据库发发生了错错误,如如以下情情形下:WEBB应用服服务器返返回由数数据库产产生的SSQL错错误;WEBB应用服服务器返返回HTTTP5500内内部服务务器无法法执行错错误;某些SSQL盲盲注情况况下。但对于于其他情情况,应应用系统统将很难难识别存存在的漏漏洞,而而且很容容易出现现遗漏。所以,自动发发现SQQL注入入存在着着一定的的局限性性,自定定义的测测试和手手动测试试也显得得非常重重要。2.3 SQQL盲注注很多时时候,WWEB服服务器为为了安全全设置关关

38、闭了错错误回显显,但是是这可以以阻挡住住SQLL注入攻攻击吗?当发现现一个SSQL注注入点,但应用用只提供供了一个个自定义义的通用用的错误误页面;或者虽虽然提供供了正常常的页面面,但与与期望的的测试响响应存在在一些小小的差异异。基于于这种情情况下的的SQLL注入攻攻击测试试,都属属于SQQL盲注注。所谓“盲注”,就是是在在注注入攻击击Webb应用时时,攻击击语句被被带入到到后台数数据库中中执行,但是服服务器查查不会返返回错误误或者执执行结果果的回显显的情况况下进行行的注入入攻击。服务器器没有了了攻击者者期望的的错误回回显,对对于攻击击者来说说没有了了非常重重要的SSQL注注入攻击击“调试信信息

39、”,所以以攻击者者必须找找到一个个方法来来从侧面面验证注注入的SSQL语语句是否否得到成成功执行行。2.3.1 注入带带判定的的参数(Timmingg Atttacck) 当已经识识别可能能存在SSQL注注入漏洞洞,但又又没有正正常的回回显的时时候,要要想进一一步确认认和检测测漏洞,一般可可以提交交包含副副作用的的查询参参数。比比较老的的技术是是使用ttimiing atttackk,计时时攻击。20111年3月月27日日,一个个叫TiinKoode4的黑客客在著名名的安全全邮件列列表Fuull Disscloosurre上公公布了他他入侵mmysqql.ccom的的细节。这次入入侵事件件,就

40、是是因为一一个SQQL盲注注漏洞引引起的。据黑客公公布描述述,当时时这个漏漏洞是出出现在下下面这个个页面,如图22-8:图2-88 myysqll.coom漏洞洞页面可以看到到网址UURL:inddex.htmml?iid=111700,通过过修改参参数idd后的数数值,服服务器将将返回不不同的查查询的客客户信息息。这个个漏洞中中,idd=这个个参数链链接就是是一个很很隐蔽的的“SQLL盲注”漏洞,攻击者者通过精精心构造造id参参数的UURL,就可以以进行SSQL注注入攻击击。利用用通常的的SQLL语句比比如“andd 1=2”在此链链接下是是无法看看出异常常的,因因为应用用服务器器不会返返回

41、任何何异常的的数据。在这里里,TiinKoode4利用“SQLL盲注”的一个个技巧:Timmingg Atttacck,用用来确认认漏洞是是否存在在。在MYSSQL数数据库中中,有个个函数:BENNCHMMARKK(),可以用用来测试试函数性性能。同同时它含含有两个个参数:BENCCHMAARK(couunt,exppr)函数执行行的结果果,是将将表达式式exppr执行行couunt次次。比如如:mysqql SELLECTT BEENCHHMARRK(1100000000,ENNCODDE(helllo,ddllkk);+| BENNCHMMARKK(100000000,ENCCODEE(h

42、helllo,dlllk) | 0 |+1 roow iin sset (4.97 secc)就将ENNCODDE(helllo,ddllkk)执行行了100000000次次,共用用4.997秒。因此,攻攻击者就就可以利利用MYYSQLL数据库库中的这这个函数数BENNCHMMARKK(),在传入入到后台台服务器器的参数数中让同同一个SSQL函函数在数数据库中中执行若若干次,然后通通过服务务器执行行该SQQL语句句的时间间的长短短变化,就可以以用来侧侧面判别别出SQQL注入入攻击语语句是否否已经成成功的执执行。这这个攻击击利用技技巧在盲盲注中被被称为TTimiing Atttackk。在此次m

43、mysqql.ccom的的攻击中中,攻击击者接下下来就是是利用TTimiing Atttackk攻击。比如构构造的攻攻击参数数id值值如图22-9:图2-99 Tiiminng AAttaack攻攻击语句句1这段攻击击Payyloaad首先先进行的的是判断断库名的的第一个个字母是是否为小小写的ww,即CCHARR(1119)。如果判判断结果果为真,就会执执行后面面的BEENCHHMARRK()函数,执行该该函数就就会造成成较长的的延时;如果判判断结果果为假,则该攻攻击语句句很快就就会被执执行完毕毕,页面面将很快快得到加加载。这这样,攻攻击者就就可以通通过构造造攻击PPaylloadd猜解遍遍历

44、出所所有的库库名字母母,直到到将整个个数据库库名全部部猜解完完成为止止,然后后进一步步可以猜猜解遍历历出数据据表明、列明和和数据内内容,将将可以将将整个数数据中的的内容下下载过来来。同时,攻攻击者还还可以通通过以下下Payyloaad获取取到更多多有用信信息,图图2-110:图2-110 TTimiing Atttackk攻击语语句2此外,攻攻击者可可以通过过利用DDumpp Fiile的的方法如如图图22-111,来写写入一个个webbsheell木木马:图2-111 DDumppFille写如如webbsehhllTimiing Atttackk是SQQL盲注注中的一一种高级级技巧。在各种

45、种不同的的数据库库中,都都有与BBENCCHMAARK()函数数类似的的东西。如MYSSQL:BENNCHMMARKK(100000000,MD(1) orr SLLEEPP(5)PosttgreeSQLL:PGG_SLLEEPP(5) orr GEENERRATEE_SEERIEES(11,100000000)MS SSQL Serrverr:WAAITFFOR DELLAY 0:0:55如,在MMicrrosooft SQLL Seerveer中,可使用用如下SSQL代代码来产产生一个个8秒的的暂停:WAITTFORR DEELAYY 00:0:8同样,对对于MYYSQLL数据库库,攻击击

46、者也可可以使用用SLEEEP()函数数(该函函数适用用于MYYSQLL5.00.122及以后后的版本本)来进进行Tiiminng AAttaack。同时,攻攻击者还还可以利利用应用用服务器器的回显显输出来来进行判判断。例例如,若若将注入入下面的的字符串串: ANND 1=2插入到一一个搜索索字段中中,将产产生与 ORR 11=1不同的结结果响应应。2.3.2 Parrameeterr Spplitttinng aand Ballanccingg技术如果注入入带判断断的函数数不起作作用,可可以尝试试“parrameeterr spplitttinng aand ballanccingg”(参数数

47、拆分与与平衡)技术。拆分是指指拆分正正常的参参数输入入,平衡衡则是指指保证最最终的查查询与正正常的输输入是一一致。其其基本思思想是:将正常常的请求求参数进进行拆分分,然后后使用SSQL语语句关键键字对它它们进行行修改,最终需需保证与与原数据据不同,使得后后台数据据库服务务器解析析执行带带入的参参数时,与正常常的参数数请求一一样的同同时也带带入了“非法”的请求求。例如,在在htttp:/*.swwustt.eddu.ccn/vvieww_reevieew.pphp?id=5这个个URLL中,将将id参参数的值值插入到到一条SSQL语语句中构构成下列列查询:SELEECT revvieww_coo

48、nteent,revvieww_auuthoor FFROMM reevieews WHEERE id=5如果使用用2+33替换55,那么么输入应应用中的的参数将将不同于于原始请请求中的的输入,但SQQL数据据执行在在结果上上是等价价相同的的:SELEECT revvieww_coonteent,revvieww_auuthoor FFROMM reevieews WHEERE id=2+33这种方式式不仅仅仅只局限限于数字字值型。假设htttp:/*./vieew_rreviiew.phpp?Auuthoor=ddllkk这个UURL返返回与某某一数据据库项目目相关的的信息,我们将将Autt

49、horr参数的的值放到到一条SSQL查查询中构构成下列列查询:SELEECT COUUNT(id) FRROM revviewws WWHERRE rreviiew_aouuthoor = ddllkk可以使用用特定的的数据库库运算符符将dlllk字字符串拆拆分,向向Webb服务应应用提供供与dlllk相相对应的的不同的的参数输输入。对对于再ooraccle数数据库的的利用中中,可以以使用“|”运算符符来链接接两个字字符串:SELEECT COUUNT(id) FRROM revviewws WWHERRE rreviiew_aouuthoor = ddl|llk它与之前前的第一一个查询询在最

50、终终执行的的参数是是等价的的。下表2-1是带带子查询询占位符符的拆分分字符串串参数:表2-11 带子子查询占占位符的的拆分字字符串第3章 SQQL注入入攻击技技术研究究3.1 识别别数据库库要成功进进行SQQL注入入攻击,还有重重要的一一点就是是需要探探测出服服务器正正在使用用的数据据库系统统DBMMS。若若是攻击击者连数数据库系系统都无无从判断断,就不不可能构构造出有有效的“恶意”参数来来进行SSQL注注入,也也就无法法实施攻攻击。通常WEEB架构构技术可可以使我我们猜测测验证出出数据库库系统。例如,ASPP和.NNET的的WEBB服务应应用通常常使用的的事Miicroosofft SSQL

51、 Serrverr作为数数据库系系统,而而PHPP应用则则很可能能使用MMYSQQL数据据库。如如果是用用JAVVA、JJSP等等编写的的,那么么很有可可能使用用的是OOraccle数数据库。在识别SSQL注注入漏洞洞所存在在的数据据库中,如果不不是SQQL盲注注,通常常情况下下可以很很快的判判断出数数据库系系统。如如果数据据库响应应返回出出SQLL注入的的错误消消息,一一般都会会在报错错的响应应中可以以找到是是何数据据库系统统的线索索。如图3-1 SSQL Serrverr错误信信息:图3-11 SQQL SServver错错误信息息根据报错错信息可可以很直直接的就就判断数数据库类类型为MM

52、icrrosooft SQLL Seerveer。这种方法法就是添添加一个个单引号号将使得得构造的的SQLL语句参参数带入入到数据据库服务务器当作作SQLL语句来来执行,这将产产生一条条语法错错误而暴暴露出错错误信息息。如图3-2 SSQL Serrverr错误信信息: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 httpp:/*.n/geenerral/votte/sshoww/weebstt/liist.phpp?VOOTE_ID=1311图3-22 SQQL SServver错错误信息息在错误消消息中明明

53、确提到到了“MySSQL”,还附附加了一一些关于于出错内内容的有有用细节节。如下下表3-1返回回各种DDBMSS所对应应的查询询:表3-11 返回回各种DDBMSS所对应应的查询询例如,对对于SQQL SServver 20000 SSP4来来说,执执行SEELECCTverrsioon查询询时,将将得到如如图3-3所示示信息:图3-33 SQQL SServver 20000服务务器返回回信息如果应用用服务器器并不能能直接的的在响应应中返回回所想要要的数据据信息,则需要要一种间间接的方方法来触触发获得得想要的的信息。不同的的数据库库,在语语法查询询方式上上有略微微的不同同,不同同的数据据库系

54、统统就会有有不同的的查询方方式。比比如一个个简单查查询如下下:SELEECT soomesstriing该查询语语句对于于大多数数主流的的数据库库系统都都是有效效的,对对于不同同的数据据库系统统,将查查询的字字符串分分成两个个字串的的SQLL语句的的时候还还是存在在有细微微的差异异的,就就SQLL Seerveer、MMysqql、OOraccle来来说,如如下表33-2:表3-22 字符符串分成成两个字字串的SSQL语语句假设Weeb应用用中没有有可以利利用的SSQL注注入字符符串参数数,则可可以使用用之前数数字参数数类似的的技术。这样的的话就需需要一条条针对特特定情况况特定技技术的SSQL

55、语语句,使使得在服服务器经经过执行行SQLL语句后后计算后后生成一一个数字字。在下表33-3所所示列举举的SQQL语句句中,在在对应的的数据库库系统上上执行对对应的SSQL语语句后都都会生成成一个整整数,而而若在其其他不同同的数据据库下执执行语句句的话,就将会会产生错错误。表3-33 从数数字函数数推断DDBMSS版本3.2 注入入语句获获取数据据UNIOON语句句是数据据库管理理员经常常使用函函数之一一。使用用UNIION的的SQLL语句,可以连连接两条条或多条条SELLECTT语句的的联合查查询得到到结果。基本语语法如下下所示:SELEECT collumnn-1,collumnn-2,c

56、oolummn-NN FRROM tabble-1UNIOONSELEECT collumnn-1,collumnn-2,coolummn-NN FRROM tabble-2执行该查查询后,返回结结果得到到的是由由两个SSELEECT语语句返回回结果组组成的表表。通常常在默认认情况下下,得到到的返回回结果中中只会包包含不同同的数值值。如果果想在查查询的结结果中将将重复的的值也显显示出来来,只需需要稍微微修改下下语法即即可:SELEECT collumnn-1,collumnn-2,coolummn-NN FRROM tabble-1UNIOON AALLSELEECT collumnn-1,c

57、ollumnn-2,coolummn-NN FRROM tabble-2在SQLL注入测测试攻击击中,数数据库的的UNIION查查询方法法对于攻攻击来说说作用很很大:如如果服务务器可以以正常返返回第一一个查询询得到的的数据,若想修修改加入入数据库库UNIION查查询,便便可以利利用读取取到攻击击者想要要读取的的该数据据库用户户,然后后就可以以访问的的其他的的任何一一张数据据表。如,如果果想要找找到liist.aspp页面执执行的查查询的数数据表所所返回的的列数,则可以以按下列列方式请请求URRL,直直到不再再返回错错误位置置信息:httpp:/*.n/liist.aspp?Idd=122+un

58、nionn+seelecct+nnulll-httpp:/*.n/liist.aspp?Idd=122+unnionn+seelecct+nnulll,nuullhttpp:/*.n/liist.aspp?Idd=122+unnionn+seelecct+nnulll,nuull,nulll获取列的的另一种种方法是是使用OORDEER BBY语句句,ORRDERR BYY语句并并不是通通过注入入另一个个查询语语句来获获得查询询结果。通过增增大ORRDERR BYY 子语语句中代代表列的的数字就就可以来来识别查查询中的的列数,如下所所示:httpp:/*.n/liist.aspp?Idd=122

59、+orrderr+byy+1httpp:/*.n/liist.aspp?Idd=122+orrderr+byy+2httpp:/*.n/liist.aspp?Idd=122+orrderr+byy+3.若在以上上使用OORDEER BBY 99查询时时收到第第一个错错误回显显,就意意味着查查询的数数据库中中包含的的数据有有8列。当攻击识识别出数数据库的的列数后后,接下下来就是是选择数数据中的的其中一一列或几几列来继继续攻击击查询数数据库中中的数据据了。因此,如如果攻击击者想提提取一个个数据库库字符串串值,就就可以通通过它来来保存正正在寻找找的数据据,以便便找到一一个字符符串类型型的列。攻击者者

60、可以用用NULLL来很很容易的的实现,只需要要重复的的使用字字符串示示例替换换掉NUULL即即可。例例如,如如果原始始的数据据查询中中包含44列数据据,则可可以做如如下尝试试获得字字符串类类型的列列:httpp:/*.n/liist.aspp?Idd=122+unnionn+seelecct+dlllk,nulll,nnulll,nuullhttpp:/*.n/liist.aspp?Idd=122+unnionn+seelecct+nnulll,ddllkk,nnulll,nuullhttpp:/*.n/liist.aspp?Idd=122+unnionn+seelecct+nnulll,nu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论