当前位置:网站首页>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>

边栏推荐
猜你喜欢

tRNA修饰2-甲基胞嘧啶(m2C)|tRNA修饰m2G (N2-methylguanosine)

error: C1083: 无法打开包括文件: “QString”: No such error: ‘QDir‘ file not found

博士申请 | 美国明尼苏达大学葛畅教授招收隐私数据管理方向全奖博士/硕士/博后/访问学者...

2022年1~7月语音合成(TTS)和语音识别(ASR)论文月报

力扣203-移除链表元素——链表

Abs (), fabs () and LABS ()

图神经网络怎么入门?一文带你了解图神经网络入门路径-GNN入门

Engineering Effectiveness Governance for Agile Delivery

独立站卖家在哪些平台做社交媒体营销效果最好?

15 years experience in software architect summary: in the field of ML, tread beginners, five hole
随机推荐
leetcode 072. 求平方根
15年软件架构师经验总结:在ML领域,初学者踩过的五个坑
leetcode 136. 只出现一次的数字(异或!!)
How can a cloud server safely use local AD/LDAP?
ES6 introduction and let, var, const
云图说丨初识华为云微服务引擎CSE
伪标签汇总
if _name_ == “__main__“:NameError: name ‘_name_‘ is not defined
收藏-即时通讯(IM)开源项目OpenIM-功能手册
小朋友学C语言(1):Hello World
有趣的opencv-记录图片二值化和相似度实现
leetcode 136. Numbers that appear only once (XOR!!)
win10安装及配置Gradle
ES6--residual parameters
解决npm -v查看npm版本出现npm WARN config global `--global`, `--local` are deprecated. Use `--location报错
Lecture topics and guest blockbuster, TDengine developers conference to promote data technology "broken"
研究Fabric中Etcd的Raft应用
glusterfs build and use
leetcode 2119. 反转两次的数字
Leetcode 125. Verify palindrome string
