XSS payload无法执行:未定义函数致onchange失效,求可利用payload
解决方法
核心思路是利用JavaScript函数调用的参数优先求值特性:函数的参数表达式会在尝试调用函数之前被执行,哪怕目标函数不存在,参数里的代码也会先运行。
直接将*位置替换为以下payload即可:
alert(1)
替换后的完整onchange属性代码为:
<select name="sub_subissues" id="_subsubissues" onchange="com.test.admin.web.widgets.functionTest(alert(1))" style="height:30px;">
原理说明
当触发onchange事件时,JavaScript引擎会先执行参数位置的alert(1),成功弹出提示框;之后才会尝试调用未定义的com.test.admin.web.widgets.functionTest,此时即使抛出ReferenceError,也不影响已经执行的alert。
额外优化(可选)
如果担心alert的返回值(undefined)可能引发额外问题,可以用逗号运算符构造一个合法参数值,确保语法完全正确:
(alert(1), 0)
替换后代码为:
<select name="sub_subissues" id="_subsubissues" onchange="com.test.admin.web.widgets.functionTest((alert(1), 0))" style="height:30px;">
这里逗号运算符会先执行alert(1),再将0作为参数传入函数,既保证alert执行,也避免了参数值可能的语法问题。
内容的提问来源于stack exchange,提问作者joao silva
相关产品推荐
相关产品推荐

