(一)
由于使用get直接传输somebody接收的值,可以使用<svg>标签
(二)
使用的是innerText,将关注点放在eval()上;由于jeff的值是直接传在eval()中的,所以注释掉前面的内容并添加alert就行了
(三)
<div id="uganda"></div>
<script>
let wey = (new URL(location).searchParams.get('wey') || "do you know da wey?");
wey = wey.replace(/[<>]/g, '')
uganda.innerHTML = `<input type="text" placeholder="${wey}" class="form-control">`
</script>
过滤了<>
可以使用闭合前后引号并用onfocus配合autofocus自动触发
(四)
用户的输入ricardo会成为表单提交的URL地址
由于没有任何过滤,可以直接使用javascript伪协议来执行弹框
(五)
使用html实体编码
原语句 <svg onload="alert(1337)">
实体编码 <svg onload="alert(1337)">
url编码 %3Csvg%20onload%3D%22%26%23x61%3B%26%23x6C%3B%26%23x65%3B%26%23x72%3B%26%23x74%3B%26%23x28%3B%26%23x31%3B%26%23x33%3B%26%23x33%3B%26%23x37%3B%26%23x29%3B%22%3E
payload:?markassbrownlee=%3Csvg%20onload%3D%22%26%23x61%3B%26%23x6C%3B%26%23x65%3B%26%23x72%3B%26%23x74%3B%26%23x28%3B%26%23x31%3B%26%23x33%3B%26%23x33%3B%26%23x37%3B%26%23x29%3B%22%3E
(六)
用JSFuck绕过
可以将正常的JS代码混淆为只包含[
, ]
, (
, )
, !
, +
这6种字符的字符串
(七)
绕过:
定义匿名函数,利用匿名函数的参数构造payload,同时使用正则表达式来绕过alert字符串的检测。
(八)
setTimeout(ok, 2000)
中的ok可以接收一个函数或者字符串,如果我们能够向ok这个变量注入可执行的payload,那么也就能成功弹框