owenzhang的博客

XSS专题

字数统计: 1.3k阅读时长: 5 min
2018/05/24
loading

XSS专题

[TOC]

1 介绍

XSS(Cross-site scripting,跨站脚本)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。

2 成因

2.1 Html/JavaScript 是用户端可触达的解析性语言

Html/JavaScript 和 SQL 一样,都是用户端可触达的解析性语言。所以,用户可以改变最终的代码。(不同于 PHP 等,用户无法改变 PHP 的代码,只能改变数据)

用户可触达,所以用户就能改变代码来进行攻击。

2.2 浏览器如何解析 html/javaScript

  • http://coolshell.cn/articles/9666.html
  • http://taligarsiel.com/Projects/howbrowserswork1.htm

    自己的理解:浏览器接收到了后端返回的html原文件后,会生成一个DOM树,解析javaScript动作列表之类的,然后,javaScript 就在做自己的动作了。同时,浏览器会动态实时监控DOM树的变化,看是否有新的 javaScript 生成或旧的灭亡,有的话,就把其加入到动作列表或从列表中删除。

直接插入标签是不会执行的。要创建script元素才可以。
https://github.com/damoclesX/damoclesX.github.io/issues/17

结论:用户可控制的输入在前端形成了完整的 javaScript 语句,即可完成攻击。

3 分类

3.1 反射型(非持久性XSS)

反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。发出请求时,XSS代码出现在URL中,最后输入提交到服务器,服务器解析后在响应内容中出现这段XSS代码,最后浏览器解析执行。

1
2
3
4
5
6
7
8
9
10
简单流程:
用户访问带有XSS代码的URL请求
服务器端接收数据后处理,然后返回带有XSS代码的数据发送给浏览器
浏览器解析带有XSS代码的数据后,最终造成XSS漏洞
可能攻击流程:
• 用户aaa在网站www.xxx.com浏览网页
• 攻击者hacker发现www.xxx.com/xss.php存在反射型XSS漏洞,然后精心构造JavaScript代码,代码功能为盗取用户Cookie并发送到指定站点www.xxser.com
• hacker将带有反射型XSS漏洞的URL通过站内信发给aaa,站内信为一些诱惑信息,目的是使用户aaa点击
• 假设用户aaa点击了带有XSS漏洞的URL,则aaa的Cookie将被发送到www.xxser.com
• hacker获取aaa的Cookie后可以以aaa的身份登陆www.xxx.com,从而得到aaa的敏感信息

3.2 存储型(持久性XSS)

存储型XSS又被称为持久性XSS,它是最危险的一种跨站脚本,相比反射型XSS和DOM型XSS具有更高的隐蔽性,所以危害更大,因为它不需要用户手动触发。 允许用户存储数据的web程序都可能存在存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS,其中最典型的例子就是留言板。

1
2
3
4
5
6
7
8
9
10
11
12
13
14

测试技巧:
• 首先确定输入点和输出点,比如留言,
如:<input type="text" name="content" value="<script>alert(/xss/)</script>" />
• 确定输出点后根据相应的标签构造HTML代码来闭合,如:" /><script>alert(1)</script><",最终在html中为:
<input type="text" name="content" value="" /><script>alert(1)</script><"" />
测试步骤:
• 添加正常留言,用firebug快速查找显示标签,若显示区域不在html属性内则可以直接使用XSS代码注入
• 若不能得知内容输出的位置,可以使用模糊测试方案,XSS代码如下:
a. <script>alert(document.cookie)</script> //普通注入
b. " /><script>alert(document.cookie)</script> //闭合标签注入
c. </textarea>'"><script>alert(document.cookie)</script> //闭合标签注入


3.3 DOM 型

DOM型就完全与后端无关,是前端的事情。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<html>
<head>
<title>Welcome!</title>
</head>
<body>
<p>Hi</p>
<script>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</script>
</body>
</html>


http://www.test.com/welcome.html?name=lihua

http://www.test.com/welcome.html?name=<script>alert(document.cookie)</script>


4 防护策略

4.1 危害

JavaScript可以用来获取用户Cookie、改变页面内容、URL转跳,那么存在XSS漏洞的网站,就可以盗取用户Cookie、黑掉页面、导航到恶意网站,而攻击者仅仅需要向页面中注入JavaScript代码。

  • 盗取管理员Cookie
  • XSS Worm
  • 挂马(水坑攻击)
  • 键盘记录(有局限性)
  • 利用网站重定向
  • 修改网页内容
  • 等等

5 攻击策略

6 参考链接

CATALOG
  1. 1. XSS专题
    1. 1.1. 1 介绍
    2. 1.2. 2 成因
      1. 1.2.1. 2.1 Html/JavaScript 是用户端可触达的解析性语言
      2. 1.2.2. 2.2 浏览器如何解析 html/javaScript
    3. 1.3. 3 分类
      1. 1.3.1. 3.1 反射型(非持久性XSS)
      2. 1.3.2. 3.2 存储型(持久性XSS)
      3. 1.3.3. 3.3 DOM 型
    4. 1.4. 4 防护策略
      1. 1.4.1. 4.1 危害
    5. 1.5. 5 攻击策略
    6. 1.6. 6 参考链接