本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础、XSS基础、编码基础、XSS Payload、XSS攻击防御。
第一部分:漏洞攻防基础知识XSS属于漏洞攻防,我们要研究它就要了解这个领域的一些行话,这样才好沟通交流。同时我建立了一个简易的攻击模型用于XSS漏洞学习。
1. 漏洞术语
了解一些简单术语就好。
VUL
Vulnerability漏洞,指能对系统造成损坏或能借之攻击系统的Bug。
POC
Proof of Concept,漏洞证明;可以是可以证明漏洞存在的文字描述和截图,但更多的一般是证明漏洞存在的代码;一般不会破坏存在漏洞的系统。
EXP
exploit,漏洞利用;利用漏洞攻击系统的代码。
Payload
(有效攻击负载)是包含在你用于一次漏洞利用(exploit)中的攻击代码。
PWN
是一个黑客语法的俚语词 ,是指攻破设备或者系统。
0DAY漏洞和0DAY攻击
零日漏洞或零时差漏洞(Zero-dayexploit)通常是指还没有补丁的安全漏洞。
零日攻击或零时差攻击(Zero-dayattack)则是指利用这种漏洞进行的攻击。
零日漏洞不但是黑客的最爱,掌握多少零日漏洞也成为评价黑客技术水平的一个重要参数。
CVE漏洞编号
Common Vulnerabilities and Exposures,公共漏洞和暴露,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。
可以在https://cve.mitre.org/网站根据漏洞的CVE编号搜索该漏洞的介绍。也可以在中文社区上搜索关于漏洞的介绍
2. 漏洞攻击模型
1.png上图为一个简单的攻击模型。攻击就是将Payload通过注入点注入到执行点执行的过程。过程顺畅就表明这个漏洞被利用了。
第二部分:XSS基础知识基础知识看完,现在我们可以开始接触了解XSS基础了。XSS基础不好就不用研究了,大家没用共同语言。
1. 什么是XSS?
XSS全称Cross-site scripting,跨站脚本攻击。攻击者通过网站注入点注入恶意客户端可执行解析的Payload,当被攻击者访问网站时Payload通过客户端执行点执行来达到某些目的,比如获取用户权限、恶意传播、钓鱼等行为。
2. XSS的分类
不了解分类其实很难学好XSS,大家对XSS分类有很多误解,而且很多文章上都解释错的,这里我给出一个相对好的XSS分类。
2.1 按照Payload来源划分
存储型XSS
Payload永久存在服务器上,所以也叫永久型XSS,当浏览器请求数据时,包含Payload的数据从服务器上传回并执行。
过程如图:
2.png存储型XSS例子:
发表帖子内容包含Payload->存入数据库->被攻击者访问包含该帖子的页面Payload被执行
反射型XSS
又称非持久型XSS,第一种情况:Payload来源在客户端然后在客户端直接执行。第二种情况:客户端传给服务端的临时数据,直接回显到客户端执行。
过程如图:
3.png反射型XSS例子 :
传播一个链接,这个链接参数中包含Payload->被攻击者访问这个链接Payload在客户端被执行。
在客户端搜索框输入包含payload的内容->服务端回显一个页面提示搜索内容未找到,payload就被执行了。
2.2 按照Payload的位置划分
DOM-based XSS
由客户端JavaScript代码操作DOM或者BOM造成Payload执行的漏洞。由于主要是操作DOM造成的Payload执行,所以叫做DOM-based XSS,操作BOM同样也可以造成Payload执行,所以这个名词有些不准确,其实叫JavaScript-based XSS更好。
DOM-based的Payload不在html代码中所以给自动化漏洞检测带来了困难。
过程如图:
4.png反射型DOM-based XSS的例子:
在客户端搜索框输入包含payload的内容->服务端回显一个页面提示搜索内容未找到,payload就被执行了。
存储型DOM-based XSS的例子:
从服务端接口中获取包含Payload的内容->JavaScript通过操作DOM、BOM造成Payload执行
HTML-based XSS
Payload包含在服务端返回的HTML中,在浏览器解析HTML的时候执行。这样的漏洞易于做自动化漏洞检测,因为Payload就在HTML里面。当然HTML-based XSS也有反射型和存储型的。
过程如图:
5.png反射型HTML-based XSS的例子:
在客户端搜索框输入包含payload的内容->服务端回显一个页面提示搜索内容未找到,payload包含在HTML被执行。
存储型HTML-based XSS的例子:
发表帖子内容包含Payload->存入数据库->被攻击者访问包含该帖子的页面Payload在HTML页面中被执行
3. XSS的攻击目的及危害
很多写出不安全代码的人都是对漏洞的危害没有清晰的认识,下图是2017 OWASP 网络威胁Top10:
6_头图 自截取.jpg可以看到XSS在网络威胁中的地位举足轻重。
3.1 目的
cookie劫持
篡改网页,进行钓鱼或者恶意传播
网站重定向
获取用户信息
3.2 危害
传播类危害
系统安全威胁
第三部分:XSS攻击的Payload这部分我们分析下攻击模型中的Payload,了解Payload必须了解编码,学习好JS也必须要了解好编码。要想真正做好网络安全编码是最基本的。
1. 编码基础
编码部分是最重要的虽然枯燥但必须要会。后面很多变形的Payload都建立在你的编码基础。这里通16进制编码工具让你彻底学会编码。
1.1 编码工具
16进制查看器:方便查看文件16进制编码
MAC:HEx Friend
windows: HxD
编辑器Sublime:可以通过Sublime将文件保存不同编码类型
7.jpg1.2 ASCII
定义:美国信息交换标准代码,是基于拉丁字母的一套计算机编码系统,主要用于显示现代英语和其他西欧语言。