SQL注入攻击和其防御策略研究

SQL注入攻击和其防御策略研究

ID:46285047

大小:77.00 KB

页数:9页

时间:2019-11-22

SQL注入攻击和其防御策略研究_第1页
SQL注入攻击和其防御策略研究_第2页
SQL注入攻击和其防御策略研究_第3页
SQL注入攻击和其防御策略研究_第4页
SQL注入攻击和其防御策略研究_第5页
资源描述:

《SQL注入攻击和其防御策略研究》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、SQL注入攻击和其防御策略研究摘要:随着互联网Web应用的飞速发展,黑客攻击的手段也在不断翻新,各种新的攻击技术层出不穷。SQL注入攻击是黑客对Web应用进行攻击的常用手段之一。以ASP和SQLServer为例详细阐述了SQL注入攻击的基本原理和过程,并从Web应用生命周期的各个环节出发,综合探讨防御SQL注入攻击的有效方法和策略。关键词:SQL注入;参数化查询;渗透测试;Web应用防火墙中图分类号:TP393文献标识码:A文章编号:1009-3044(2013)05-1000-02随着互联网Web应用的飞速发展,

2、各类Web网站大量涌现。在这种互联性和开放性坏境下,各种Web应用系统的复杂性和多样性导致了系统漏洞层出不穷,黑客入侵和篡改网站的安全事件时有发生。SQL注入作为直接威胁Web应用的最常见的网络攻击手段之一,一直受到网站开发人员和管理人员的关注。如何有效防御SQL注入攻击是近年来人们讨论的热点问题。SQL注入是针对ASP、PHP、JSP等脚本建站语言的一种入侵手段,理论上它对所有基于SQL语言标准的数据库软件包括SQLServer>Oracle>MySQL、Access等都是有效的。该文以ASP和SQLServer

3、为例阐述SQL注入攻击的基本原理和过程,并从Web应用生命周期的各个环节深入探讨防御SQL注入攻击的有效方法和策略。1SQL注入攻击的原理和过程所谓SQL注入攻击[1],就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容被直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。SQL注入过程中,攻击者通过从客户端提交构造巧妙的SQL代码,收集服务器返回的结果信息,从而获取想要得到的资料并

4、实施攻击。下面以HTTP://xxx.xxx.xxx/abc.asp?id=25作为测试URL讨论SQL注入攻击的一般过程。1)检测是否有注入漏洞。最简单的方法就是在测试URL的末尾附加一个单引号,提交页面请求后查看服务器的响应情况。如果返回错误信息,则证明程序没有对单引号进行过滤,有可能存在注入漏洞。当然,以上方法对那些实现单引号过滤的应用程序不起作用,此时可以使用下面方法进行检测。在测试URL的后面分别加上“and1=1”和“and1=2”两种注入参数并提交请求,若前者测试的返回结果为正常页面,而后者测试的返回

5、结果为错误信息,则说明可以进行注入。其原理在于若后台程序存在注入漏洞,提交第一种参数则会构成SQL语句"select*from表名whereid二25and1=1”,由于逻辑正确服务器将返回正常页面;提交第二种参数则会构成SQL语句"select*from表名whereid二25and1=2”,由于逻辑错误服务器会返回错误信息。上例只是注入参数为数字型的检测方法,实际应用时还可以使用字符型和搜索型参数进行检测。2)判断数据库类型。一般与ASP最常搭配的数据库是Access和SQLServer,判断时可以从Acces

6、s和SQLServer的区别入手:Access的系统表是msysobjects,且在Web环境下没有访问权限;而SQLServer的系统表是sysobjects,在Web环境下可以被访问。由此,可在测试URL的尾部注入参数uand(selectcount(*)fromsysobjects)>0”并提交,如果返回正常页面,基本上可以断定是SQLServer数据库;如果返回错误信息,则可以断定是Access数据库。3)破解数据库名。在注入点之后附加参数“and(selectcount(*)frommaster.dbo.

7、sysdatabaseswherename>landdbid=6)0"并提交,由于name字段是一个字符型字段,因此abc.asp工作异常,通过返回的错误信息可得到第一个数据库名。同理将dbid的值分别改成7、8、9……,就可得到所有数据库名。除此之外也可以通过注入参数uanddb_name()>0来获取连接数据库的名称。以下假设得到的数据库名是TestDBo2)猜解用户名表的名称。Web用户的账号一般存放在一张表中,为了获取数据库的访问权限,需要分析可能存放用户名与密码的表的名称。常用的方法有猜解法和读取法:猜解

8、法根据个人的经验猜表名,通过在注入点后附加参数"and(selectcount(*)fromTestDB.dbo.表名)>0"实现;读取法通过构造注入参数访问SQLServer的系统表sysobjects来实现。以下假设此表名为admino3)猜解用户名字段及密码字段的名称。在注入点之后附加参数“and(selecttop1col_name(object_i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。