win xp,2003环境上线cobaltstrike
时间:2022-03-17
问题分析
在 I-IVV 的需求场景中,经常会遇到一些比较古老的环境,例如 windows xp、win server 2003系统,为了让整体流程更流畅丝滑,对这类场景也需要找到合理的解决方法,且解决方案应尽量贴合现存使用习惯。
兼容问题的根本点在于,shellcode的兼容性+shellcodeloader的兼容性。
1、shellcode
2、loader
其中最重要的是解决shellcode的问题。
解决思路
1、自写stage模式的shellcode
需要学习shellcode的开发环境搭建+开发方法等
参考代码如下: https://github.com/AgeloVito/CobaltstrikeSource/blob/master/ShellcodeToC_wininet/Shellcode_wininet.cpp @mai1zhi2
优点:shellcode自定义程度高,免杀效果好。
缺点:开发成本较高,且只能适用stage模式
如若开发stageless模式的shellcode还需重写beacon.dll的功能,技术、时间成本就高太多了。
2、复用低版本的shellcode
经过测试,CobaltStrike3.1.x 系列中httpListener的shellcode兼容性最高,
其 stage,stageless模式的shellcode都能很好的兼容windows xp、win server 2003系统。
优点:获取成本低,且能复用到高版本的CobaltStrike中,不用换c2工具。
缺点:shellcode免杀属性不太好(可以针对shellcode进行混淆等处理,这里不展开)。
02
具体实现
综合各种考量,我们最终选定的低版本cs为 May 4, 2019 - Cobalt Strike 3.14
按照以下步骤将其复用至高版本 Cobalt Strike 中
01
配置malleable-c2 profile一致
需要在profile配置中保持一致的几个点
stage
http-stager.uri_x86
http-stager.uri_x64
stageless
http-get.uri
http-post.uri
其他的profile配置项参考各版本对应支持的配置就好,相同的配置选项尽量保持一致即可。
低版本
高版本
02
配置host头
如果使用了域前置,我们需要在低版本的profile中配置host头
stage
http-stager.client
stageless
http-get.client
http-post.client
http-config.header
高版本的cs中,http-config.header 不需要在profile中写为定值,在gui中配置Listener的时候设置就好,且gui中配置的Host Header也会覆盖掉profile的该项值。
03
复用低版本shellcode
当我们部署好高版本的c2以后,只要我们遇到windows xp 、win server 2003 这类系统,这时候我们就可以在本地临时起一个低版本cs,通过设置其监听器地址与部署好的高版本监听器相同,生成基于http的x86 shellcode,再使用自写兼容windows xp 、win server 2003 系统的loader,从而达到全版本兼容的可执行程序,我们将便可将其权限上到CobaltStrike4.4上。
我们的CobaltStrike4.4 HttpListener配置如下:
CobaltStrike3.14 HttpListener配置如下
然后根据使用需求生成 stage或者stageless形式的shellcode即可。
03
效果展示
如下图,完美兼容,权限上到了cs4.4上。