第一章绪论
1.1研究背景与意义
自互联网诞生以来,就很大程度上对民众的生活产生了很大的影响,并且对于工作也提供了很大的便利。不过任何事物都存在两面性,在方面人们的同时,带给人们的困扰越来越多,猖獗地网络攻击使国家、社会、企业(单位)、个人损失愈发不可轻视。司空见惯的网络攻击,攻击手段日新月异且令人防不胜防。在互联网技术中web形式的应用占据着不可忽视的份量,在XX单位,电子商务,社交平台等互联网服务中大部分都会存在以web形式提供服务,攻击者针对web应用的攻击可以说是不间断的,其中SQL注入攻击尤为明显,该攻击方式具有很大的危害性,对互联网应用安全具有很大的威胁。
攻击者能够利用SQL注入攻击技术进行各种各样的恶意活动,导致合法权益被侵犯,资源被盗取盗用。后期衍生出一些防御手段,但防御手段更新速度无法与攻击者更新攻击技术跟进,网络安全问题日趋严重。作为web应用漏洞利用者—SQL注入攻击技术被攻击者利用来获取web应用的资源。这种困扰web应用管理者的攻击技术还时不时定期爆发,给web应用的管理者带来了极大的困扰,也给各受侵入web应用程序带了各种各样的损失,比如信誉受损、敏感信息被窃取、资源被占用等,给人们正常生活带来了极大的不安全性。因此针对此类网络攻击技术研究是极具意义的事情。
综上所述,通过对SQL注入攻击技术研究,可以掌握SQL注入攻击的原理、手段且方便了解和评估其危害。通过对SQL注入防范手段和模型的研究,了解和掌握业界一些比较成熟的防御手段和防御模型,通过对其了解、整理、归纳,就能根据具体情况独立设计符合满足自身需要或者针对大部分常用SQL注入攻击手段较为实用、健壮的通用防御系统。这些防御和检测系统能有效的检测和防御大部分针对XX企业单位和用户的SQL注入攻击。因此,这项研究对保护人们信息安全具有极大社会意义和研究。
1.2国内外研究现状
随着互联网的发展极大的便利了人们的工作生活,XX单位、企业基本上都在线上有开展业务,web应用得到了极大的推广。但针对web应用的攻击也越来越多,其中SQL注入攻击尤为常见且危害极大。随着SQL注入攻击愈发频繁,SQL注入攻击迅速成为国内外网络安全研究热点。SQL注入研究大致集中于SQL注入攻击工具的开发,和防SQL注入攻击系统的研究设计开发,
国内对于SQL注入研究主要集中于网络安全公司,这些网络安全公司(如360、绿盟等)对SQL注入研究主要体现于对SQL注入入侵检测系统的开发。
国外研究对SQL注入研究提出了大量实用防御措施,例如提出对程序终端的用户输入进行合法性检测、提出屏蔽访问数据库措施使得攻击者无法获取关于数据库的有效信息、提出对数据库敏感信息进行加密和权限访问,以及提出对组装SQL语句预分析方法等等。
1.3课题研究内容
本课题主要研究内容有:
1.31 SQL注入攻击原理和攻击过程
结构化查询语言(SQL)的本质为一个文本语言,主要是用于跟数据库产生交互的,因为部分数据库在执行查询操作的时候(针对于语句的),区别用户数据或者是系统查询代码功能缺失,数据库无法分清是用户数据还是查询语句。SQL注入攻击就是利用这一漏洞,将SQL查询语句当做用户数据或伪装成用户数据提交,使数据库执行该查询语句,从而获取用户的敏感信息,此外攻击者获取数据库相关信息后可进一步注入拿到用户数据库的控制权、带宽等资源。
1.32 SQL注入攻击防御手段和防御模型
本文在阐述SQL注入攻击防御手段和防御模型时重点阐述了SQL注入攻击的检测:基于特殊、敏感字符的检测和防范措施,SQL注入攻击防范基本策略有:检查变量数据类型和格式、过滤或转义危险字符、使用参数化的过滤性SQL语句、IIS服务器脚本错误消息的设置、、数据库信息加密安全、数据库用户权限的设置等以及阐述了一套简约的自动防范SQL注入攻击的模型
1.4论文结构
本文分为绪论、SQL注入攻击概述、SQL注入攻击防范概述、基于SQL注入攻击通用防注入系统的研究,总共分为5个部分。
第一章为绪论,这个部分的内容重点对此篇论文的研究目标、意义、课题选取原因、研究现状、以及章节分布等进行了详细的陈列;
第二章为SQL注入攻击的概述,该部分详细阐述了SQL注入攻击背景知识、SQL注入攻击特点及危害以及手段和其注入实现过程;
第三章为SQL注入攻击防范的概述,前一章详解阐述了SQL注入攻击的相关知识,在对SQL注入攻击有详细了解后,针对SQL注入攻击作出相应的防御,包括防御的手段和防御模型概述。
第四章为全文的总结与展望部分,针对本文的研究内容作出总结和提出了自己对SQL注入今后发展展望。
第二章SQL注入攻击概述
2.1 SQL注入攻击背景知识
2.11 SQL介绍
SQL的本质为一种结构化查询语言,它能够对程序进行设计,也能够对数据库进行查询。大多数情况下都能够对数据库展开储存、查询以及更新等操作,并且还能够对关系数据库系统进行有效的管理。SQL为一种编程语言,存在一定的特殊目的,属于高级的范畴,并且是非过程化的,它能够让用户可以对高层数据结构进行相关的操作,这主要是针对于它允许用户不了解数据存放方法和方式的情况下对数据进行操作。就理论层面而言,它存在不一样的底层结构,并且存在不一样的数据库系统,因此它们能够采取相同的SQL来对数据库系统展开有关的操作,1986年十月份,X权威机构进行了关于SQL的调整以及规范,并且将其设定成关系式数据库管理系统的标准语言(ANSI X3.135-1986),一年以后,它获得了国际标准组织对其的认可,发展成为了国际标准。但是不同类型通行的数据库系统在使用的阶段里都对其规范性展开了有效的完善以及编改。因此从本质而言,不一样数据库系统间存在的SQL未能全部地进行通用。
2.12 SQL注入攻击概念介绍
现在的应用开发的整体框架主要分为C/S(client/server,客户端/服务器模式)和B/S(Browser/Server,浏览器/服务器模式)架构,两者虽存在有居多区别,但两者模式可以总结为由表示层发出请求,经由应用层处理向数据层发出SQL请求,数据层处理请求后把处理后的结果反馈给应用层,应用层再应答给表示层。攻击者可以利用应用的漏洞,将一些恶意代码当做数据提交,或者伪装成数据绕过应用程序检测,最终在应用程序上执行恶意的SQL命令,获取到数据库中的一些敏感信息,再获取这些敏感信息后攻击者可进一步对数据库进行操作,最终完全拥有对数据库完全控制的权限。这就是SQL注入攻击(SQLinject attack)。
2.2 SQL注入攻击特点及危害
SQL作为网络安全常见威胁点之一,其具很多特点。
特点一、存在面广,SQL注入攻击是建立在SQL语言基础上的,理论上存在使用SQL语言的地方就有可能存在SQL注入漏洞,而现实情况也是基本如此。因为某些采取SQL语言的web应用程序并未能就输入的SQL语言展开了有效的解决、处理、以及审核,因此会导致SQL出现注入漏洞;即使有相当部分网站对输入的SQL语句进行过严格的处理,但也不能完全保证没SQL注入漏洞的存在。
特点二、技术难度低,几乎大部分的SQL注入资料都可以网上找到,包括学习文档、视频、SQL注入工具等,利用SQL注入工具很容易对一些防护力度低的web应用程序实施攻击。
特点三、危害大,当攻击者成功实施SQL注入后,可以获取相应数据库的敏感信息、对数据库进行改写等操作,对web应用相关用户、单位造成损失。
2.3 SQL注入攻击手段
2.31没有正确过滤转义字符
如果用户在进行输入后,未能就转义字符进行有效地处理(一般是指过滤),那么就很大程度上会导致上述注入式攻击行为的出现。假如攻击人员通过转义字符来提供存在较大现实意义的SQL语句,就很有可能会使得数据库能够得到终端的管理以及操作。比方说,下面的这行代码就会演示这种漏洞:"SELECT*FROM users WHERE name='"+userName+"';"这个种类代码有一个关键的设计初衷为:能够凭借数据表的分析,找到某些特定的数据,不过假如期望得到的数据被一个恶意用户伪造,那么该语句所执行的操作可能就会被用来获取数据库敏感数据进而获取多数据库操作的相关权限,比如,将上述数据变量(即username)设置为:a'or't'='t,这个时候原始语句产生了调整:SELECT*FROM users WHERE name='a'OR't'='t';如果这个种类的代码可以在某个认证阶段里被使用,如此就能够认可应用程序终端用户能够对某个科学的数据进行明确,因为该条件永远为真。
在一些服务器上,以SQL server为例,在理论上任何一个SQL语句都可以通过该类型的方式注入。
2.32 Incorrect type handling
当应用程序终端用户提供了一个非强类型字段或者没有实施强类型强制时就有可能发生该类型形式的攻击。假如程序员在SQL语句里采取了数字字段,而且未能对用户是否开展了科学的输入(即合法性)展开审查以及评判,那么就存在被攻击人员进行不科学利用的可能性。如:“SELECT*FROM data WHERE id=”+a_variable+“;”
假如某用户给出的字段不属于某个强类型的范畴,或者为能存在任何强制性措施,就会导致出现这类模式的攻击。如果在某个SQL语句里采取了特定的数字字段,假如程序员未能对这个用户进行合法性检查,即评判它是否是数字型,就能够导致此类攻击的出现。比如,如果某数字跟id有关联,那么它能够是某个字符串。假如为字符串,就能够不直接经过转义字符而展开相关的检测。如果我们对a_variable进行相关设置:1;DROP TABLE users就能够落实users表的删除功能了
2.33数据库服务器中的漏洞
部分数据库服务并不是十全十美的,例如MySQL服务器中mySQL_real_escape_string()也会存在一定的函数漏洞。这个种类的漏洞能够认可某个攻击人员依据不正确的字符编码来实现某个顺利的SQL注入式攻击。
2.34盲目SQL注入式攻击
假如某个应用程序特别易于受到攻击,不过却未能向攻击人员展示结果,这就也许会产生盲注。如果某个网页存在漏洞,那么它无法把所有的具体数据进行全面的显示,而是按照注入到合法语句中的逻辑语句执行结果来将不一样的内容进行表征。假如人们开展上述攻击需要特别多的人力以及物理,所以就应该给所有得到的字符进行优化,使其成为不同于以往的语句。但如果我们能确定漏洞具体位置就可以使用著名的SQLmap以及类似工具进行攻击,能够很大程度上增加攻击效率。
2.35条件响应
通过SQL注入式,能够让某个数据库不得不在普通应用程序屏幕上对某逻辑语句的大小进行计算,例如SELECT StuDetail FROM StuDetail WHERE StuDetaild=‘1234’AND 1=1,这回导致一个正常的返回页面,SELECT StuDetail FROM StuDetail WHERE StuDetaild=‘1234’AND 1=2二这可能会导致一个出错的页面,上述注入能够对如下观点进行阐述:盲目的SQL注入存在并不非没有希望,它能够让攻击更加易于出现。
2.36条件性差错
攻击人员按照其他表里的信息能够对某个语句的真假进行检验,攻击者能够借助不一样的情景来进行相应,如此得到他们想要的结果,然后根据结果进行下一步的注入操作。通过构造逻辑错误来判断应用程序是否具有注入点,攻击者使用SQL语句构造逻辑错误,如果数据库显示具体错误,那么可能就会泄露数据库相关信息,攻击者可以根据数据库反馈的错误,进一步测试获得数据库类型表明等敏感信息,进而获取数据库权限。
2.37时间延误
对于时间延误而言,它属于SQL注入,但是它不存在很大的科学性,较为盲目,按照所注入的逻辑,它能够使得SQL完成某个关于时间的延误语句,也能够完成某个长队列。攻击人员能够对页面加载所需要耗费的时间进行衡量,如此来判定注入的语句是正确的还是错误的。
2.4 SQL注入实现过程详细分析
手工注入:先判断是否存在SQL注入一般用and 1=1 and 1=2或者or 1=1和or1=2

