ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Sliver Cursed 模块深入指南:基于 Chrome DevTools 协议的浏览器后渗透工具链

Sliver Cursed 模块深入指南:基于 Chrome DevTools 协议的浏览器后渗透工具链 网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载导读Cursed 是 SliverAdversary Emulation Framework内置的 Chrome/Chromium/Edge/Electron 后渗透工具包它与 CursedChrome 集成能够自动在目标系统上定位具备所需权限的既有浏览器扩展、将载荷注入其执行上下文并提供交互式 REPL 对任意 Chrome 系浏览器上下文执行任意 JavaScript。由于所有 Web 请求与活动都源自目标机器与目标浏览器实例Cursed 是绕过 Web 应用 U2F/Webauthn、硬件 attestation 与地理 IP 限制的利器。读完本文你将掌握cursed系列全部子命令的用法、关键参数、执行流程与底层原理可直接在实战环境中落地使用。Cursed 是什么Cursed 定位为“浏览器后渗透工具箱”核心能力分为两条主线自动注入自动找出目标机器上已安装、且具备 CursedChrome 所需权限如all_urls、webRequest、webRequestBlocking的浏览器扩展并通过 DevTools 协议远程把载荷注入到该扩展的执行上下文中交互式控制以 REPL 形式连接任意被“诅咒”cursed的进程向 Chrome/Chromium/Edge/Electron 的任何上下文注入任意代码。在 Sliver 客户端中Cursed 相关的命令注册于 client/command/cursed/commands.go属于Execution命令组只对 session 型目标生效flags.RestrictTargets(consts.SessionCmdsFilter)也就是说使用前必须先建立交互式 session或从 beacon 转为交互模式。为什么能绕过 U2F / Webauthn 与地理限制Cursed 的设计思路是“借刀杀人”所有请求都从受害者的真实浏览器、真实扩展上下文、真实 IP 发出。当浏览器扩展具备了webRequest与webRequestBlocking权限后Cursed 注入的载荷可以拦截、改写任意请求例如在认证流程中注入自己的 attestation 行为、篡改 geo-IP 校验所需的请求头从而在不接触硬件安全密钥的前提下完成认证流程。这一点也是 Cursed 相比传统 agent 内嵌 HTTP 客户端方案的独特价值。典型工作流程总览根据 Cursed.md 的官方说明一次完整的 Cursed 攻击链如下先在攻击者侧搭建好 [CursedChrome]原 BishopFox sliver-overlord 项目后由 mandatoryprogrammer 维护——它负责接收上游浏览器流量并注入恶意载荷在目标机器上拿到一个 Sliver 交互式 session或从 beacon 转交互在会话中执行cursed chrome --payload background.js重启目标浏览器并注入载荷将上游浏览器流量指向 CursedChrome 代理享受会话。其中--payload指定的是本地一个.js文件该文件会被注入到具备合适权限的扩展上下文里典型场景就是 background script 载荷从而获得浏览器全局请求处理能力。cursed 主命令查看被诅咒的进程不带子命令直接运行cursed会列出当前客户端已建立的全部 cursed 进程。实现位于 client/command/cursed/cursed.go它遍历客户端内存中的全局注册表core.CursedProcesses一个sync.Map定义于 client/core/curses.go以表格形式输出列含义Bind Port本地攻击者侧绑定的 TCP 端口用于转发到目标的调试端口Session ID对应 Sliver 会话 ID 的前缀PID目标侧浏览器进程的 PIDPlatform目标操作系统Executable被诅咒的可执行文件路径Debug URL通过本地端口访问的 DevTools 调试端点http://localhost:port/json若没有进程则输出No cursed processes。DebugURL()的实现见 client/core/curses.go本质就是指向本地绑定端口的/json端点。cursed chrome重启 Chrome 并自动注入载荷cursed chrome是整套工具的核心命令完整实现位于 client/command/cursed/cursed-chrome.go。其行为分两种模式不指定--payload仅以开启远程调试remote debugging的方式重启 Chrome随后可用cursed console连接任意 debug target指定--payload重启 Chrome 后枚举已安装扩展判定哪些扩展拥有 CursedChrome 所需权限并把载荷注入到该扩展的执行上下文。命令行参数以下参数在 client/command/cursed/commands.go 中定义参数简写默认值说明--remote-debugging-port-r0随机目标浏览器远程调试 TCP 端口。从源码看为 0 时会在[10000, 40000)区间内随机选取见 cursed.go--restore-Rtrue杀进程后尝试恢复用户会话对应 Chrome 的--restore-last-session--exe-e空自动探测Chrome/Chromium 可执行文件路径留空则自动定位--user-data-u空自动探测用户数据目录留空则自动定位--payload-p空要注入的.js载荷文件路径本地文件支持 Tab 补全*.js--keep-alive-kfalse浏览器最后一个窗口关闭后仍保持进程存活对应--keep-alive-for-test--headless-Hfalse以 headless 模式启动浏览器进程此外命令允许追加任意额外的 Chrome CLI 参数ParseErrorsWhitelist.UnknownFlags true位置参数会透传给目标进程。底层执行流程CursedChromeCmd的实际动作可以分为以下步骤源码证据见 cursed-chrome.go读取载荷--payload指定的文件通过os.ReadFile读入内存L60-L69检测既有 Chrome 进程getChromeProcess通过 RPCPs枚举目标进程过滤出属于当前会话用户的、可执行文件名匹配chrome、google-chrome、chromium-browser、chrome.exe、Google Chrome的进程isChromeProcess杀进程并确认若发现运行中的 Chrome会以醒目提示警告“需要杀死并重启 Chrome 进程以完成代码注入Sliver 会尝试恢复用户会话但可能发生数据丢失”并要求交互确认forms.Confirm确认后通过 RPCTerminate结束目标进程L120-L147探测可执行文件路径findChromeExecutablePath按平台遍历常见安装路径通过 RPCLs确认存在性。Windows 会遍历 C~Z 全部盘符并替换[DRIVE]、[USERNAME]占位符macOS 固定检查/Applications/Google Chrome.app/Contents/MacOS/Google ChromeLinux 依次检查/usr/bin/google-chrome、/usr/bin/chromium-browser等L317-L409探测用户数据目录findChromeUserDataDir在 Windows 遍历X:\Users\user\AppData\Local\Google\Chrome\User DatamacOS 检查/Users/user/Library/Application Support/Google/ChromeLinux 返回ErrUnsupportedOS——Linux 上无法自动定位用户数据目录需用--user-data显式指定L264-L315重启浏览器通过 RPCExecute在目标机器上以--remote-debugging-portport附加--user-data-dir、--restore-last-session、--keep-alive-for-test、--headless及透传参数启动 Chrome等待 2 秒初始化L156-L262建立端口转发在攻击者本机随机选取[40000, 50000)区间的绑定端口util.Intn(10000) 40000通过tcpproxy与core.ChannelProxy将本地端口转发到目标的调试端口127.0.0.1:debugPortKeepAlivePeriod为 60 秒、DialTimeout为 30 秒并把CursedProcess记录进core.CursedProcesses全局表扩展权限扫描与注入调用overlord.FindExtensionWithPermissions枚举扩展 debug target逐个执行chrome.runtime.getManifest()见 overlord.go检查 manifest 的permissions是否包含所需权限集合命中后通过overlord.ExecuteJS把载荷注入扩展上下文。扩展权限的两套匹配集合源码中定义了两套权限集合cursed-chrome.gocursedChromePermissions []string{overlord.AllURLs, overlord.WebRequest, overlord.WebRequestBlocking} cursedChromePermissionsAlt []string{overlord.AllHTTP, overlord.AllHTTPS, overlord.WebRequest, overlord.WebRequestBlocking}即优先寻找具备all_urlswebRequestwebRequestBlocking的扩展找不到时退而求其次接受http://*/*https://*/*webRequestwebRequestBlocking的组合。权限常量定义在 client/overlord/overlord.go。这些权限正是 CursedChrome 实现请求拦截、改写、伪造所必需的。找不到合适扩展时会输出No viable Chrome extensions were found。cursed edge针对 Edge 的同一套流程cursed edge与cursed chrome工作方式完全一致差别在于UI 上显示 Edge 而非 Chrome正如 Edge 自身的产品命名习惯进程名匹配msedge、microsoft-edge、msedge.exe、Microsoft Edgecursed-edge.go可执行文件与用户数据目录的探测路径改为 Microsoft Edge 对应位置Windows 下...\Microsoft\Edge\...macOS 下/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft EdgeLinux 下/usr/bin/microsoft-edge等见 cursed-chrome.go。实现上CursedEdgeCmd与CursedChromeCmd共用startCursedChromeProcess(true, ...)参数集合完全相同-r/-R/-e/-u/-p/-k/-H见 commands.go。cursed electron诅咒 Electron 应用cursed electron用于重启目标机器上的 Electron 应用并开启远程调试之后可用cursed console连接 debug target。实现位于 client/command/cursed/cursed-electron.go。与 Chrome/Edge 不同Electron 没有自动探测逻辑--exe参数为必填缺失时直接报错Missing --exe flag, see --help。其参数为参数简写默认值说明--exe-e必填远程 Electron 可执行文件的绝对路径--remote-debugging-port-r0随机远程调试端口执行流程与 Chrome 类似先用 RPCLs校验路径存在再用 RPCPs查找同名进程匹配绝对路径或 basename发现后要求确认并Terminate然后以--remote-debugging-portport重启并建立端口转发。启动完成后会查询 debug targets 并输出Found %d debug targets, good hunting!。注意限制部分 Electron 应用会禁用远程调试功能此时该功能无法生效这也是官方文档明确提示的前提。cursed console交互式 JavaScript REPLcursed console是 Cursed 的交互核心实现位于 client/command/cursed/cursed-console.go。使用前提是先用cursed chrome/cursed edge/cursed electron启动一个 cursed 进程用cursed命令可以查看进程列表。进入后的交互流程交互式选择一个 curse按 Bind Port / Session ID / 可执行路径展示由selectCursedProcess实现通过 DevTools/json端点查询 debug targetsoverlord.QueryDebugTargets再交互式选择目标展示 ID / Title / URL建立连接进入cursed »提示符的 REPL。REPL 内部使用readline库实现支持 vi 编辑模式跟随 Sliver 全局 VimMode 设置并内置了辅助钩子helperHooks——默认会执行console.log (...a) {return a;}以便在浏览器上下文中捕获 console 输出。内置命令命令功能:help显示帮助Available commands: :file / :help / :exit:file读取并执行本地.js文件:exit或exit退出控制台其他输入直接作为 JavaScript 在目标上下文执行返回结果显示在终端每次求值都通过overlord.ExecuteJS完成overlord.go其内部使用 chromedp 的Evaluate在目标 target 上执行代码因此你在 REPL 中输入的任何 JS 都会真实运行在受害者的浏览器/扩展上下文中。cursed cookies导出目标浏览器 Cookiecursed cookies用于把远程 cursed 进程的 Cookie 导出为本地文件换行分隔的 JSON。实现位于 client/command/cursed/cursed-cookies.go。交互式选择一个 curse调用overlord.DumpCookies提取全部 Cookie输出统计Successfully dumped N cookies默认保存为cookies-yyyyMMddHHmmss.json时间戳格式20060102150405可用--save/-s指定路径文件以os.WriteFile写入权限0o600内容为json.MarshalIndent美化后的 JSON。官方文档给出的完整运行示例[server] sliver (CHRONIC_GOAT) cursed chrome ... [server] sliver (CHRONIC_GOAT) cursed cookies ? Select a curse: 44199 [Session 56a5cd6f] /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [*] Successfully dumped 437 cookies [*] Saved to cookies-20220925182151.json更多子命令screenshot 与 rm除官方文档重点介绍的命令外Cursed 工具链还包含两个实用命令同样注册于 commands.gocursed screenshot对指定 debug target 截屏cursed-screenshot.go--quality/-qJPEG 质量1–100默认 100超出范围报错--save/-s保存路径默认screenshot-yyyyMMddHHmmss.png流程为选择 curse → 查询 targets → 选择 target →overlord.Screenshot截图 → 写盘权限0o644。cursed rm移除指定 cursecursed-rm.go位置参数为 cursed 进程的 Bind Port调用core.CloseCursedProcessesByBindPort关闭端口转发并清理全局注册表可选--kill/-k确认后通过 RPCTerminate连带杀死目标侧浏览器进程。底层原理端口转发 DevTools 协议 扩展注入从源码结构看Cursed 的架构可以归纳为三个层次远程调试桥接层目标侧浏览器以--remote-debugging-port启动调试服务监听在目标本机Sliver 客户端通过tcpproxycore.ChannelProxy建立本地端口到目标端口的转发复用 C2 信道无需目标开放额外入站端口。CursedProcess统一记录 SessionID、PID、绑定端口与转发关系client/core/curses.go进程退出或转发失败时自动从注册表清除DevTools 交互层基于 chromedpchromedp.NewRemoteAllocator连接远程调试端点实现QueryDebugTargetsHTTP GET/json枚举上下文、ExecuteJS对指定 target 执行 JS、DumpCookies、Screenshot等原语client/overlord/overlord.go扩展发现与注入层枚举扩展上下文后执行chrome.runtime.getManifest()读取权限containsAll校验权限集合命中后把 payload 注入扩展的 background 上下文使载荷获得webRequest/webRequestBlocking级别的全局请求控制能力。注意事项与适用前提数据丢失风险整个流程需要杀掉并重启浏览器进程官方源码明确警告DATA LOSS MAY OCCUR!并在杀进程前强制交互确认平台限制Linux 上cursed chrome/cursed edge无法自动定位用户数据目录ErrUnsupportedOS需显式传--user-data可执行文件自动探测同样只覆盖常见路径非常规安装需用--exe指定Electron 限制部分 Electron 应用禁用了远程调试cursed electron可能无法工作扩展依赖自动注入依赖目标已安装具备合适权限的扩展若找不到payload 注入会被跳过cursed chrome无--payload时仅重启开启调试仍可用cursed console手动控制会话类型所有 cursed 子命令均限定交互式 session 目标beacon 需先转交互interactive再使用安全边界Cursed 属于后渗透对抗工具仅应在获得授权的前提下用于红队演练与安全测试。总结Cursed 是 Sliver 中架构精巧的浏览器后渗透模块以重启浏览器开启远程调试 本地端口转发桥接 DevTools 协议控制为主线以扩展权限扫描 上下文注入为攻击面实现了绕过 U2F/Webauthn、硬件 attestation 与地理 IP 限制的实战能力。配合cursed、cursed console、cursed cookies、cursed screenshot、cursed rm等子命令形成从进程接管、代码执行到数据导出的完整闭环。掌握其参数语义与底层调用链commands.go、cursed-chrome.go、overlord.go即可在真实对抗场景中快速落地。赞分享网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载相关推荐Tempura性能优化提升iOS应用响应速度的7个最佳实践Tempura性能优化提升iOS应用响应速度的7个最佳实践 在iOS开发中应用性能直接影响用户体验和用户留存率。Tempura作为一个基于Redux和MVV网络安全Chrome DevTools协议终极指南10个高效浏览器自动化的设计模式Chrome DevTools协议终极指南10个高效浏览器自动化的设计模式 Chrome DevTools协议是浏览器自动化领域的核心技术它为开发者提供了控开发工具教程GraalVM Chrome Debugger 使用指南基于 Chrome DevTools 协议的多语言调试GraalVM Chrome Debugger 使用指南基于 Chrome DevTools 协议的多语言调试 Chrome Inspector 是 Graa编译器JIT编译语言运行时高性能计算内存管理上一篇BioMedKG模型架构深度解析DGI、GGD与GRACE对比分析指南下一篇效率倍增ShareX快捷键速查表含打印版电子版下载创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表