XSS 向量位于
*
,但未声明“com.test.admin.web.widgets.functionTest()”,因此我的有效载荷未被执行。
我只能从
*
改剧本
以下是漏洞代码实例:
<select name="sub_subissues" id="_subsubissues" onchange="com.test.admin.web.widgets.functionTest(*)" style="height:30px;">
由于“com”、“test”、“admin”、“web”、“widgets”和“functionTest”未在页面中定义,因此有效负载未执行,因为
onchange
属性未执行。
字符<>&"'
不能使用,因为它们被编码了。
所以我试过:-
导致:-
<select name="sub_subissues" id="_subsubissues" onchange="com.test.admin.web.widgets.functionTest();var com = alert()" style="height:30px;">
但它仍然要求其余未定义的,我想不出任何其他方式来定义它们或忽略它们。
我如何修改我的负载以利用 XSS?
我希望这段代码执行一个 alert(),代码更改自
*
:
<select name="sub_subissues" id="_subsubissues" onchange="com.test.admin.web.widgets.functionTest(*)" style="height:30px;">
在参数中调用
alert()
。在尝试调用函数之前评估函数参数,因此即使函数不存在也会执行警报。
onchange="com.test.admin.web.widgets.functionTest(alert())"
您可以使用函数提升,但它只适用于 1 个段,即
<select onchange="qwe(/* * */);function qwe(){};alert() // )">
// this one doesn't work
// qwe.asd();function qwe(){};qwe.asd = function(){};alert()//)
如果您有多个注入点(或其存储的 xss),您可以先尝试在一个属性中注入定义并在另一个属性中执行它。