一.基本概念
跨站脚本(Cross-site scripting,简称XSS),是指攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web页面的HTML代码会被执行,从而达到恶意攻击用户的目的。
为什么称为xss,依照英文缩写习惯,简称跨站脚本为CSS。这样会引起它和另一个名词“层叠样式表”(Cascading Style Sheets,CSS)的混淆。此CSS非彼CSS。为了以示区别,一些安全人士就习惯将跨站脚本简称为XSS。
二.漏洞危害
XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时侯,恶意脚本会在受害者的计算机上悄悄执行。
-
主要危害:
- 钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼 JavaScript 以监控目标网站的表单输入,甚至发起基于 DHTML 更高级的钓鱼攻击方式。
- 网页挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者重定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
- 身份盗用:Cookie 是用户对于特定网站的身份验证标志,XSS 可以盗取到用户的 Cookie,从而利
用该 Cookie 盗取用户对该网站的操作权限。如果一个网站管理员用户 Cookie 被窃取,将会对网站引
发巨大的危害。 - 盗取网站用户信息:当能够窃取到用户 Cookie 从而获取到用户身份使,攻击者可以获取到用户对
网站的操作权限,从而查看用户隐私信息。 - 垃圾信息发送:比如在 SNS 社区中,利用 XSS 漏洞借用被攻击者的身份发送大量的垃圾信息给特
定的目标群。 - 劫持用户 Web 行为:一些高级的 XSS 攻击甚至可以劫持用户的 Web 行为,监视用户的浏览历
史,发送与接收的数据等等。 - XSS 蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施 DDoS 攻击
等。
三.XSS的类型
跨站脚本攻击可以分为三类,反射型、存储型以及DOM型。
1.反射型
-
介绍:反射型XSS也叫做非持久型XSS。攻击者将恶意脚本附加到 url 的参数中,发送给受害者,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。
-
举例:
一个链接,里面的query字段中包含一个script标签,这个标签的src就是恶意代码,用户点击了这个链接后会先向服务器发送请求,服务器返回时也携带了这个XSS代码,然后浏览器将查询的结果写入html,这时恶意代码就被执行了。
-
流程:
- 攻击者把带有恶意脚本代码参数的 URL 地址发送给用户
- 用户点击此链接
- 服务器端获取请求参数并且直接使用,服务器反射回结果页面
2.存储型
-
介绍:存储型XSS也叫做持久型XSS。存储型XSS会被保存到数据库,在其他用户访问到这条数据时,这个代码会在访问用户的浏览器端执行。
-
举例:
比如攻击者在一篇文章的评论中写入了script标签,这个评论被保存数据库,当其他用户看到这篇文章
时就会执行这个脚本。 -
流程:
- 攻击者将恶意脚本代码上传或存储到漏洞服务器
- 服务器把恶意脚本保存到服务器
- 当正常客户访问服务器时,服务器会读取恶意数据并且直接使用
- 服务器会返回含有恶意脚本的页面
3.DOM型
- 介绍:DOM XSS的XSS代码并不需要服务器解析响应的直接参与,触发XSS靠的就是浏览器端的DOM解析,可以认为完全是客户端的事情。
四.常见的测试代码
<input onfocus=write('xss') autofocus>
<img src onerror=alert('xss')>
<svg onload=alert('xss') >
<script>alert('xss')</script>
<a href="javascript:alert('xss')">clickme</a>
</td><script>alert(123456)</script>
'><script>alert(123456)</script>
"><script>alert(123456)</script>
</title><script>alert(123456)</script>
<scrip<script>t>alert(123456)</scrip</script>t>
</div><script>alert(123456)</script>