SQL注入攻击及其防御策略分析.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE 1 SQL注入攻击及其防御策略分析   摘要:随着互联网Web应用的飞速发展,黑客攻击的手段也在不断翻新,各种新的攻击技术层出不穷。SQL注入攻击是黑客对Web应用进行攻击的常用手段之一。以ASP和SQLServer为例详细阐述了SQL注入攻击的基本原理和过程,并从Web应用生命周期的各个环节出发,综合探讨防御SQL注入攻击的有效方法和策略。   关键词:SQL注入;参数化查询;渗透测试;Web应用防火墙   中图分类号:TP393文献标识码:A文章编号:1009-3044(2013)05-1000-02   随着互联网Web应用的飞速发展,各类Web网站大量涌现。在这种互联性和开放性坏境下,各种Web应用系统的复杂性和多样性导致了系统漏洞层出不穷,黑客入侵和篡改网站的安全事件时有发生。SQL注入作为直接威胁Web应用的最常见的网络攻击手段之一,一直受到网站开发人员和管理人员的关注。如何有效防御SQL注入攻击是近年来人们讨论的热点问题。   SQL注入是针对ASP、PHP、JSP等脚本建站语言的一种入侵手段,理论上它对所有基于SQL语言标准的数据库软件包括SQLServer、Oracle、MySQL、Access等都是有效的。该文以ASP和SQLServer为例阐述SQL注入攻击的基本原理和过程,并从Web应用生命周期的各个环节深入探讨防御SQL注入攻击的有效方法和策略。   1SQL注入攻击的原理和过程   所谓SQL注入攻击[1],就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容被直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。   SQL注入过程中,攻击者通过从客户端提交构造巧妙的SQL代码,收集服务器返回的结果信息,从而获取想要得到的资料并实施攻击。下面以HTTP://xxx.xxx.xxx/abc.asp?id=25作为测试URL讨论SQL注入攻击的一般过程。   1)检测是否有注入漏洞。最简单的方法就是在测试URL的末尾附加一个单引号,提交页面请求后查看服务器的响应情况。如果返回错误信息,则证明程序没有对单引号进行过滤,有可能存在注入漏洞。当然,以上方法对那些实现单引号过滤的应用程序不起作用,此时可以使用下面方法进行检测。   在测试URL的后面分别加上“and1=1”和“and1=2”两种注入参数并提交请求,若前者测试的返回结果为正常页面,而后者测试的返回结果为错误信息,则说明可以进行注入。其原理在于若后台程序存在注入漏洞,提交第一种参数则会构成SQL语句“select*from表名whereid=25and1=1”,由于逻辑正确服务器将返回正常页面;提交第二种参数则会构成SQL语句“select*from表名whereid=25and1=2”,由于逻辑错误服务器会返回错误信息。上例只是注入参数为数字型的检测方法,实际应用时还可以使用字符型和搜索型参数进行检测。   2)判断数据库类型。一般与ASP最常搭配的数据库是Access和SQLServer,判断时可以从Access和SQLServer的区别入手:Access的系统表是msysobjects,且在Web环境下没有访问权限;而SQLServer的系统表是sysobjects,在Web环境下可以被访问。由此,可在测试URL的尾部注入参数“and(selectcount(*)fromsysobjects)0”并提交,如果返回正常页面,基本上可以断定是SQLServer数据库;如果返回错误信息,则可以断定是Access数据库。   3)破解数据库名。在注入点之后附加参数“and(selectcount(*)frommaster.dbo.sysdatabaseswherename1anddbid=6)0”并提交,由于name字段是一个字符型字段,因此abc.asp工作异常,通过返回的错误信息可得到第一个数据库名。同理将dbid的值分别改成7、8、9……,就可得到所有数据库名。除此之外也可以通过注入参数“anddb_name()0”来获取连接数据库的名称。以下假设得到的数据库名是TestDB。   4)猜解用户名表的名称。Web用户的账号一般存放在一张表中,为了获取数据库的访问权限,需要分析可能存放用户名与密码的表的名称。常用的方法有猜解法和读取法:猜解法根据个人的经验猜表名,通过在注入点后附加参数“and(selectcount(*)fromTestDB.dbo.表名)0”实现;读取法通过构造注入参数访问SQLServer的系统表sysobjects来实现。以下假设此表名为admin。   5)猜解

文档评论(0)

yingzhiguo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档