当前位置:网站首页>XSS线上靶场---prompt
XSS线上靶场---prompt
2022-08-03 20:58:00 【抱小猫】
目录
线上靶场网址
00
需要将前面的双引号进行闭合后再写JS代码
01
因为这个题对<>/等有过滤,所以我们不闭合标签
02
过滤=()等特殊符号,使用反引号+编码双括号
03
将输入的内容传递到注释符中,需要先闭合注释符再写JS代码
04
在这一关需要写入数据的格式是http://开头的才行,刚开始写http://prompt.ml/@127.0.0.1/test.js时没有成功,后面测试后发现是因为/需要编码一下
05
这一关需要我们将前面的双引号绕过,由于对on...=有限制,所以使用换行绕过
06
我们先看一下这一关的要求:
var segments = input.split('#'); #通过#将字符串分割
var formURL = segments[0]; #将输入的URL取出来
var formData = JSON.parse(segments[1]); #将 {"name":"Matt"}转成JS的对象
var form = document.createElement('form'); #创建一个form元素/form表单
form.action = formURL; #form提交给URL
form.method = 'post'; #方法使用post
for (var i in formData) { #将formData对象进行循环
var input = form.appendChild(document.createElement('input'));
input.name = i; #相当于将key循环出来后将key赋值给(name)
input.setAttribute('value', formData[i]); #将value作为Matt
if (!/script:|data:/i.test(document.forms[0].action)) #i函数表示忽略大小写,且数据中不包含script和data才能最终进行提交操作
form表单中提交JavaScript弹窗函数点提交会直接生效,在submit提交按钮时,如果一个表单中有两个action,后面的action值会取代/覆盖前面的action值,但是提交会提交第一个action值,在第一个action值中加上JS代码可以绕过正则表达式。
07
限制长度为12个字符,传递的值如果有#号都会被分割。
字符限制如何处理:使用注释符/* */,将中间的字符串注释,将有长度的限制语句/没有用的代码注释掉。
08
过滤了符号 \r\n</" ,做这一关时我们需要了解到JS中的特殊字符
JavaScript规定有5个字符,不能在字符串里面直接使用,只能使用转义形式。
- U+005C:反斜杠(reverse solidus)
- U+000D:回车(carriage return)
- U+2028:行分隔符(line separator)
- U+2029:段分隔符( paragraph separator)
- U+000A:换行符(line feed)
举例来说,字符串里面不能直接包含反斜杠,一定要转义写成\\或者\u005c 。
JSON格式已经冻结(RFC 7159),没法修改了。为了消除这个报错,ES2019允许JavaScript字符串直接输入U+2028(行分隔符)和U+2029(段分隔符)。
注意,模板字符串现在就允许直接输入这两个字符。另外,正则表达式依然不允许直接输入这两个字符,这是没有问题的,因为JSON本来就不允许直接包含正则表达式。
我们只需要将\u2028prompt(1)\u2029-->执行后写入进去就可以了
09
这一关是将输入的数字进行了大写,我们可以用<ſcript src="http://127.0.0.1/test.js"></ſcript>试一下。
或使用 <ſvg/οnlοad=prompt(1)> 方式
0A
从题目中input = encodeURIComponent(input).replace(/prompt/g, 'alert');可以看出我们的prompt被转成了alert,这样编码也无法使用,但是 input = input.replace(/'/g, '');中可以得到题中将单引号变成空,我们可以在prompt中加入单引号。
0B
在js中,(prompt(1))instaneof"1"和(prompt(1))in"1"是可以成功弹窗的,其中双引号里面的1可以是任何字符,这里的in或者instanceof是运算符,所以可以有这样的语法结构。
0C
这一题与0A相似,但是被encode URL编码,所以不能使用编码。JS中有parseInt函数能将字符串转化成一串数字,并且使用..toString()可以转回来,
parselnt(string, radix)解析一个字符串并返回指定基数的十进制整数,基数是2-36之间的整数,表示被解析字符串的基数。如果第一个字符不能转化成数字,当转成NAN,radix最大只能写到36,最小为2,36由0-9+a-z组成的。
prompt选择范围:p开头 p=0-9+a-p=26,
t结尾 t=0-9+a-t=30,所以我们选择基数时最小要选择30,或者大于30的数字
0F
input = input.replace(/\*/g, ''); #过滤的符号*,所以我们用<!--符号进行过滤
var segments = input.split('#') #以#号分割
return '<p class="comment" title="' + title.slice(0, 15) + '" data-comment=\'{"id":' + index + '}\'></p>';#限制字符长度为15
注释符在<script>标签中失效了,在<script>中存放的是文本。 < svg > 可以切换命名空间, 支持XML语法的格式,在XML中的注释符为<!-- -->,所以svg标签中支持这样的注释符。
"><svg><!--#--><script><!--#-->prompt(1)</script></svg>
边栏推荐
猜你喜欢
随机推荐
LeetCode_Digit Statistics_Medium_400. Nth Digit
leetcode refers to Offer 58 - II. Left Rotate String
为什么 BI 软件都搞不定关联分析
Leetcode 125. Verify palindrome string
敏捷交付的工程效能治理
深度学习怎么入门?零基础快速入门深度学习
解决npm -v查看npm版本出现npm WARN config global `--global`, `--local` are deprecated. Use `--location报错
关于shell脚本的一些思考
leetcode 2119. Numbers reversed twice
数学之美 第六章——信息的度量和作用
leetcode 461. 汉明距离
盲埋孔PCB叠孔设计的利与弊
化算力为战力:宁夏中卫的数字化转型启示录
leetcode 072. 求平方根
idea2021.1.3配置Gradle步骤
leetcode 326. 3 的幂
通关剑指 Offer——剑指 Offer II 009. 乘积小于 K 的子数组
LeetCode_位数统计_中等_400.第 N 位数字
How can a cloud server safely use local AD/LDAP?
Five Steps to Detect and Control Shadow IT