Windows NTLM中继攻击(PortBender二进制可执行文件)
前言
最近在完善自己的一套TTPs(战术、技术和程序)以应对未来的网络作战、项目和攻防演练需求,翻到了PortBender,我觉得不依赖C2和影响主机本身实现这一切非常有趣,于是单独开一篇文章来纪念它
我也计划在2025年前往英国,进行一场英国行,看到TryHackMe的庐山真面目,了解英国文化、英国黑客文化
NTLM relay
在“未强制启用smb签名”时,我们可以通过中转请求包(这里是SMB)到到另一个目的地,盗用其身份实现ntlm身份验证以及命令执行,甚至是搭建socks隧道
我们如何在远程攻击机启用ntlmrelayx.py且不依赖C2来实现这一切?
我在TryHackMe Hololive域渗透中曾使用过这样的打法来抵达域控,并拿下域控完全控制权
原解决方案
hololive原打法是关闭windows LanMan
Begin by disabling NetLogon. Find the command used below.
Command used: sc stop netlogon
Next, we need to disable and stop the SMB server from starting at boot. We can do this by disabling LanManServer and modifying the configuration. Find the command used below.
Command used: sc stop lanmanserver and sc config lanmanserver start= disabled
To entirely stop SMB, we will also need to disable LanManServer and modify its configuration. Find the command used below.
Command used: sc stop lanmanworkstation and sc config lanmanworkstation start= disabled
这样就能把445端口解放出来,然后通过端口转发来监听445端口并转发其端口流量到攻击机或jumpserver,从而进一步可实现ntlm relay。
但事实上这一方案并不一定适用于一部分场景,可能客户不希望我们“直接”破坏他们的SMB或其它使用NTLM身份验证的服务等其它因素
但我们出于某些原因而无法使用C2时,我们又该怎么办?
WinDivert - 端口流量重定向
第一次接触WinDivert是在CRTO的学习中,并通过CS来实现这一切
然鹅现在我们只是知道CS的PortBender是基于WinDivert实现的
但以我们目前的能力想要重新构建一个类似PortBender二进制可执行文件,我们或许需要做大量WinDivert的功课
PortBender二进制可执行文件
PortBender 是一种 TCP 端口重定向实用程序,允许红队操作员将发往一个 TCP 端口(例如 445/TCP)的入站流量重定向到另一个 TCP 端口(例如 8445/TCP)。
PortBender 包含一个攻击者脚本,操作员可以利用该脚本将该工具与 Cobalt Strike 集成。
我们查阅PortBender在github的源码,它由c和c++编写
由于我对CS了解并不足够多,所以我一直认为它只适用于CS框架,直到最后我发现了PortBender.sln
,这时候我意识到我可能错了
我查看了插件的release,它是一个zip,并且zip里面有一个PortBender.dll
,这时候我彻底明白应该如何改变这一切
只需要将PortBender的源码clone下来,使用我们的VS打开那个神圣的.sln
文件,然后通过VS编译为exe二进制可执行文件
这样我们就得到了一个PortBender.exe,从而脱离CS运行
也有大哥已经将PortBender脱离了出来并编译为exe在github上发布
https://github.com/exil-security/PortBender
一切顺利,接下来将8445流量转发到攻击机做ntlmrelay
这里利用chisel来做一个8445端口转发到我们攻击机的445端口
ntlmrelayx.py中继目标为DC
后续操作就是常规操作了。
通过这样的方式我们脱离了C2框架,避免了破坏原有已被SMB服务占用的445端口