当前位置:网站首页>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解码
边栏推荐
- SOM网络2: 代码的实现
- seaborn笔记:可视化统计关系(散点图、折线图)
- 漫长的投资生涯
- ImportError: `save_weights` requires h5py. Problem solved
- 三、mysql 存储引擎-建库建表操作
- (Translation) How the contrasting color of the button guides the user's actions
- xctf attack and defense world web master advanced area web2
- 0DFS Medium LeetCode6134. Find the closest node to the given two nodes
- 小程序毕设作品之微信体育馆预约小程序毕业设计成品(1)开发概要
- 10 Practical Uses of NFTs (NFT System Development)
猜你喜欢

如何给 UE4 场景添加游戏角色

xctf攻防世界 Web高手进阶区 web2

【ASM】字节码操作 MethodWriter

【开源】Sentinel高性能高可用集群限流解决方案

【Verilog刷题篇】硬件工程师从0到入门1|基础语法入门

HCIP---Multiple Spanning Tree Protocol related knowledge points
![[Niu Ke brush questions-SQL big factory interview questions] NO4. Travel scene (a taxi)](/img/26/4c3080f1b21efb9401d8c3a55bc15d.png)
[Niu Ke brush questions-SQL big factory interview questions] NO4. Travel scene (a taxi)

How to prevent governance attacks in DAOs?

论文解读(GSAT)《Interpretable and Generalizable Graph Learning via Stochastic Attention Mechanism》

Go 微服务开发框架DMicro的设计思路
随机推荐
Recycling rental system 100% open source without encryption Mall + recycling + rental
迁移学习——Discriminative Transfer Subspace Learning via Low-Rank and Sparse Representation
(Translation) How the contrasting color of the button guides the user's actions
Safe fifth after-school exercise
Mini Program Graduation Works WeChat Food Recipe Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
高等代数_证明_矩阵的行列式为特征值之积, 矩阵的迹为特征值之和
模拟数据之mockjs
深度学习Course2第二周Optimization Algorithms习题整理
[机缘参悟-58]:《素书》-5-奉行仁义[遵义章第五]
联邦学习在金融领域的发展和应用
leetcode 204. Count Primes 计数质数 (Easy)
Getting Started Database Days4
No more rolls!After joining ByteDance for a week, he ran decisively.
Today's sleep quality record 74 points
【开源】Sentinel高性能高可用集群限流解决方案
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Work (4) Opening Report
将vim与系统剪贴板的交互使用
SOM网络2: 代码的实现
leetcode 204. Count Primes 计数质数 (Easy)
小程序毕设作品之微信美食菜谱小程序毕业设计成品(7)中期检查报告