赞
踩
Domain Fronting 域前置指一种用于隐藏真实C2服务器IP且同时能伪装为与高信誉域名通信的技术,其通过CDN节点将流量转发到真实的C2服务器,其中CDN节点 ip 通过识别请求的 Host 头进行流量转发,首先来了解下啥是CDN
CDN的全称是Content Delivery Network,即内容分发网络,使用户可就近取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度
可以看一下 b 站的视频:https://www.bilibili.com/video/BV1jS4y197zi
传统网络访问流程:
与传统访问方式不同,CDN 网络则是在用户和服务器之间增加 Cache 层,将用户的访问请求引导到 Cache 节点而不是目标服务器站点,要实现这一目的,主要是通过接管 DNS 实现
下图为腾讯 CDN 架构图
其中需要注意的是 CDN 的工作机制中一般情况下,1台 CDN 会同时负责多个网站的加速服务,这时 CDN 通过请求流量中请求头的 host 字段来判断用户所要访问的服务器,这也是 host 请求头存在的意义
如果对于 host 使用有问题的话可以看下这篇文章:[https://www.anquanke.com/post/id/195011#h2-1]
首先需要有自己的域名用来配合 CDN 来隐藏C2服务器,然后再申请一个 CDN 对我们的所申请的域名进行加速,在这个过程中CDN会要求我们在域名的解析配置中设置相应的 CNAME
添加 CDN,我使用的阿里云 CDN,可以看到现在阿里云的加速域名需要验证后才可以使用,且加速区域含中国内地时,加速域名必须备案,数据在8小时左右同步,演示我就用自己的域名了,实际中用自己的域名域前置就没有意义了
验证因为方法一我用不了,是不是阿里云搞得鬼(域名是的在腾讯云买的),用的文件验证
这里需要注意的是,文件验证我这里这里使用的裸域名,在域名解析设置时主机记录选择 @
关于裸域名可以看知乎回答:https://www.zhihu.com/question/20414602
添加之后更换解析记录值
1.配置完毕后,使用 nslookup 命令发现主机 IP 地址已经变化
2.测试:执行以下操作
curl 202.97.231.47 -H "Host: ocean.cn" -v
host 是配置的 CDN 加速域名
访问后可以在 CS web 日志中看到
也能说明 CDN 设置成功
3.使用 ping 检测可以发现各地 IP 地址都不相同
这里选取三个 CDN 地址进行接下来的操作
CDN 申请完成后,就可以开始编辑 Cobalt Strike 要用到的 C2 Profile 文件了,直接使用开源项目 Malleable-C2-Profiles 中的 amazon.profile,但需要把其中的 Host 头改成我们自己在 CDN 中绑定的域名
项目地址:https://github.com/rsmudge/Malleable-C2-Profiles/blob/master/normal/amazon.profile
修改以下几处
19行的 host
53行的 host
服务器使用命令开启 TeamServer
./teamserver xxx.xxx.xxx.xxx password amazon.profile
配置监听器
配置HTTPS Hosts为之前获取的CDN IP,HTTP Host(Stager)为 ocean888.cn,也就是我们配置的加速域名,端口80不能换,开启监听器
生成一个后门
触发后门文件,使用 wireshark 抓取流量
可以发现这里的 host 已经变成了 CDN 域名,在实际攻击中我们需要找一个高信誉域名在 CDN 加速平台加速
目标主机可以上线
利用 Domain Fronting 技术,在目标主机上只能看到系统是在和一个高信誉域名通信,并且不会产生任何与我们真实C2服务器的直接通信流量,伪装的同时还极佳地隐藏了我们的C2服务器,利用此技术,我们可以有效地躲避各种IDS,实施渗透测试
有时候使用socat进行转发的时候其稳定性以及速率可能不是那么好,对于流量比较多的情况也许可以使用iptables进行此操作,同时对cs服务器设定一些访问策略,对真实的cs服务器起到一定保护作用
iptables中的“四表五链”及“拥堵策略”
“四表”是指,iptables的功能——filter, nat, mangle, raw
有关iptables具体介绍可以看下面这篇文章
https://www.cnblogs.com/vathe/p/6973656.html
使用示例:
iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] –j[ACCEPT|DROP]
Iptables设置
首先我需要在跳板机A上使用以下命令将8081端口接收到的流量转发至CS服务器的80端口 (协议和端口可自由替换)
iptables -I INPUT -p tcp -m tcp --dport 8081 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8081 -j DNAT --to-destination xxx.xxx.xxx.xxx:8081//这个45323是我的teamserver连接端口,我也给转发到跳板机上去了,以后都从跳板机进行登录了
iptables -I INPUT -p tcp -m tcp --dport 45323 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 45323 -j DNAT --to-destination xxx.xxx.xxx.xxx:45323 iptables -t nat -A POSTROUTING -j MASQUERADE sysctl net.ipv4.ip_forward=1
使用iptables -nL --line-number -t 表名 查看当前设置好的规则
然后我们在cs服务器上设置对8081端口,以及45323端口的访问控制,以及在cs服务器上设置 对整个服务器(全部ip)禁止9100端口
iptables -I INPUT -p tcp --dport 8081 -j DROPiptables -I INPUT -p tcp --dport 45323 -j DROP //只允许跳板机访问这些端口端口 iptables -I INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 8081 -j ACCEPTiptables -I INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 45323 -j ACCEPT
iptables -I INPUT -p tcp --dport 8081 -j DROP
iptables -I INPUT -p tcp --dport 45323 -j DROP //只允许跳板机访问这些端口端口
iptables -I INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 8081 -j ACCEPT
iptables -I INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 45323 -j ACCEPT
同意来自xxxx访问45323,8081端口,拒绝了其他地址对45323以及8081端口的访问,iptables的策略设置完成,把服务器地址改成跳板机的ip
然后我们建立一个http的监听器看看,host和stager都填写跳板机
之后简单生成一个后门,运行上线,可以看到cs的web日志显示出我的跳板机访问了 checksum8算法生成的url
一些文章通过URL的生成算法,以及对Beacon stage的解析来寻找Beacon staging server
https://mp.weixin.qq.com/s/WUf96myUi8F3X_eNWPRTdw
对于如何Bypass cs beacon的扫描,各位可以看下这篇文章
https://mp.weixin.qq.com/s/fhcTTWV4Ddz4h9KxHVRcnw
访问跳板机的此目录可下载 stage 文件,直接访问真实的cs服务器则无法下载。当然这种办法治标不治本,只能对真实的cs服务器起到那么一点保护作用,cs服务器的一些前期隐藏工作和检测规避手段网上有很多
转载链接:设置iptables规则来保护CS服务器
Cs Teamserver50050端口太过瞩目,可能被蓝队溯源或者被 IDS 检测,所以需要更换成比较隐蔽的端口
vim teamserver
修改端口即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。