Client Side Prototype Pollution
使用自动化工具发现
工具 https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap 和 https://github.com/kosmosec/proto-find 可用于 查找原型污染漏洞。
此外,您还可以使用 浏览器扩展 PPScan 自动 扫描 您 访问的 页面 以查找原型污染漏洞。
调试属性的使用位置
查找原型污染的根本原因
一旦通过任何工具识别出原型污染漏洞,并且代码不是过于复杂,您可以通过在 Chrome 开发者工具中搜索关键字,如 location.hash
、decodeURIComponent
或 location.search
,来找到漏洞。这种方法可以帮助您准确定位 JavaScript 代码中的脆弱部分。
对于更大和更复杂的代码库,发现脆弱代码的简单方法包括以下步骤:
使用工具识别漏洞并获取一个旨在设置构造函数中属性的有效载荷。ppmap 提供的示例可能看起来像:
constructor[prototype][ppmap]=reserved
。在页面上将要执行的 JavaScript 代码的第一行设置断点。使用有效载荷刷新页面,在此断点处暂停执行。
当 JavaScript 执行暂停时,在 JS 控制台中执行以下脚本。该脚本将在创建 'ppmap' 属性时发出信号,帮助定位其来源:
返回到 Sources 标签并选择“恢复脚本执行”。JavaScript 将继续执行,'ppmap' 属性将如预期被污染。利用提供的代码片段可以帮助识别 'ppmap' 属性被污染的确切位置。通过检查 Call Stack,可以观察到污染发生的不同堆栈。
在决定调查哪个堆栈时,通常有用的是针对与 JavaScript 库文件相关的堆栈,因为原型污染通常发生在这些库中。通过检查其与库文件的关联(在右侧可见,类似于提供的图像作为指导)来识别相关堆栈。在有多个堆栈的情况下,例如第 4 行和第 6 行,逻辑选择是第 4 行的堆栈,因为它代表了污染的初始发生,从而是漏洞的根本原因。点击该堆栈将引导您到易受攻击的代码。
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1*S8NBOl1a7f1zhJxlh-6g4w.jpeg&width=768&dpr=4&quality=100&sign=7de3adb9&sv=1)
查找脚本小工具
小工具是 一旦发现 PP 漏洞将被滥用的代码。
如果应用程序很简单,我们可以 搜索 关键词,如 srcdoc/innerHTML/iframe/createElement
并查看源代码,检查是否 leads to javascript execution。有时,提到的技术可能根本找不到小工具。在这种情况下,纯源代码审查会揭示一些不错的小工具,如下面的示例。
示例 在 Mithil 库代码中找到 PP 小工具
查看此写作: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
针对易受攻击库的有效负载重新编译
通过 PP 绕过 HTML 清理器
这项研究 显示了用于 绕过某些 HTML 清理器库提供的清理 的 PP 小工具:
sanitize-html
dompurify
Closure
参考文献
Last updated