//www.loveshell.jpg"width=100onerror=alert("载入图片错误!
")>
很多的程序最终都是将用户的输入转换成这种形式的。
可以看到<>是告诉浏览器这是一个Html标记,img是这个Html标记的名称,src是这个标记的第一个属性,=后面是这个属性的值,后面的width是第二个属性,onerror是标记的事件属性。
大家可以看到,一个Html标记是包括很多元素的,并不是传统意义上的只有输入<>才会注入Html,事实上只要你的输入处在Html标签内,产生了新的元素或者属性,就实现了跨站脚本攻击!
实际上大多数隐秘的跨站脚本攻击是不需要<>的,因为现在的Ubb标签已经让你处在了Html标记之内。
其本质就是用户超越了他所处的标签,也就是数据和代码的混淆,对付这种混淆的办法就是限制监牢,让用户在一个安全的空间内活动,这通过上面的分析大家也可能已经知道,只要在过滤了<>这两个人人都会去杀的字符之后就可以把用户的输入在输出的时候放到""之间,现在的一般的程序都是这样做的,譬如将会转化成这是个好的安全习惯,然后呢?
就要让用户的输入处在安全的领域里了,这可以通过过滤用户输入里""实现,但是不要忘记了,这个标签本身也是不安全的,过滤掉空格和tab键就不用担心关键字被拆分饶过了,然后就是用文章中提到的办法过滤掉script关键字,最后就是防止用户通过这样的形式饶过检查,转换掉&吧!
SQL注入
SQLInjection,中文名称为“SQL注射”是一种数据库攻击手段,也是WEB应用程序漏洞存在的一种表现形式,它的实际意义就是利用某些数据库的外部接口把用户数据插入到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。
SQLInjection的主要形式是,直接将代码插入与SQL命令串联并执行的用户输入变量中,间接的将恶意代码注入要在表中存储或作为元数据存储的字符串,在存储的字符串随后串连到一个动态SQL命令中时,执行该恶意代码。
基本的攻击是提前终止文本字符串,然后追加一个新的命令。
由于插入的命令可能在执行前追加其他字符串,因此攻击者将用注释标记“--”来中止注入的字符串。
执行时,此后的指令将被忽略.
SQLInjection攻击技术就其本质而言,它利用的工具是SQL的语法,针对的是应用程序开发者编程中的漏洞,当攻击者能操作数据,向应用程序中插入一些SQL语句时,SQLInjection攻击就发生了。
实际上,SQLInjection攻击是存在于常见的多连接的应用程序中的一种漏洞,攻击者通过在应用程序预先定义好的查询语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的任意查询。
这类应用程序一般是WebApplication,它允许用户输入查询条件,并将查询条件嵌入SQL语句中,提交到数据库中执行。
通过构造畸形SQL语句攻击者能够获取额外的信息数据。
就风险而言,SQLInjection攻击也是位居前列,和缓冲区溢出漏洞相比,其优势在于能够轻易的绕过防火墙直接访问数据库,甚至能够获得数据库所在的服务器的访问权限。
在某些环境下,SQLInjection漏洞的风险要高过其他所有的漏洞。
SQLInjection攻击利用的是SQL语法,这使得这种攻击具有广泛性。
SQL注入过程:
如上图所示,SQL注入攻击过程分为五个步骤:
第一步:
判断Web环境是否可以SQL注入。
如果URL仅是对网页的访问,不存在SQL注入问题,如:
第二步:
寻找SQL注入点。
完成上一步的片断后,就要寻找可利用的注入漏洞,通过输入一些特殊语句,可以根据浏览器返回信息,判断数据库类型,从而构建数据库查询语句找到注入点。
第三步:
猜解用户名和密码。
数据库中存放的表名、字段名都是有规律可言的。
通过构建特殊数据库语句在数据库中依次查找表名、字段名、用户名和密码的长度,以及内容。
这个猜测过程可以通过网上大量注入工具快速实现,并借助破解网站轻易破译用户密码。
第四步:
寻找WEB管理后台入口。
通常WEB后台管理的界面不面向普通用户
开放,要寻找到后台的登陆路径,可以利用扫描工具快速搜索到可能的登陆地址,依次进行尝试,就可以试出管理台的入口地址。
第五步:
入侵和破坏。
成功登陆后台管理后,接下来就可以任意进行破坏行为,如篡改网页、上传木马、修改、泄漏用户信息等,并进一步入侵数据库服务器。
SQL注入攻击的特点:
变种极多,有经验的攻击者会手动调整攻击参数,致使攻击数据的变种是不可枚举的,这导致传统的特征匹配检测方法仅能识别相当少的攻击,难以防范。
攻击过程简单,目前互联网上流行众多的SQL注入攻击工具,攻击者借助这些工具可很快对目标WEB系统实施攻击和破坏。
危害大,由于WEB编程语言自身的缺陷以及具有安全编程能力的开发人员少之又少,大多数WEB业务系统均具有被SQL注入攻击的可能。
而攻击者一旦攻击成功,可以对控制整个WEB业务系统,对数据做任意的修改,破坏力达到及至。
根据CNNVD调查,我们再来看看漏洞实例。
1.AdobeFlashPlayerCVE-2012-0779对象类型混淆远程代码执行漏洞
AdobeFlashPlayer是一款Flash文件处理程序。
Windows,Macintosh和Linux平台下的AdobeFlashPlayer11.2.202.233和之前版本,Android4.x下AdobeFlashPlayer11.1.115.7及之前版本,Android3.x和2.x下的AdobeFlashPlayer11.1.111.8及之前版本存在一个对象混淆引起的严重漏洞。
这个漏洞可导致应用程序崩溃或可能允许攻击者完全控制受影响系统。
2.MicrosoftOffice缓冲区溢出漏洞
MicrosoftOffice是微软发布的非常流行的办公软件套件。
OfficeGDI+库处理Office文档中嵌入的特制EMF图像的验证方式中存在一个远程执行代码漏洞。
如果用户打开特制的Office文档,该漏洞可能允许远程执行代码。
攻击者利用此漏洞可完全控制受影响的系统,安装程序,查看、更改或删除数据;或者创建拥有完全用户权限的新帐户。
具有管理用户权限的用户相比拥有较低系统用户权限的用户受到的影响要小。
3.GoogleChromefloats处理释放后使用漏洞
GoogleChrome是一款流行的WEB浏览器。
GoogleChromefloats处理存在释放后使用错误,攻击者通过构建恶意WEB页,诱使用户解析,可以应用程序上下文执行任意代码。
4.AppleQuickTime缓冲区溢出漏洞
AppleQuickTime是APPLE公司的媒体播放器软件,支持多种媒体格式。
基于Windows的AppleQuickTime7.7.2之前版本在处理特制文件的实现上存在多个安全漏洞,远程攻击者可利用该漏洞借助一个文件的特制路径名,执行任意代码或导致拒绝服务(应用程序崩溃)。
5.SonyVAIOWirelessManagerActiveX控件'WifiMan.dll'缓冲区溢出漏洞
SonyVAIOWirelessManager是索尼笔记本上安装的无线管理程序。
SonyVAIOWirelessManagerActiveX控件存在缓冲区溢出,攻击者可以利用漏洞以应用程序上下文执行任意代码。
漏洞是由于WifiMan.dll库中的SetTmpProfileOption()和ConnectToNetwork()方法没有正确检查字符串参数长度引起的,攻击者可以构建恶意WEB页,诱使用户解析来触发。
二.漏洞危害
现今,信息系统漏洞不仅威胁到我们的日常生活,也使企业组织,乃至整个国家的信息系统受到一定的损害。
跨站脚本攻击漏洞的典型危害:
1.获取其他用户Cookie中的敏感数据
2.屏蔽页面特定信息
3.伪造页面信息
4.拒绝服务攻击
5.突破外网内网不同安全设置
6.与其它漏洞结合,修改系统设置,查看系统文件,执行系统命令等
7.其它
一般来说,上面的危害还经常伴随着页面变形的情况。
而所谓跨站脚本执行漏洞,也就是通过别人的网站达到攻击的效果,也就是说,这种攻击能在一定程度上隐藏身份。
SQL注入攻击漏洞的典型危害:
1.XX状况下操作数据库中的数据
2.恶意篡改网页内容
3.私自添加系统帐号或者是数据库使用者帐号
4.网页挂木马
三.漏洞产生原因分析
所以,对信息系统漏洞进行完整分析总结,并制定下一步修复策略已是刻不容缓的任务。
首先,我们先来简单看下,信息系统漏洞的原因:
下面我们再根据不同的漏洞分析其具体原因:
1网络协议漏洞
TCP/IP协议组作为目前使用最为广泛的网络互连协议之一。
其在设计时是将其设置于可信的环境之下的。
这一协议只是将网络的互联性和开放性作为首要考虑因素,却没有过多的考虑安全性的问题。
从而造成TCP/IP协议组本身的不安全性,进而导致一系列基于此协议的网络服务的不安全性。
.2操作系统漏洞
计算机操作系统作为一个统一的用户交流平台,在给用户提供写实的便利的同时,其系统需要全方位的支持多种功能应用,因此其功能性提高的同时,漏洞也随之增加,从而遭受网络攻击的几率也越来越大。
操作系统的安全漏洞主要有四种:
输入输出的非法访问;访问控制的混乱;操作系统陷门以及不完全的中介。
在输入输出的非法访问环节中,通过操作系统中的公共系统缓冲区,由于该缓冲区任何用户都可以搜索到,因此容易造成用户泄露认证数据、口令。
在访问控制的混乱这一漏洞中,编程人员在设计操作系统时,如不能正确处理资源共享与隔离保护的矛盾,就容易导致安全问题的产生。
操作系统陷门这一安全漏洞主要体现在在安装其他公司的软件时未受严密监控和必要的认证限制。
在不安全中介这一安全漏洞的产生主要表现在一个安全的操作系统需建造安全模型以及不同的实施办法。
此外,隔离、最小特权及环结构等设计方法也应得到采用。
3数据库安全漏洞
数据库系统作为一种应用程序,其功能主要在于防止数据受到物理性的破坏而导致对系统永久性的损坏。
因此,数据库一般采取定期备份的办法,用以对数据文件进行保存。
数据库系统一般带有防火墙和网络身份验证的安全性保护,数 据库一般包括内置的安全功能,如数据加密。
在使用数据库时,盲目信任用户输入造成了许多安全问题。
用户输入的主要来源是HTML表单中提交的参数,在使用数据库时,如果用户不能严格地验证这些参数的合法性,容易造成计算机病毒的传播。
另外人为性操作失误以及XX而非法进入数据库极容易造成对数据库产生破坏和服务器的安全问题。
4安全策略漏洞
在一些网络系统中往往忽略了安全策略的制定,从而导致即便采取了一些网络安全措施,却由于系统的安全配置的不合理使得安全机制无法发挥作用。
由于在计算机系统中各项服务的正常开展依赖于响应端口的开放功能,因此,端口的开放则给网络攻击带来了可乘之机。
如对基于开放服务的流入数据攻击,软件缺陷攻击等等。
而针对这些攻击,传统的防火墙技术已不能发挥有效的防攻击功能。
5.跨站脚本攻击漏洞
主要是因为CGI程序没有对用户提交的变量中的HTML代码进行过滤或转换。
6.SQL注入漏洞
当程序中的变量处理不当,没有对用户提交的数据类型进行校验,编写不安全的代码,构造非法的SQL语句或字符串,都可能产生这个漏洞。
例如Web系统有一个login页面,这个login页面控制着用户是否有权访问,要求用户输入一个用户名和口令,连接数据库的语句为:
“select*fromuserswhereusername='username'andpassword='password'”
攻击者输入用户名为aaor1=1口令为1234or1=1之类的内容。
我们可以看出实际上攻击者并不知道真正的用户名、口令,该内容提交给服务器之后,服务器执行攻击者构造出的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:
“select*fromuserswhereusername='aa'or1=1andpassword='1234'or1=1”;
服务器执行查询或存储过程,将用户输入的身份信息和数据库users表中真实的身份信息进行核对,由于SQL命令实际上已被修改,存在永远成立的1=1条件,因此已经不能真正验证用户身份,所以系统会错误地授权攻击者访问。
信息系统漏洞是各种安全威胁的主要根源之一,安全漏洞的大量出现和加速增长使网络安全总体形势趋于严峻,深入分析和研究安全漏洞对保障计算机系统与网络安全具有重要意义。
为了防护信息系统漏洞并提高安全产品的互操作性,国际上也制定了很多安全漏洞相关标准和计划。
但信息系统漏洞分析始终是一条漫长而遥远的道路,需要我们不断的对其进行更新分析。