原理
XSS(Cross Site Scripting)跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击。
分类
存储型:
持久化,代码存储在服务器中。如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那这些代码将存储到服务器中,用户访问该页面时会触发代码执行。这种XSS比较危险,容易造成蠕虫、盗窃cookie。
反射型:
非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面,多数情况下用来盗取用户的Cookie信息。
DOM型:
不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Object Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,也属于反射型XSS。
漏洞成因
当用户的输入或者一些用户可控参数未经处理地输出到页面上,就容易产生XSS漏洞。主要场景有以下几种:
- 将不可信数据插入到HTML标签之间 # div,p,td
- 将不可信数据插入到HTML属性里 #
- 将不可信数据插入到SCRIPT里 #
- 将不可信数据插入到Style属性里 #
- 将不可信数据插入到HTML URL里 #
- 使用富文本时,没有使用XSS规则引擎进行编码过滤
几种常见的绕过方法
-
回车Tab绕过过滤
-
空格间隔
< img src="javas cript:alert(/xss/)" width=100>
-
回车间隔
<img src="javas cript: alert(/xss/)" width=100>
-
-
对标签属性值进行转码
<img src="javascript:alert('xss');"> # 替换成: <img src="javascript:alert('xss');"> # 字母t的ASCII码为116,加上&#可以被web识别,符号:的ASCII码为58 # 再进行进一步替换: <img src="javascrip:alert('xss');">
-
扰乱XSS过滤规则
-
转换大小写
-
用单引号代替双引号
-
利用注释符
<div style="wid/**/th:expre/*111*/ssion(alert('xss'));">
-
学习博客:
XSS(跨站脚本攻击)详解 - 墨鱼菜鸡 - 博客园 (cnblogs.com)
这一次,彻底理解XSS攻击 - 掘金 (juejin.cn)
网络安全自学篇(十八)| XSS跨站脚本攻击原理及代码攻防演示(一) - 云+社区 - 腾讯云 (tencent.com)