介绍
如果你是一名渗透测试人员并且喜欢摆弄 Windows,那么你可能读过 Raphael Mudge 的以下帖子:
在这篇文章中,他解释了 Windows 程序runas 的工作原理,以及**netonly标志如何允许创建本地标识与网络标识不同的进程(本地标识保持不变,而网络标识由 runas 使用的凭据表示)。
Cobalt Strike 提供了make_token命令来实现与**runas /netonly类似的结果。
img
如果您熟悉此命令,那么您可能遇到过 Beacon 创建的进程无法正确“继承”新令牌的情况。此命令的内部工作原理相当模糊,在 Google 上搜索“make_token cobalt strike”之类的内容并不能提供太多有价值的信息(事实上,分析其他框架(如Sliver或Covenant )的实现更有用)。
图 2-make_token 文档
在 Raphael Mudge 的视频《高级威胁战术(6/9):横向移动》中,我们可以通过以下语句获得有关命令的更多详细信息:
“如果你处于特权环境中,则可以使用 Beacon 中的 make_token 创建带有凭证的访问令牌”
“make_token 和 steal_token 的问题在于,它要求你处于管理员环境中,然后才能使用该令牌执行任何操作”
尽管描述中没有提到,但 Raphael 指出make_token需要管理上下文。但是,如果我们继续以非特权用户身份使用该命令……它就可以正常工作!我们这里遗漏了什么?
图 3-来自非特权会话的 make_token
这篇文章旨在进一步阐明make_token命令的工作原理及其功能和局限性。这些信息在您想要通过其他用户的凭证冒充其他用户以枚举或横向移动到远程系统的情况下非常有用。
值得注意的是,尽管我们讨论的是 Cobalt Strike,但这些知识完全适用于任何现代 C2 框架。事实上,出于本文的目的,我们利用了 Meterpreter 没有make_token模块这一事实,自己实现了它。
新的post/windows/manage/make_token模块的示例如下所示:
图4-Meterpreter make_token模块
您可以在以下链接中找到有关我们实施的更多信息: