当前位置:网站首页>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解码
边栏推荐
猜你喜欢
随机推荐
【C语言实现】求两个整数的较大值
游戏元宇宙发展趋势展望分析
Recycling rental system 100% open source without encryption Mall + recycling + rental
Delicious this year
SOM Network 1: Principles Explained
移动端人脸风格化技术的应用
Prufer序列
Mini Program Graduation Works WeChat Food Recipe Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
小程序毕设作品之微信体育馆预约小程序毕业设计成品(4)开题报告
LeetCode952三部曲之二:小幅度优化(137ms -> 122ms,超39% -> 超51%)
xctf攻防世界 Web高手进阶区 webshell
1. @Component注解的原理剖析
leetcode 204. Count Primes 计数质数 (Easy)
线程池分析
SOM网络2: 代码的实现
字符串——Trie
基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现
10年稳定性保障经验总结,故障复盘要回答哪三大关键问题?|TakinTalks大咖分享
Wechat Gymnasium Reservation Mini Program Graduation Design Finished Work Mini Program Graduation Design Finished Product (2) Mini Program Function
得物客服热线的演进之路