一、XSS简介
跨站脚本攻击(Cross Site Script)为了和层叠样式表CSS有所区别,所以在安全领域叫做“XSS”。
XSS攻击,通常指攻击者在网页中嵌入恶意代码,用户访问网页或点击链接触发恶意代码而被攻击。
二、XSS造成的危害
- 网站钓鱼、包括盗取各类用户账号;
- 窃取用户的Cookie;
- 强制弹出广告页面、刷流量;
- 传播蠕虫病毒;
- 网页挂马、进行恶意操作等;
三、XSS原理
XSS是一种发生在前端页面的漏洞,它的危害对象是前端用户,形成XSS漏洞的主要原因是Web应用程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端被浏览器当作有效的代码解析从而产生危害。
四、漏洞分类及利用
4.1 反射型XSS
反射型XSS也被称为非持久型XSS,是比较容易出现的一种XSS漏洞,当用户点击了一个攻击者“精心构造”的URL时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据,最终造成XSS漏洞,这个过程就像一次反射,故称之为反射型XSS。
下面以pikachu靶场来演示反射型XSS的利用
pikachu靶场:https://github.com/zhuifengshaonianhanlu/pikachu
这里当我们输入到20个字符时就会发现无法继续输入了
右键选择检测会发现HTML代码对输入的长度进行了限制,这里我们将20修改即可
<script>alert('/XSS/')</script>
在搜索框中输入上面的代码成功将/XSS/回显出来,当然我们将script标签的代码换成其他的JS代码可以实现其他的操作。
4.2 存储型XSS
存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种XSS。允许用户存储数据的Web应用程序可能会出现存储型XSS漏洞,当攻击者构造了并提交了一段XSS代码后,被服务器端接收并存储,当有用户访问被注入了存储型XSS代码的页面时,这段XSS代码会被程序读出来响应给浏览器,造成XSS跨站攻击。存储型XSS与反射型XSS和DOM型XSS相比具有更高的隐蔽性,危害性也大。它们之间最大的区别在于反射型XSS与DOM型XSS执行都必须依靠用户手动触发,而存储型却不需要。
1313<img src=x onerror=alert('/xss/')>
在留言板上输入上面代码并提交,就会将/xss/回显,并且每当点击这个页面时都会弹出一个提示框
4.3 DOM型XSS
DOM的全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTML。XHTML和XML中的对象,使用DOM可以允许程序和脚本动态的访问和更新文档的内容、结构和样式。DOM型的XSS和反射型的XSS大致相同都是依靠用户手动触发的漏洞。
#' onclick="alert('xss')">
我们在搜索框中写入上面的代码会出现一个超链接
当我们点击这个超链接就可以触发DOM型XSS
五、总结
XSS跨站脚本攻击漏洞产生的根本原因还是没有对用户的提交的数据,后台没有做过滤或过滤不完全,将用户输入的信息打印出来,那么攻击者就可以构造特定的 payload 来在前端执行JS语句,就造成了XSS漏洞。
防御方式:
① 架设WAF,虽然不能完全解决XSS漏洞,但可以拦截大部分敏感数据,防止黑客利用;
② 对用户的输入进行过滤,对输出进行转义处理;
③ 使用 htmlspecialchares 之类的函数,设置httponly。