目录
线上靶场网址
Ma Spaghet!
关键代码分析:
spaghet.innerHTML = (new URL(location).searchParams.get('somebody') || "Somebody") + " Toucha Ma Spaghet!"
1、URLSearchParams接口定义了一些实用的方法来处理URL的查询字符串。
URLSearchParams()是一个可以操作查询字符串的对象。
常用方法: 1、构造查询字符串 2、获取查询字符串参数
2、innerHTML:它是一个字符串,用来设置或获取位于对象起始和结束标签内的HTML。相当于获取HTML当前标签的起始和结束里面的内容。
使用get方法传递URL,没有其他过滤方式,我们尝试使用<script>alert(1)</script>绕过一下
没有弹窗,我们再找找原因?
由于是因为<script>语句是由innerHTML标签传上去的,我们先查看innerHTML的作用: 在HTML5中指定不执行innerHTML中插入的<script>标签
所以换成<img src=1 οnerrοr=alert(1337)>再试试,成功了
Jefff
关键代码分析:
eval(`ma = "Ma name ${jeff}"`)
setTimeout(_ => {
maname.innerText = ma
}, 1000)
1、使用模板字符串传递jefff
2、setTimeout:在指定的延迟时间之后调用一个函数或执行一个代码片段
3、innerText:用来定义对象所要输出的文本。
首先我们直接尝试将alert(1)传递进去试一下
没有成功,上述方法组合:eval(`ma = "Ma name ${alert(1337)}"`),我们分析一下这个语句
eval虽然仅接受第一个参数,但是会先执行第二个参数,虽然第二个参数可以执行,但是不会接受
第二个参数执行后的结果。
我们首先得将双引号闭合在执行alert,就是将双引号里面的字符串作为第一个参数,alert(1337)作为第二个参数执行
最后组合成:eval(`ma = "Ma name ${aa";alert(1337)//}"`) ,成功了
Ugandan Knuckles
关键代码分析:
<script>
let wey = (new URL(location).searchParams.get('wey') || "do you know da wey?");
wey = wey.replace(/[<>]/g, '')
uganda.inne