一、介绍
CobaltStrike是一款渗透测试神器,被业界人称为CS神器。CobaltStrike分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。
CobaltStrike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,windows exe 木马生成,windows dll 木马生成,java 木马生成,office 宏病毒生成,木马捆绑。钓鱼攻击包括:站点克隆,目标信息获取,java 执行,浏览器自动攻击等等强大的功能!
二、C2隐藏
修改端口:
在server端使用以下命令编辑teamserver
1 | vim teamserver |
对# start the team server进行修改,其中server_port=50050为默认端口,修改为任意的即可
使用以下命令启动服务看一下端口是否修改成功
1 | ./teamserver 127.0.0.1 password |
修改证书:
Cobalt Strike默认的证书,已经被各种WAF防火墙加入防火墙,所以需要生成新的证书,这里我们用JDK自带的keytool证书工具进行生成
Cobalt Strike默认证书文件名为cobaltstrike.store,口令为123456,使用以下命令查看详细信息
1 | keytool -list -v -keystore cobaltstrike.store |
可以看到Alias name、Owner、Issuer特征非常明显,现在生成新的证书
1 | 360 |
然后丢进Cobalt Strike目录,把原来的cobaltstrike.store替换掉即可
修改配置:
由于Cobalt Strike各种流量特别多,容易被发现,所以Cobalt Strike开发团队就开发了配置文件功能,用户可以自定义客户端和服务端双向通信的流量格式以及软件相应配置等等
1 | 配置文件编写指南:https://www.cobaltstrike.com/help-malleable-c2 |
当获取到成品文件后,使用以下命令启动,如果启动成功,代表可以使用
1 | ./teamserver 127.0.0.1 password loader.profile |
域前置:
介绍
域前置(Domain Fronting)是一种隐藏连接真实端点来规避互联网审查的技术,在应用层上运作时,域前置使用户能够通过HTTPS连接到被屏蔽的服务,而表面上像是在与另一个完全不同的站点通信,其主要技术是利用cdn节点将流量转发给真实的c2服务器,从而很好的规避流量审查,利用条件:
1 | 1、备案好的域名,这里使用的是腾讯云,不用备案的域名网站:https://freenom.com/ |
前置知识
HTTP:
在HTTP请求中,当一个IP服务器绑定了多个域名,客户端对其进行访问时,怎么才能确定访问那个域名呢?解决方法有两种,第一种是把不同的域名绑定到不同的端口上,使用以下的方式进行访问
1 | 127.0.0.1:8080 |
或者直接指定对应的文件目录
1 | 127.0.0.1/decms/index.php |
不管使用那种方法,服务端都是通过数据包中的HOST进行判断的
HTTPS:
在HTTPS三次请求握手前,会先请求证书,那服务器绑定了多个域名,如何确认用户请求的是那个域名,因为只有确认了访问的域名,才会分发相关的证书,这个时候还没有到建立TCP连接的那一步,所以就没有HOST字段,服务端并不知道访问的是谁,这个就涉及到了一个新的概念:SNI
SNI:
SNI(Server Name Indication)是一个TLS的扩展,用于允许多个网站托管在同一个服务器 上,解决了一个服务器上使用了多个域名和证书的情况,解决方法就是在请求证书时,补充了一个HOST信息,对于TLS1.3来说,这个扩展是加密的,也就是ESNI(Encrypted Server Name Indication)
CURL:
使用以下命令进行验证,curl的目标网站是qq.com,但是确指定了HOST,所以实际上访问的是baidu的站点
1 | curl -v https://qq.com -H "host:baidu.com" |
可以看到,请求的证书是qq的,但是实际访问的确是baidu,由于qq服务器上没有baidu的站点,所以请求无效,如果存在,则会返回baidu站点的内容,在域前置中,使用无害的qq域名来初始化连接、公布给审查者,而实际要连接的被封锁域名baidu仅在创建加密的HTTPS连接后发出,使其不以明文暴露给网络审查者,从而规避流量审查
利用方法
- 登录腾讯云 –> 搜索域名分发网络 –> 点击域名管理 –> 添加域名
- 在源站配置中,添加源站地址为VPS-ip
- 上面的步骤完成之后,选择添加即可,随后等待部署
- 打开以下链接,下载对应的文件
1 | https://github.com/rsmudge/Malleable-C2-Profiles/blob/master/normal/amazon.profile |
- 修改http-get和http-post的host参数为刚才添加的域名
- 启动CS,带上刚才的配置文件
- 使用CS新建监听器,HTTP HOST为cdn的域名,HTTP HOST Header设置为申请的高可信域名
- 测试CDN是否指向我们的CS
1 | curl xxx.cn.dsa.dnsv1.com.cn/aaa -H "HOST:xxx.cn" |
- 生成木马,成功上线
云函数:
云函数隐藏技术最早是国外提出的,黑客利用azure进行隐藏C2,技术核心是通过云函数进行流量转发,从而达到隐藏,在国内也有对应的云函数厂商,以下使用腾讯云的云函数进行实现
- 控制台 –> 搜索函数服务 –> 函数管理 –> 新建
- 函数名称随意,运行环境根据其开发语言进行选择,随后点击函数代码,把以下内容进行复制粘贴,记得修改C2地址
1 | # -*- coding: utf8 -*- |
- 函数代码填完后,创建触发器
- 创建好后,点击API服务名,点击配置管理,然后点击编辑,修改前端路径为/
- 然后直接发布即可
- 创建y.profile文件,代码如下
1 | set sample_name "kris_abao"; |
- 启动CS,带上创建好的配置文件
1 | ./teamserver 127.0.0.1 password y.profile |
- 随后创建监听器,修改HTTP HOST为刚才的公网访问地址,记着别加端口和HTTP
- 使用web访问一下看看是否可以监听到,查看web日志
- 生成木马,测试成功上线
三、总结
使用域前置可以很好的规避流量审查,防止被溯源,但是主流的云服务商已禁用该技术,使用其功能也会产生一定的费用,前置的域名也有局限性,必须由相同服务商提供的域名才可以被前置,其次国内的域名也需要备案,云函数则是有ip问题,在受害机上线后,ip会随机的进行变换,如果批量下马上线一堆,就只能依靠user等信息来进行判断,还有在云函数日志中也会记录转发的用户ip,不过可以使用代理解决掉此问题