我在阅读本文这里时,在中间看到作者使用-confirm()-作为有效负载。
我想知道这个有效载荷是什么?我的意思是-confirm()-和<script>confirm()</script>有什么区别。为什么<script>confirm()</script>不起作用呢?
如果有人对这件事有所了解的话,那就太好了。
发布于 2015-12-05 11:10:32
问题是最后一个参数中缺少的转义字符\。
您可以使用一个空函数来尝试它:
<script>
function somefunction(){
//do nothing
}
somefunction( 'wskw='-confirm(1)-'');
somefunction( 'wskw='+confirm(2)+'');
somefunction( 'wskw='*confirm(3)*'');
somefunction( 'wskw='/confirm(4)/'');
somefunction( 'wskw='%confirm(5)%'');
</script>它和<script>alert(1)</script>或<script>confirm(1)</script>一样
你可以用这个小提琴来测试它:https://jsfiddle.net/v7y3x1yt/
通常,输入应该始终被用户编码,比如%27而不是'。他们忘了逃避第二个参数。
''关闭字符串,在'之后可以执行任何需要封装在以下算术JavaScript操作符(-, +, *, / %)中的JavaScript代码。这里发生的是一个带有alert()或confirm()函数调用结果的计算,必须执行才能得到结果。
由于源代码中的代码是直接以这种形式出现的,所以它是在服务器端生成的,并且存在参数缺少转义的问题,因此JavaScript库中没有直接的XSS漏洞。理论上,这个未转义的代码可以与JavaScript中的任何函数和库一起工作。问题在于服务器端代码的生成。
<script type="text/javascript">
// Redirect click tracking
$.sliLinkTracker( ".redirect-link",'some_url_with_escape_characters', 'wskw='-confirm(1)-'');
</script>一般来说,我会联系网站的所有者,并向他们披露这一点,因为这是关键。
https://security.stackexchange.com/questions/107340
复制相似问题