第一个任务就是要对IP地址展开明确以及测试,假如这个地址属于QL注入IP的黑名单中,就不应该让其进行访问,而且要把这个IP继续增添到黑名单里;假如用户是第一次进行访问,就应该检测已经提交的字符,如果是非法的,那么就应该明确是否达到了固定的访问要求,假如满足了禁止访问的条件,就应该通过邮件形式来向高级管理人员进行汇报。这个模型很程度上能够避免试探攻击(存在很大的规模)。从本质而言,这个模型很大程度上被waf进行了运用。
本章小结
本章重点阐述了SQL注入攻击的检测:基于特殊、敏感字符的检测和防范措施,SQL注入攻击防范基本策略有:检查变量数据类型和格式、过滤或转义危险字符、使用参数化的过滤性SQL语句、IIS服务器脚本错误消息的设置、、数据库信息加密安全、数据库用户权限的设置等并且提出了一套简约的自动防范SQL注入攻击的模型。
第四章总结与展望
SQL注入攻击一直以来困扰着众多web应用,SQL注入就是网络安全的一个缩影,这种技术随着时代的发展而发展,手段处于不断变化之中,有着极强的生命力。稍不注意做防范就有可带来潜在和危害和损失,所以随着SQL注入技术的更新变化,我们的防注入系统也要更新升级,要能够防御住新型SQL注入,使我们的应用更加安全、一如既往的正常运行。
本文提出的防SQL注入模型理论上可以有效防止字符串持续攻击,在此也对该模型提出三方面展望
一、该模型的字符串匹配数据库需要不断扩展,如果人工扩展当然也可以,但很难做到及时高效。后期应该往智能化方面发展,利用机器学习智能添加匹配字符串。
二、随着匹配字符串库的扩展,匹配时必然花费时间,理论上肯定会造成延迟,后期要往探究如何降低延迟方面发展。
三、在IP黑名单中如何处理局域网中非入侵用户的访问还有待根据具体情况商榷。
下载提示:
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:写文章小能手,如若转载,请注明出处:https://www.447766.cn/chachong/12688.html,