版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本科毕业论文(设计)论文题目:Web环境下SQL注入攻击与防御研究 学 院(系): 专 业: 年 级: 姓 名: 学 号: 指导教师: 填表日期: Web环境下SQL注入攻击与防御研究周波摘要:随着计算机网络的发展,Web应用程序得到极为广泛的应用,其自身的安全也面临越来越多的威胁,结构化查询语言(SQL)注入攻击也是目前Web应用程序面临的主要安全威胁之一,因此对SQL注入攻击与防御对于理解和加强Web应用程序的安全具有十分重要的意义。SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差
2、不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。本文针对普遍存在的SQL注入攻击方法与防御技术进行探讨,总结了常见的利用SQL漏洞的方法,从代码层和系统层的角度介绍了避免SQL注入的各种策略和需要考虑的问题。包含所有与SQL注入相关的、当前已知的信息。本文所论述的内对于web程序开发者,系统管理人员,网络管理人员和安全人员具有一点的安全参考价值,这对于减小SQL注入攻击的危害,降低WEB系统的安全威胁,,提高we
3、b程序质量具有重要的意义。关键词: 注入攻击 注入漏洞 漏洞检测 代码解析SQL injection attack and defense in the Web environmentZhouboAbstract:With the development of computer networks, web applications extremely wide range of applications, its security is also facing increasing threats and Structured Query Language (SQL) injection at
4、tacks is facing web application security threats SQL injection attack and defense is of great significance for the understanding and enhance the security of web applications.SQL injection attacks are one of the common means of hacker attacks on the database. With the development of the B / S mode ap
5、plication development, more and more programmers to write applications that use this model. However, due to the uneven level and experience of the programmers, a large part of the programmer when writing code, not the legitimacy of the user input data to judge, to make the application a security ris
6、k. Users can submit a database query code, according to the procedure to return the results, get some data he would like to know, This is known as SQL Injection, namely SQL injection.Widespread SQL injection attack and defense technologies to explore, summed up the common use of SQL vulnerability, a
7、nd a variety of strategies to avoid SQL injection and the issues to be considered from the perspective of the code and system layers. Contains all SQL injection, the currently known information.Discussed in this article within the web application developers, system administrators, network managers a
8、nd security personnel, the safety reference value, which reduce the dangers of SQL injection attacks, to reduce the security threats of the WEB system, and improve the web application quality of great significance.Keywords: injection attacks injection vulnerability vulnerability detection code to pa
9、rsing目 录 TOC o 1-3 h z u HYPERLINK l _Toc325613404 第一章 绪论 PAGEREF _Toc325613404 h 1 HYPERLINK l _Toc325613405 课题背景 PAGEREF _Toc325613405 h 1 HYPERLINK l _Toc325613406 课题研究意义 PAGEREF _Toc325613406 h 1 HYPERLINK l _Toc325613407 国内外研究现状 PAGEREF _Toc325613407 h 1 HYPERLINK l _Toc325613408 1.2 文本工作 PAGER
10、EF _Toc325613408 h 2 HYPERLINK l _Toc325613409 1.3 论文结构 PAGEREF _Toc325613409 h 3 HYPERLINK l _Toc325613410 第二章 Web工作原理与SQL数据库 PAGEREF _Toc325613410 h 4 HYPERLINK l _Toc325613411 2.1 理解Web应用的工作原理 PAGEREF _Toc325613411 h 4 HYPERLINK l _Toc325613412 2.1.1 什么是Web应用 PAGEREF _Toc325613412 h 4 HYPERLINK l
11、 _Toc325613413 2.1.2 Web系统通信方式 PAGEREF _Toc325613413 h 6 HYPERLINK l _Toc325613414 2.2 SQL数据库查询语言 PAGEREF _Toc325613414 h 7 HYPERLINK l _Toc325613415 2.2.1 常见SQL查询语言 PAGEREF _Toc325613415 h 8 HYPERLINK l _Toc325613416 查询结构中常用知识 PAGEREF _Toc325613416 h 9 HYPERLINK l _Toc325613417 本章小结 PAGEREF _Toc325
12、613417 h 9 HYPERLINK l _Toc325613418 第三章 SQL注入攻击测试 PAGEREF _Toc325613418 h 10 HYPERLINK l _Toc325613419 3.1 SQL注入攻击的基本概念 PAGEREF _Toc325613419 h 10 HYPERLINK l _Toc325613420 3.1.1 SQL注入攻击基本特点 PAGEREF _Toc325613420 h 10 HYPERLINK l _Toc325613421 3.2 SQL注入产生原因 PAGEREF _Toc325613421 h 11 HYPERLINK l _T
13、oc325613422 3.2.1 构造动态字符串 PAGEREF _Toc325613422 h 11 HYPERLINK l _Toc325613423 3.2.2 不安全的数据库配置 PAGEREF _Toc325613423 h 17 HYPERLINK l _Toc325613424 3.3 本章小结 PAGEREF _Toc325613424 h 18 HYPERLINK l _Toc325613425 第四章 SQL注入的实现 PAGEREF _Toc325613425 h 19 HYPERLINK l _Toc325613426 4.1 SQL注入流程 PAGEREF _Toc
14、325613426 h 19 HYPERLINK l _Toc325613427 4.2 寻找SQL注入 PAGEREF _Toc325613427 h 19 HYPERLINK l _Toc325613428 4.3 确认SQL注入及SQL语句构造方式 PAGEREF _Toc325613428 h 20 HYPERLINK l _Toc325613429 内联SQL注入与终止式SQL注入 PAGEREF _Toc325613429 h 20 HYPERLINK l _Toc325613430 4.4 SQL盲注 PAGEREF _Toc325613430 h 23 HYPERLINK l
15、_Toc325613431 使用非主流通道 PAGEREF _Toc325613431 h 24 HYPERLINK l _Toc325613432 4.5 利用操作系统 PAGEREF _Toc325613432 h 26 HYPERLINK l _Toc325613433 4.6 SQL注入实践 PAGEREF _Toc325613433 h 26 HYPERLINK l _Toc325613434 4.6.1 搭建SQL注入环境 PAGEREF _Toc325613434 h 27 HYPERLINK l _Toc325613435 4.7 本章小结 PAGEREF _Toc325613
16、435 h 29 HYPERLINK l _Toc325613436 第五章SQL注入攻击防御 PAGEREF _Toc325613436 h 30 HYPERLINK l _Toc325613437 5.1 代码层防御 PAGEREF _Toc325613437 h 30 HYPERLINK l _Toc325613438 5.1.1 使用参数化语句 PAGEREF _Toc325613438 h 30 HYPERLINK l _Toc325613439 5.1.2 输入验证 PAGEREF _Toc325613439 h 31 HYPERLINK l _Toc325613440 输出编码
17、PAGEREF _Toc325613440 h 33 HYPERLINK l _Toc325613441 规范化 PAGEREF _Toc325613441 h 33 HYPERLINK l _Toc325613442 通过设计来避免SQL注入 PAGEREF _Toc325613442 h 33 HYPERLINK l _Toc325613443 平台层防御 PAGEREF _Toc325613443 h 34 HYPERLINK l _Toc325613444 使用运行时保护 PAGEREF _Toc325613444 h 34 HYPERLINK l _Toc325613445 确保数据
18、库安全 PAGEREF _Toc325613445 h 34 HYPERLINK l _Toc325613446 最小化不必要信息的泄漏 PAGEREF _Toc325613446 h 35 HYPERLINK l _Toc325613447 提高Web服务器日志的冗余和时刻关注错误日志项目 PAGEREF _Toc325613447 h 36 HYPERLINK l _Toc325613448 操作系统的配置防范 PAGEREF _Toc325613448 h 36 HYPERLINK l _Toc325613449 本章小结 PAGEREF _Toc325613449 h 36 HYPER
19、LINK l _Toc325613450 第六章 总结与展望 PAGEREF _Toc325613450 h 37 HYPERLINK l _Toc325613451 6.1 总结 PAGEREF _Toc325613451 h 37 HYPERLINK l _Toc325613452 工作展望 PAGEREF _Toc325613452 h 37 HYPERLINK l _Toc325613453 成果申明 PAGEREF _Toc325613453 h 38 HYPERLINK l _Toc325613454 致谢 PAGEREF _Toc325613454 h 39 HYPERLINK
20、l _Toc325613455 参考文献: PAGEREF _Toc325613455 h 40第一章 绪论课题背景当今世界,网络技术与信息技术高速发展,Web应用程序具有界面统一,使用简单,易于维护,扩展性好,共享度高等优先。Web应用程序被应用到生活中的各个角落。但Web应用建立在广域网上,对安全的控制能力较弱。且开发人员的水平和经验参差不齐,相当一部分的程序员在编写代码时没有对用户的输入数据或者页面中所携带的信息进行必要的合法性判断。攻击者利用这个机会提交一段数据库查询代码,根据程序返回的结果,就可以或得一些数据库信息。SQL注入攻击存在于大多数访问了数据库且带有参数的动态网页中,SQL
21、注入攻击相当隐秘,表面上看与正常的Web访问没有区别,不易被发现,但是SQL注入攻击潜在的发生概率相对于其他Web攻击要高得多,危害面也更广。其主要危害包括:获取系统控制权、未经授权状态下操作数据库的数据、恶意篡改网页内容、私自添加账号或数据库使用者账号等。现在流行的数据库管理系统都有一些工具和功能组件,可以直接与操作系统及网络进行连接。当攻击者通过SQL注入攻击一个数据库系统,去危害就不只局限于存储在数据库中数据,攻击者还可以设法获得对DBMS所有的主机进行交互式访问,使其危害从数据库向操作系统、甚至整个网络蔓延。因此,我不仅应当将SQL注入攻击看作是一个对存储在数据库上数据的威胁,而应当看
22、作是对整个网络的威胁。国内对SQL注入攻击研究主要包括SQL注入攻击的原理和SQ注入攻击的关键技术。国内对SQL注入的检测与防范的研究主要集中于以下几个方面:提出各种各样的防范模型,如在客户端和服务器端进行检测的SQL注入攻击检测、防御、备案模型。在服务器端正式处理之前对提交数据进行合法性检查。屏蔽出错信息,这样攻击者就不能从错误中获取关于数据库的信息。对Web服务器进行安全设置,如去掉Web服务器上默认的一些危险命令。不用字符串连接建立SQL查询,用存储过程编写代码减少攻击。对包含敏感信息的数据加密,如在数据库中对加密密码存储等。国内对SQL注入漏洞检测的研究还很少,大多数还停留在攻击工具的
23、层面上,很少将注入工具用于网站安全检测。国外学者对SQL注入检测与防范领域一般分为两大类。漏洞识别(漏洞检测):这类防范主要研究识别应用程序中能导致SQL注入攻击的漏洞位置。攻击防御:这类方法可以进一步分为编码机制和防御机制。编码机制是一种很好实践的防范方法。SQL注入攻击产生的根本原因在于没有足够的验证机制,因而从编码方面防范攻击有很好的理论基础。编码机制有四种方法:第一,对输入类型检测,如果输入类型是数字型,那么限制为数值型,这样可以避免很多攻击,但该类型检测机制存在很大局限性。第二,对输入内容进行编码。因为攻击者可以使用变换后的字符作为输入,而在数据库中将其还原为正常字符。的三,正模式匹
24、配,通常可以写一段程序用于检测数据输入是否有不合法字符。第四,识别输入源。防御机制包括:黑盒测试法、静态代码检测器、结合静态和动态的分析方法、新查询开发范例、入侵检测系统、代理过滤、指令集随机化方法、动态检测方法等。1.2 文本工作本文详细搜集和总结了SQL注入技术原理特征和方法,分别对SQL注入攻击技术和防御技术进行了详细的总结和归纳,在此基础上对攻击和防御方法进行相关案例剖解,主要工作如下:完成了对Web环境的相关技术和理论研究本文研究了数据库管理系统以及Web应用程序方式的工作,利用一个典型的案例对SQL注入攻击进行分析,为SQL注入与防御的研究提供了坚实的理论基础。2. 给出了SQL注
25、入攻击的防御策略及方法 通过对SQL注入攻击所实施的各种技术,给出了有效的防范方法,应用层防御和系统成防御,替换或删除敏感字符/字符串,屏蔽出错信息和在服务器端正式处理之前对提交的数据进行合法性检查。1.3 论文结构本论文主体部分共分五章,下面分别介绍每张的主要内容:第一章:绪论,给出了论文选题背景及选题意义,介绍了课题研究背景、研究意义,国内外研究现状,并对该论文的结构作简要说明。第二章: Web工作原理与SQL数据库。介绍了Web工作原理、通信方式与应用架构,SQL查询语言的简单介绍。第三章:SQL注入攻击测试。SQL注入的定义、特征、危害、攻击的成因,为理解SQL注入的生成过程提供一些背
26、景知识第四章:SQL注入的实现。根据SQL注入攻击的步骤说明了一般的攻击技巧,并给出案例分析。第五章: SQL注入攻击防御。针对SQL注入攻击提出防御策略。第六章:概述了本论文所做的主要工作,并对今后的工作进行了展望。第二章 Web工作原理与SQL数据库本章从SQL注入攻击与web环境的环境依赖关系,介绍了数据库的基本知识和常见操作SQL数据库的SQL语言,web工作原理,。Web程序的通信方式,为理解SQL注入的生成过程提供一些背景知识。从Web应用层的代码介绍引发SQL注入的因数以及那些开发实践和行为会引发SQL注入。2.1 理解Web应用的工作原理2.1.1 什么是Web应用World
27、Wide Web简称为Web。Web是一个由文档组成的超大规模集合,其中通过链接相互联系。这些文档是由Web服务器提供,可以通过浏览器访问。Web是一组软件和协议的集合。Web应用时一种是用Web浏览器并通过Internet或内部往来访问的程序,Web应用程序通常需要Web浏览器,Web服务器,是基于客户机/服务器的配置而运行的,既B/S结构 。其常见的web应用架如下图2-1所示:图2-1 常见Web应用架构WEB应用程序的三层结构分别为:1表示层(PresentationTier)表示层为用户接口部分,是用户与系统之间交互信息的界面。该层以适当的形式显示中间层送的数据信息,这个功能要通过使
28、用相应的HTML标记来实现。同时,这一层还要负责获得用户录入的数据,完成对录入数据的校验,并将录入数据传送给业务逻辑层。2中间层(MiddleTier)也称业务逻辑层,由WEB服务器和应用程序服务器组成。功能层是应用的主体,也是整个分层模型中最为重要的一层。其主要功能是封装业务逻辑以驱动业务处理服务。这一层为用户界面层提供功能调用,同时它又调用数据访问层所提供的功能来访问数据库。该层接受到用户的请求后,首先需要执行相应的扩展应用程序与数据库进行连接,通过SQL等方式向数据库服务器提出数据处理申请,数据库服务器将数据处理的结果提交给WEB服务器,再由WEB服务器传送回客户端。3数据层(DataT
29、ier)数据层是整个分层体系的最底层,它主要用来实现与数据库的交互,即完成查询、插入、删除和修改数据库中数据的功能。数据访问层为业务逻辑层提供服务,根据业务逻辑层的要求从数据库中提取数据或者修改数据库中的数据,把运行结果提交给WEB服务器。如图2-2所示,当用户在客户端点击相应的链接发出页面请求的时候,WEB服务器接到这个请求并按照请求处理逻辑进行处理。如果用户的请求页面存在数据库中,处理逻辑会连接后台数据库,检索用户所需要的原始数据并将其加工成网页的形式,最后由WEB服务器软件将页面返回给用户。图2-2 Web应用三层架构 Web系统通信方式大部分的Web应用都是使用HTTP协议,少部分We
30、b应用特别使用HTPS协议。但我们是讨论Web环境下SQL注入攻击,所以只讨论HTTP协议。即超文本协议,HTTP包含两个阶段:请求阶段和响3应阶段。浏览器和Web服务器之间的每一次HTTP通信都包含两个部分:头部和主体。头部包含了与通信的有关消息,主体包含了通信的数据,当然前提是存在这样的数据。这里我们只讨论与Web应用SQL注入攻击常见的HTTP方法:GET、POST。它们各自的特点如下:GET请求GET请求是请求服务器的HTTP方法,使用该方法时,信息显示在URL中。通常,Web浏览器创建GET请求,发送给Web服务器,然后再浏览器中呈现结果。GET请求对用户是透明的,但是发送给Web服
31、务器的GET请求格式如下:User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:.19) Gecko/20081216 Ubuntu/8.04 (hardy) Firefox/.19Accept: text/xml,application/xml,application/xhtml+xml, Accept-Encoding: gzip,deflateKeep-Alive: 300Proxy-Connection: keep-alive该请求在URL中发送参数,格式如下:?parameter1=value1&patameter2=val
32、ue2在上述示例中包含三个参数:text、cat和num。远程应用将检索这些参数值,将他们用于实现设计好的目的。对于GET请求来说,只需在浏览器的导航栏中稍加修改即可操纵这些参数。POST请求POST请求是一种用于向Web服务器发送信息的HTTP方法。服务器执行的操作取决于目标URL。在浏览器中填写表单并单击Submit按钮时通常使用该方法。下面的例子给出了浏览器发送给远程Web服务器的内容:PUser-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:.19) Gecko/20081216 Ubuntu/8.04 (hardy) Fire
33、fox/.19Accept: text/xml,application/xml,application/xhtml+xml, Accept-Encoding: gzip,deflateKeep-Alive: 300Content-Type: application/x-www-form-urlencodedContent-Length: 129first=John&last=Doe&email=johndoe &phone=555123456&title=Mr&country=US&comments=I%20would%20like%20to%20request%20information这里
34、发送给Web服务器的值与GET请求的格式相同。不过现在这些值位于请求的底部。2.2 SQL数据库查询语言客户端与WEB服务器之间通过Internet,使用HTTP协议进行请求与应答。在WEB应用程序SQL注入攻击中,被攻击的对象往往是后台数据库,理解SQ数据库对于理解SQL注入攻击与防御使至关重要。SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有
35、的数据库均支持SQL。 常见SQL查询语言1. 创建数据表:Create table tablename(field type(size) not null ,field type(size) not null primary key(field)Table:新建表的名称,Field:用于指定在新表中创建的新字段的名称,每个表至少有一个字段,Type:用于指定新建字段的数据类型,Size:用于指定文本以及二进制字段的长度,Not null:指定该字段值不能为空,Primary key:设臵主键。SQL 数据查询:Select all|distinct exprASc_alias ,exprAS
36、c_alias from tableref,tableref where expr:要查询的列名,多个列名之间使用,分隔,Tableref:要查询的表,Search_condition:查询条件,c_alias:字段别名。INSERT语句:Insert into tablename (colname,colname) values (expr|NULL,expr|NULL)|Subquery当我们向指定的表中插入输入时只能使用下面两种结构,Values:一次只能向表中插入一条记录,Subquery:可向表中插入多条记录,就是可以欠套语句。UPDATA语句:Update tablename se
37、t colname=expr|NULL|(subquery)where search_conditionUpdate用来修改表中记录的属性值,支持子查询(subquery)结构。5. DELETE语句:Delete from tablename where search_conditionDelete只删除表中的记录,不删除表的结构。6. Drop table tablename Drop 删除表中的记录,连同表一起删除。查询结构中常用知识 where 子句中使用的逻辑运算符:NOT、AND、OR。2. where 子句中使用的操作符: = = 、Between 在某个取值之间、Like 匹配
38、某个模式、In 包含在某个值的列表中。 Like: % 代表零个或多个任意字符,_ 代表一个任意字符, 指定范围内的任意单个字符, 不在指定范围内的任意单个字符。 对查询结果进行排序:Order by、DESC 降序、ASC 升序。 对查询结果进行分组:使查询结果按照某一列或多列值进行分组:GROUP BY ALL GROUP_BY_EXPRESSION HAVING:对分组后的结果按条件进行筛选,只能在Group by子句后出现,不能单独使用,只能对分组计算的结果进行筛选,不能使用别名。合并查询UNION:UNION用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内
39、容,UNION查询默认不返回重复记录、UNION查询的表的字段必须一样、UNION查询的数据类型必须能兼容、 UNION查询结果只增加了行数而列数不变。本章节阐述Web系统的工作原理,通信方式,SQL数据库和SQL查询语言基本知识,这些知识是;理解SQL注入攻击的一些基本知识,对于网络系统管理人员,应用开发人员来说理解该知道对于Web应用安全又一个系统、清晰的框架认识。在以后的章节中我们在这知识的基础之上进一步讨论SQL注入的核心技术及防御措施。 第三章 SQL注入攻击测试 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没有什么区别 。如果Web开发人员无法确保输入参
40、数等收到的值传递给SQL查询(该查询在数据库服务器上执行)之前已经对其验证,那么通常就会出现SQL注入漏洞。3.1 SQL注入攻击的基本概念SQL注入(SQL Injection)攻击是目前网上最流行最热门的黑客脚本攻击方法之一,那什么是SQL注入式攻击呢?它是指黑客利用一些Web应用程序(论坛,留言本,文章发布系统)中某些疏于防范和用户可以提交或修改数据的页面,精心构造SQL语句,把特殊的SQL指令语句插入到系统实际SQL语句中并执行它,以获取用户密码等敏感信息,以及获取主机控制权限的攻击方法。但这并不局限于MSSQL数据库中,ACCESS、MySQL、ORACLE、SYBASE都可以进行S
41、QL Injection攻击。3.1.1 SQL注入攻击基本特点SQL注入攻击是目前网络攻击的主要手段之一,在一定程度上其安全风险高于缓冲区溢出漏洞,目前防火墙不能对SQL注入漏洞进行有效地防范。防火墙为了使合法用户运行网络应用程序访问服务器端数据,必须允许从Internet到Web服务器的正向连接,因此一旦网络应用程序有注入漏洞,攻击者就可以直接访问数据库进而甚至能够获得数据库所在的服务器的访问权,因此在某些情况下,SQL注入攻击的风险要高于所有其他漏洞。SQL注入攻击具有以下特点:广泛性。SQL注入攻击利用的是SQL语法,因此只要是利用SQL语法的Web应用程序如果未对输入的SQL语句做严
42、格的处理都会存在SQL注入漏洞,目前以Active/Java Server Pages、 Cold Fusion Management、 PHP、Perl等技术与SQL Server、Oracle、DB2、Sybase等数据库相结合的Web应用程序均发现存在SQL注入漏洞。技术难度不高。SQL注入技术公布后,网络上先后出现了多款SQL注入工具,例如教主的HDSI、NBSI、明小子的Domain等,利用这些工具软件可以轻易地对存在SQL注入的网站或者Web应用程序实施攻击,并最终获取其计算器的控制权。危害性大,SQL注入攻击成功后,轻者只是更改网站首页等数据,重者通过网络渗透等攻击技术,可以获取
43、公司或者企业机密数据信息,产生重大经济损失。3.2 SQL注入产生原因随着BS模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。一般来说,WEB系统的SQL注入攻击产生原因主要是以下几个方面: 构造动态字符串 构造动态字符串是一种编程技术,它允许开发人员在运行过程中动态构造SQL语句。开发人员可以使用动态SQL来创建通用、灵活的应用。动态SQL语句是在执行过程中构造的,它根
44、据不同的条件产生不同的SQL语句。当开发人员在运行过程中需要根据不同的查询标准来提取什么字段或根据不同条件来选择不同的查询表,动态构造SQL语句会非常有用,但也容易引发SQL注入漏洞。转义字符处理不当 将单引号()解析成代码与数据间的分界线:假定单引号外面的内容均是需要运行的代码,而单引号引起来的内容均是数据。因此只需要简单地在URL或Web页面(或应用)的字段中输入一个单引号,就能识别出Web站点是否会受到SQL注入攻击。下面是一个非常简单的应用源代码,他将用户输入直接传递给动态创建的SQL语句。/ 构造动态SQL语句$SQL=”select * from table where field
45、=$_GET“input”;/执行SQL语句$result=mysql_query($SQL);/检查从数据库中返回的行数$rowcount=mysql_num_rows($result);$row=1;While ($db_field=mysql_fetch_assco($result) If($row=$rowcount) Print db_field$row .”; $row+; 单引号字符作为该程序的输入,则可能出现下列错误中的一种。具体出现何种错误取决于很多环境因素,比如编程语言、使用的数据库以及采用的保护和防御技术。 Warning: mysql_fetch_assoc(): su
46、pplied argument is not a valid MySQL result Resource还有还可能会受到下列错误,这些错误提供了关于如何构造SQL语句的有用信息:You have an error in your SQL syntax: check the manual that corresponds to Your MySQL server version for the right syntax to users near “VALUE” 是因为单引号字符被解析成了字符串分隔符。运行执行的SQL查询在语法上存在错误(它包含多个字符串分隔符),所以数据库抛出异常。SQL数据
47、库将单引号字符看着特殊字符(字符串分隔符)。在SQL注入攻击中,攻击中使用该字符“转义”开发人员的查询以便构造自己的查询并加以执行。单引号字符并不是唯一的转义字符。比如在ORCAL中,空格()、双竖线(|)、逗号(,)、点号(.)、(*/)以及双引号字符(“)均有其特殊含义。类型处理不当在输入参数中,大多数开发者认为只需对输入进行验证,消除单引号字符就足够了。其实,单引号字符号被解析成字符串分隔符并作为代码和数据的分隔线,处理数据时,不需要使用单引号将数据引起来,否则数据会被当作字符串处理。下面是一个非常简单的应用源代码,它将用户输入直接传递给动态创建的SQL语句。/构造动态SQL语句$SQL
48、=”select * from table where filed=”$_GETuserid”;$result=mysql_query($SQL); /more statement / 如果将下列语句作为输入,那么攻击者便会读取/etc/passwd文件中的内容,该文件包含系统用户的属性和用户名,假设调用该函数的用户拥有FILE权限。 1 union all select load_file(/etc/passwd)攻击者的输入直接被解析成了SQL语法,所以攻击中没有必要使用单引号来转义查询。下面的代码更加清晰地说明了构造的SQL语句。Select * from table where use
49、rid=1 union all select load_file(/etc/passwd/)查询集处理不当有时候需要使用动态SQL语句对某些SQL语句对复杂的应用进行编码。因为在程序开发阶段可能还不知道要查询的表和字段。比如与大型数据库交互的应用,这些数据库在定期创建的表中存储数据。下面是一个非常简单的应用源代码,他根据用户输入直接传递给动态创建的SQL语句,该示例说明了上述问题。脚本使用应用产生的值作为输入,输入时应该表名加三个列名,之后显示员工信息。该程序允许用户选择他希望返回的数据。/构造动态SQL语句$SQL=”select $_GET“column1”, $_GET“column2”
50、, $_GET“column3“ from $_GET“table”;$result=mysql_query($SQL);$rowcount=mysql_num_rows($result);$row=1;While($db_field=mysql_fetch_assoc($result) If($row=$rowcount) Print $db_field$row .”; 如果攻击中操纵HTTP请求并使用users替换表名,使用user、password和supeer_priv字段替换应用产生的列名,那么它便可以显示系统中数据库用户名和口令。下面是他使用应用时构造的URL。?table=use
51、rs&column1=user&column2=password&column3=super_priv错误处理不当错误处理不会为Web站点开来很多安全方面的问题。最常见的问题是将详细的内部错误消息(如数据库转储、错误代码等)显示给用户或攻击者。这些消息会泄露从来都不应该显示的实现上的细节。这些细节会为攻击者提供与网站潜在缺陷相关的重要线索。例如,攻击者可使用详细的数据库错误消息来提取如何修改或构造注入来避开开发人员查询的信息,并得知如何操纵数据库以便取出附加数据的信息或者在某些情况下转储数据库中所有数据的信息。下面是一个简单的使用C#语言编写的ASP.NET应用示例,它使用Microsoft
52、SQL Server数据库服务器作为后台(因为该数据库提供了非常详细的错误消息)。当用户从下拉列表中选择一个用户标识时,脚本会动态产生并执行一条SQL语句:private void SelectedIndexChanged(object sender,System.EventArgs e) String SQL; SQL=”select * from table”; SQL+=”where ID=” +UserList.SelectedItem.Value +”; OleDbConnection con=new OleDbconnection(connectionString); OleDbC
53、ommand cmd=new OleDbCommand(SQL,con); OleDbDataReader reader; try Con.Open(); reader=cmd.ExecuteReader(); reader.Read(); lblResults.Text=”+ reader“LastName”; lblResults.Text+=”,” +reader“FirstName”+”; lblResults.Text+=”ID:”+reader“ID”+”;e(); catch(Execption err) lblResults.Text=”Error getting data.”
54、; lblResults.Text+=err.Message; Finally Con.Close(); 如果攻击者想要操纵HTTP请求并希望使用自己的SQL语句来替换预期的ID值,则可以使用信息量非常大的SQL错误消息来获取数据库中的值。例如,如果攻击者输入下列的值,那么执行SQL语句时会显示信息量非常大的SQL错误消息,其中包含了Web应用所使用的RDBMS版本: and 1 in (select version)- 多个提交处理应用开发人员倾向于围绕用户来设计应用,他们尽可能使用预期的处理流程来引导用户,认为用户将遵循他们已经设计好的逻辑顺序。例如,当用户已到达一系列表单中的第三的表单时
55、,他们会期望用户肯定完成了第一个和第二个表单。但实际上,借助直接的URL乱序来请求资源,能够非常容易地避开预期的数控流程。一下面的简单应用为例: /process form1 If($_GET“form”=”form1”) If(is_string($_GET“param”) If(strlen($_GET“param”) 200SELECT * FROM products WHERE active = 1字符串型:SELECT * FROM products WHERE name = BikeSELECT * FROM products WHERE published_date 01/01/
56、2009SELECT * FROM products WHERE published_time 01/01/2009 06:30:00内联SQL注入与终止式SQL注入内联注入式指向查询注入一些SQL代码后,原来的查询仍然或全部执行。下表给出了一个注入字符串列表和数字值内联注入的特征值: 表4-1 字符串内联注入的特征值测试字符串变种预期结果触发错误。如果成功,数据库将返回一个错误1 or 1=11) or (1=1永真条件。如果成功,将返回表中所有的行value or 1=2value) or (1=2空条件。如果成功,则返回与原来的值相同的结果1 and 1=21) and (1=2永假条件
57、,如果成功,则不返回表中的任何行1 or ab=a+b1) or (ab=a+bSQL Server串联。如果成功,则返回与永真条件相同的信息1 or ab=a b1) or (ab=a bMySQL串联。如果成功,则返回与永真条件相同的信息1 or ab=a|b1) or (ab=a|bOracle串联。如果成功。则返回与永真条件相同的信息其常用的SQL语句如下:SELECT *FROM administratorsWHERE (username = OR 1=1) AND (password = );表4-2 数字值内联注入的特征值测试字符串变种预期结果触发错误。如果成功,数据库将返回一个
58、错误1+13-1如果成功,则返回与操作相同的值value + 0如果成功,则返回与原来请求相同的值1 or 1=11) or (1=1永真条件。如果成功,将返回表中所有的行value or 1=2value) or (1=2空条件。如果成功,则返回与原来的值相同的结果1 and 1=21) and (1=2永假条件,如果成功,则不返回表中的任何行1 or ab= a+b1) or (ab = a+bSQL Server串联。如果成功,则返回与永真条件相同的信息1 or ab=a b1) or (ab=a bMySQL串联。如果成功,则返回与永真条件相同的信息1 or ab=a|b1) or (
59、ab=a|bOracle串联。如果成功。则返回与永真条件相同的信息其常有的SQL语句有:SELECT *FROM administratorsWHERE username = OR 1=1 OR 1=1 AND password = ;终止式SQL注入是在注入SQL代码时,通过注释剩下的查询来成功结束该语句,使剩下的SQL语句不会被执行。表4-3 数据库注释时常用的特征值测试字符串变种预期结果-1 and 1=2-1) and 1=2-注入一个数字参数,不返回任何行 and 1=2-) and 1=2-注入一个字符串参数,不返回任何行1/*comment*/将注入注释掉。如果成功,将不会对原请
60、求产生任何影响。其通常SQL语句如下:SELECT *FROM administratorsWHERE username = admin/* AND password = */ ;清除注释后的代码如下:SELECT *FROM administratorsWHERE username = admin ;4.4 SQL盲注SQL盲注是指在无法使用详细数据库错误消息或带内数据连接的情况下,利用数据库查询的输入审查漏洞从数据库提取信息或提取数据库查询相关信息的攻击技术,其寻找和确认SQL盲注一般要强制产生通用错误,注入带副作用的查询,最古老的技术室使用时序攻击来确认攻击SQL是否已执行,有时也可以执
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024篮球场施工合同范本
- 2024汽车运输合同范本简单最简单的运输合同范本
- 2024联合种植合同范文
- 2024年园林绿化施工合同样本
- 2024个人服务合同范文
- 2024年修订版:陈先生的婚前协议
- 2024店铺商品转让合同范本
- 2024年企业高管离婚协议书范例
- 2024年地产项目联合投资协议
- 2024年广告创意设计委托协议
- 租地种香蕉合同
- 旧市场提升改造方案
- 统编版 七年级上册(2024修订) 第四单元 13 纪念白求恩 课件
- 副总经理招聘面试题及回答建议(某大型国企)
- 期中测试卷(试题)-2024-2025学年统编版语文五年级上册
- 建筑工地台风过后复工复产工作方案
- 借款协议(父母借款给子女买房协议)(二篇)
- 税务师涉税服务相关法律真题2021年
- 2024年太仓市城市建设投资集团限公司公开招聘3人高频难、易错点500题模拟试题附带答案详解
- 外汇兑换居间劳务协议
- 琴行培训机构合同协议书
评论
0/150
提交评论