当前位置:网站首页>xss相关知识点以及从 XSS Payload 学习浏览器解码
xss相关知识点以及从 XSS Payload 学习浏览器解码
2022-08-01 22:08:00 【张小元.】
XSS
XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。

XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端JS脚本。
主要危害:盗取账号、窃取资料、非法转账、网站挂马等
工要攻击手段:反射型、存储型、DOM型

- 反射型:服务端返回脚本,客户端执行(一般通过URL)
- 存储型:后台存储,前端展示(一般通过发帖或评论)
- DOM型:基于DOM(流量劫持、DNS劫持)
主要防御手段:输入输出过滤、长度限制、cookie设置http-only
从 XSS Payload 学习浏览器解码
1.Basics
(1)
<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>
里面没有HTML编码内容,不考虑,其中href内部是URL,于是直接丢给URL模块处理,但是协议无法识别(即被编码的javascript:),解码失败,不会被执行

URL规定协议,用户名,密码都必须是ASCII,编码就无效,所以无法弹窗

(2)
<a href="javascript:%61%6c%65%72%74%28%32%29">先HTML解码,得到
<a href="javascript:%61%6c%65%72%74%28%32%29">href中为URL,URL模块可识别为javascript协议,进行URL解码,得到
<a href="javascript:alert(2)">由于是javascript协议,解码完给JS模块处理,于是被执行
(3)
<a href="javascript%3aalert(3)"></a>
道理和第一个一样,URL编码“:” javascript不会执行。
(4)
<div><img src=x οnerrοr=alert(4)></div>

这里包含了HTML编码内容,反过来以开发者的角度思考,HTML编码就是为了显示这些特殊字符,而不干扰正常的DOM解析,所以这里面的内容不会变成一个img元素,也不会被执行
从HTML解析机制看,在读取<div>之后进入数据状态,<会被HTML解码,但不会进入标签开始状态,当然也就不会创建img元素,也就不会执行
(5)
<textarea><script>alert(5)</script></textarea>
<textarea>和<title>里会有HTML解码操作,但不会有子元素
<textarea>是RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素,HTML解码得到<textarea><script>alert(5)</script></textarea>于是直接显示RCDATA元素(RCDATA elements)包括textarea和title,所以不会弹窗
(6)
<textarea><script>alert(6)</script></textarea>
和第五个一样,<textarea>和<title>里会有HTML解码操作,但不会有子元素,所以不会弹窗

Advanced
(7)
<button onclick="confirm('7');">Button</button>
这里onclick中为标签的属性值(类比2中的href),会被HTML解码,得到
<button onclick="confirm('7');">Button</button>所以会出现弹窗

(8)
<button onclick="confirm('8\u0027);">Button</button>
onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,也不能编码符号,'显然不行,JS执行失败,所以不会弹窗

(9)
<script>alert(9)</script>

script属于原始文本元素(Raw text elements),只可以容纳文本,注意没有字符引用,于是直接由JS处理,这里全部到作文本,,JS也认不出来,执行失败,所以不能弹窗
原始文本元素(Raw text elements)有<script>和<style>
(10)
<script>\u0061\u006c\u0065\u0072\u0074(10);</script>
和上面第二个一样,函数名alert属于标识符,没有编码符号编码的字符,直接被JS执行,所以可以弹窗

(11)
<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>
在JS中只有字符串和标识符能用Unicode表示,这个编码了符号,JS执行失败,不能弹窗
(12)
<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>
这里看似将没毛病,但是这里\u0031\u0032在解码的时候会被解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的,JS执行失败
(13)
<script>alert('13\u0027)</script>编码的 ‘ 是个符号,所以无法弹窗
(14)
<script>alert('14\u000a')</script>\u000a在JavaScript里是换行,就是\n,虽然换行了,但是引号都在,没有被编码,能直接执行,所以可以弹窗

(15)
<a
href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>
先HTML解码,得到
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(15)"></a>
在href中由URL模块处理,解码得到
javascript:\u0061\u006c\u0065\u0072\u0074(15)
识别JS协议,然后由JS模块处理,解码得到
javascript:alert(15)
显示可以弹窗
总结
<script>和<style>数据只能有文本,不会有HTML解码和URL解码操作<textarea>和<title>里会有HTML解码操作,但不会有子元素其他元素数据(如
div)和元素属性数据(如href)中会有HTML解码操作部分属性(如
href)会有URL解码操作,但URL中的协议需为ASCIIJavaScript会对字符串和标识符Unicode解码
边栏推荐
- 【ASM】字节码操作 MethodWriter
- 小程序容器+自定义插件,可实现混合App快速开发
- AQS
- Deep learning Course2 first week Practical aspects of Deep Learning exercises
- dvwa 通关记录1 - 暴力破解 Brute Force
- 基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现
- 数据分析面试手册《指标篇》
- 使用分类权重解决数据不平衡的问题
- SOM Network 2: Implementation of the Code
- NgRx Store createSelector 的单步调试和源代码分析
猜你喜欢

教你VSCode如何快速对齐代码、格式化代码

使用Jenkins做持续集成,这个知识点必须要掌握

毕业十年,财富自由:那些比拼命努力更重要的事,从来没人会教你

深度学习Course2第二周Optimization Algorithms习题整理

Flutter基础学习(一)Dart语言入门

03. GO language variable definition, function

xctf attack and defense world web master advanced area webshell

小程序毕设作品之微信美食菜谱小程序毕业设计成品(7)中期检查报告

力扣第 304 场周赛复盘

10 Practical Uses of NFTs (NFT System Development)
随机推荐
User Experience | How to Measure User Experience?
0DFS Medium LeetCode6134. Find the closest node to the given two nodes
小程序毕设作品之微信体育馆预约小程序毕业设计成品(3)后台功能
JS prototype hasOwnProperty in 加方法 原型终点 继承 重写父类方法
xctf attack and defense world web master advanced area webshell
你居然不懂Bitmap和Drawable? 相关知识大扫盲
03、GO语言变量定义、函数
找工作必备!如何让面试官对你刮目相看,建议收藏尝试!!
Flutter基础学习(一)Dart语言入门
Small program -- subcontracting
(*゚ヮ゚)*【精品C语言整理】*(゚ヮ゚*)女盆友缠着你让你教她写代码怎么办?安排,三万字博文带你走遍C语言,从此不再害怕编程
【C语言】猜数字小游戏
Mini Program Graduation Works WeChat Food Recipe Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
如何防范 DAO 中的治理攻击?
选择合适的 DevOps 工具,从理解 DevOps 开始
AIDL communication
Today's sleep quality record 74 points
[Niu Ke brush questions-SQL big factory interview questions] NO4. Travel scene (a taxi)
小程序毕设作品之微信美食菜谱小程序毕业设计成品(8)毕业设计论文模板
游戏元宇宙发展趋势展望分析