Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/spiralbl0ck/browser-pwning-
漏洞分析漏洞利用逆向工程Web安全学习与教育二进制利用
GitHubspiralbl0ck/browser-pwning-

Browser-Pwning-

一份结构完善的 Chrome 与 V8 漏洞利用入门文档

查看仓库
19719634年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Browser-Pwning

一份条理清晰、结构完善的文档,帮助你入门 chrome 漏洞利用 & v8 漏洞利用

文档结构

本文档的组织方式

  1. 动机
  2. 实际学习材料

动机

浏览器是当今最常用的技术之一。在每一台现成的计算机上,只要我们即插即用,就会看到已安装的浏览器。因此,从攻击者和威胁模型的角度来看,如果攻击者能够通过恶意页面攻破浏览器,那将是非常有回报的。基于上述理由,我选择研究 Google 的 JavaScript 引擎,尤其是 v8。

鉴于 v8 项目规模庞大,我选择以解释器(即 d8)作为起点。尽管针对 d8 已经进行了大量研究,但我们仍希望至少能找到一个 bug;即使找不到,也能继续推进浏览器漏洞利用研究,因为 v8 为浏览器漏洞利用中常用的基础利用开发策略提供了切入点。

我之所以选择 v8 作为目标,另一个原因是它被多个浏览器使用。

如果我们深入研究,就会发现该引擎也用于 MicrosoftEdge,因此有机会获得多个漏洞赏金计划的奖励。对于底层操作系统,研究者将混合使用 Windows 和 Linux,因为在获取 shell 方面没有限制,v8 漏洞允许通过 wasm 页面执行代码,并且不绑定任何特定平台。

遗憾的是,虽然 v8 中被利用的漏洞会导致代码执行,但由于沙箱的存在,我们无法执行任何代码;也就是说,我们只能在渲染器上下文中获得代码执行,而无法在机器上执行代码。为此,我们需要另一个沙箱漏洞利用,也就是需要一条完整的攻击链才能攻破系统。

因此,为了能够开始浏览器安全研究,我们定义了以下目标

  • 学习、梳理并掌握 V8 引擎使用的内部结构以及 Chrome 架构的关键要点
  • 学习并掌握浏览器漏洞利用所必需的基础流程

学习、梳理并掌握 V8 引擎使用的内部结构以及 Chrome 架构的关键要点

在项目的第一阶段,有必要尽可能多地收集有关 Chrome 架构以及各个组件之间如何交互的知识。为了更好地理解这一点,我们需要将 Chromium 项目拆分为多个子组件,以便能够隔离各部分并正确分析。更确切地说,下列每个组件会拆分成多少个子组件:

  • V8 架构
  • Chromium 架构
  • Blink 架构

那么,对于第一步来说,最合乎逻辑的步骤是理解 Chromium 架构。 好的,我们想要利用浏览器,但当我们第一次启动浏览器时会发生什么?嗯,点击 Chromium 可执行文件之后,该可执行文件会启动一些进程。

它们的启动顺序和名称如下:

第一个叫作 content 进程。这个进程是做什么的?

  • 它被认为是启动进程。
  • 它也是主进程。
  • 它负责启动真正的主进程,即 browser 进程。

既然我们大致了解了它的作用,现在是时候更深入地探讨它了:

  • 至少从 Windows 上看,Chromium 的工作方式是将文件编译成一个 dll,然后将其加载到内存中。因此,Chromium 浏览器(Chroium 浏览器)的核心逻辑就在 chromium.dll 中。 代码也证实了这一点
    2.
    这段代码取自 chrome_exe_main_win.cc,如果你好奇想阅读完整代码,它位于 chromium/src/chrome/app。好,顺着执行流程往下走,我们可以看到它调用 MakeMainDllLoader() 来调用 dll 加载类;之后它启动“loader”(加载器),也就是加载 chrome.dll,如果有必要,还会使用必要的命令行重启它。为了进一步分析 Loader,我们需要理解它的代码,这些代码位于同一目录下的 mail_dll_loader_win.cc 文件中。一直滚动到文件底部,我们可以看到对 MakeMainDllLoader 的调用,它会根据你所拥有的版本调用 ChromeDllLoader 或 ChromiumDllLoader。
    3
    我们可以看到,ChromiumDllLoader 是一个继承自 MainDllLoader 的类。从定义中可以看出,这个类所做的只是根据传递给 cmdline 和进程类型的参数来加载 dll。
    6.
    分析 Launch 方法,我们可以了解 chrome.dll 启动之前发生的一些事情:我们可以从这条注释中理解:“// Launching is a matter of loading the right dll and calling the entry point. // Derived classes can add custom code in the OnBeforeLaunch callback.” 启动 chrome 实际上就是加载一组真正完成工作的 dll。其次,它获取传递给命令行的参数,并进一步初始化沙箱服务。
    q.
    首先,它检查是否由浏览器来调用沙箱初始化;然后检查调用沙箱初始化的进程是否以云打印服务的方式被调用。它还检查二进制文件是否传入了 --no-sandbox 参数,这基本上就是告诉二进制文件不要在沙箱中运行。它检查这些条件中是否有任何一个被设置,如果任一为真,它就会使用相应的选项调用沙箱。最后我们来到
    8
    这正是我们感兴趣的,它表示对调用 chrome_main 的封装。
下载工具