“黑客”必学攻击之“跨站脚本攻击”
副标题[/!--empirenews.page--]
最近很多小伙伴们看了我的文章给我私信说能不能讲讲跨站脚本攻击技术,今天就以本篇文章详细讲解一下黑客常用的攻击手法"跨站脚本攻击"。 一、 什么是跨站脚本攻击? 官方定义:(Cross Site Scripting),为了不和(Cascading Style Sheets, )的缩写混淆,故将跨站脚本攻击简称为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。 通俗理解:XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。 二、 XSS攻击带来的危害 这种漏洞(XSS)攻击通常用于发动cookie窃取、恶意软件传播(蠕虫攻击),会话劫持,恶意重定向。在这种攻击中,攻击者将恶意JavaScript代码注入到网站页面中,这样"受害"者的浏览器就会执行攻击者编写的恶意脚本。这种漏洞容易找到,但很难修补。 具体危害如下:
三、xss产生根源和攻击条件 跨站点脚本漏洞的主要原因:是程序员对用户的信任,开发人员轻松地认为用户永远不会试图执行什么出格的事情,所以他们创建应用程序,却没有使用任何额外的代码来过滤用户输入以阻止任何恶意活动。另一个原因是,这种攻击有许多变体,用制造出一种行之有效的XSS过滤器是一件比较困难的事情。但是这只是相对的,对用户输入数据的"编码"和"过滤"在任何时候都是很重要的,我们必须采取一些针对性的手段对其进行防御。 实施XSS攻击需要具备两个条件:
看一下下面这个例子: 这段代码在旧版的IE8和IE8以下的版本都是可以被执行的,火狐也能执行代码,但火狐对其禁止访问DOM对象,所以在火狐下执行将会看到控制里抛出异常:document is not defined (document是没有定义的) 再来看一下面这段代码: 相信很多程序员都觉得这个代码很正常,其实这个代码就存在一个反射型的XSS攻击,假如输入下面的地址: 也许您会觉得把ValidateRequest设置为true或者保持默认值就能高枕无忧了,其实这种情况还可以输入下面的地址达到相同的攻击效果: http://www.xxx.com/?id=xx" onerror="this.onload()" onload="alert(/xss/)" x=" 四、XSS攻击的分类 XSS攻击可以分成两种类型:
非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。 持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。 也可以分成三类: 1. 反射型XSS攻击 又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。 简单例子: 正常发送消息:http://www.test.com/message.php?send=Hello,World! 接收者将会接收信息并显示Hello,Word 非正常发送消息:http://www.test.com/message.php?send= ! 接收者接收消息显示的时候将会弹出警告窗口 2. 存储型XSS攻击 又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大,因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。 简单例子: 从名字就可了解到存储型XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。例如留言板 留言板表单中的表单域:
正常操作: 用户是提交相应留言信息;将数据存储到数据库;其他用户访问留言板,应用去数据并显示。 非正常操作:
3. DOMBasedXSS(基于dom的跨站点脚本攻击) 基于DOM的XSS有时也称为type0XSS。当用户能够通过交互修改浏览器页面中的DOM(DocumentObjectModel)并显示在浏览器上时,就有可能产生这种漏洞,从效果上来说它也是反射型XSS。 通过修改页面的DOM节点形成的XSS,称之为DOMBasedXSS。 前提是易受攻击的网站有一个HTML页面采用不安全的方式从document.location 或document.URL 或 document.referrer获取数据(或者任何其他攻击者可以修改的对象)。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |