在使用URL哈希的XSS攻击中重新定义转义函数

Re-define escape function in an XSS attack using URL hash

本文关键字:新定义 定义 函数 转义 URL 哈希 攻击 XSS      更新时间:2023-09-26

这与使用jQuery选择器的XSS攻击有关。我在代码中读取url哈希值。如果我有一个像这样的错误URL

http://www.example.com/#<img src='/' onerror='alert(1)'>

一个安全的方法是在创建选择器之前在我的代码中有一个escape函数(例如_.escape)(我知道我可以用$('body').find(...)避免这种情况,但我的问题不是关于避免它)

var wHash = escape(window.location.hash.replace('#',''));
$(wHash);

问题:是否有可能在有效载荷内重新定义escape,使其无用?像这样:

<img src='/' onerror='(function(){window.escape = function(x) { return x; } })()'>    

我不能精确地制作这使它工作,但我想知道是什么阻止攻击者从url哈希重新定义代码的escaping部分?

wHash = escape(…)$(wHash)之前执行,这将从<img …>创建image元素。但是由于escape$计算之前混淆了的值,因此escape函数的重新定义只会在已经被调用之后才会发生