win xp,2003環境上線cobaltstrike
問題分析
在 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上。
