当前位置:网站首页>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>
边栏推荐
- 15 years experience in software architect summary: in the field of ML, tread beginners, five hole
- 业界新标杆!阿里开源自研高并发编程核心笔记(2022 最新版)
- Abs (), fabs () and LABS ()
- YARN功能介绍、交互流程及调度策略
- 华为设备VRRP配置命令
- PyCharm函数自动添加注释无参数问题
- Power button 206 - reverse list - the list
- Leetcode sword refers to Offer 15. 1 in the binary number
- CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
- 检测和控制影子IT的五个步骤
猜你喜欢
肝完 Alibaba 这份面试通关宝典,我成功拿下今年第 15 个 Offer
【使用 Pytorch 实现入门级的人工神经网络】
nvm的使用 nodejs版本管理,解决用户名是汉字的问题
基于data.table的tidyverse?
Orcad Capture Cadence 新建原理图多部分smybol和Homogeneous、Heterogeneous类型介绍教程
华为设备配置VRRP负载分担
Lecture topics and guest blockbuster, TDengine developers conference to promote data technology "broken"
双线性插值公式推导及Matlab实现
Linux操作Jmeter(附带:关于连接上redis无法进行写入操作的问题),JMeter配置多用户进行压力测试
函数,递归以及dom简单操作
随机推荐
研究Fabric中Etcd的Raft应用
Leetcode 899. An orderly queue
leetcode 16. 数值的整数次方(快速幂+递归/迭代)
小朋友学C语言(1):Hello World
CheckBox列表项选中动画js特效
NAACL 2022 | 具有元重加权的鲁棒自增强命名实体识别技术
面试官:为什么 0.1 + 0.2 == 0.300000004?
2022/08/03 学习笔记 (day23)多线程(补充)
leetcode 136. 只出现一次的数字(异或!!)
leetcode 125. 验证回文串
leetcode 072. Finding Square Roots
力扣707-设计链表——链表
Likou 59 - Spiral Matrix II - Boundary Judgment
2021年数据泄露成本报告解读
5 款漏洞扫描工具:实用、强力、全面(含开源)
idea2021.1.3配置Gradle步骤
刷题错题录1-隐式转换与精度丢失
C51 存储类型与存储模式
深度学习怎么入门?零基础快速入门深度学习
alicloud3搭建wordpress