1. 程式人生 > 其它 >CobaltStrike逆向學習系列(7):Controller 任務釋出流程分析

CobaltStrike逆向學習系列(7):Controller 任務釋出流程分析

這是[信安成長計劃]的第 7 篇文章
關注微信公眾號[信安成長計劃]

0x00 目錄

0x01 Controller->TeamServer

0x02 TeamServer->Beacon

0x03 流程圖

所有的任務在 Controller 處理以後,都會直接傳送到 TeamServer,接著等待 Beacon 回連的時候將任務取走,文章以 shell whoami 為例

0x01 Controller->TeamServer

當在 Console 中輸入命令回車後,會進入 BeaconConsole 進行處理

專門來處理 shell 命令,命令解析 popString 所返回的就是要執行的命令 whoami

接著會在 TaskBeacon 中處理執行邏輯,因為只有一個 Beacon 就直接跟入了

然後就是構造任務了,將資訊處理後用於 Beacon 去解析執行

之後會先列印執行日誌,然後才是真正的傳遞了

日誌記錄也是一樣通過 TeamQueue 傳給 TeamServer

TeamServer 在 ManageUser 中接到日誌

在處理以後直接新增廣播將資訊傳送出去

然後通過 BroadcastWriter 寫回給 Controller

接著 Controller 將任務傳送給 TeamServer

TeamServer 在接到以後同樣走對應的處理邏輯

從兩個引數中取出 BeaconId 和任務,然後進入 BeaconData 處理邏輯

這裡的有用程式碼也就是 else 中的 add 了,上面的判斷是 CS 的一個暗樁,執行三十分鐘後再執行命令就會直接釋出退出任務

在將任務新增到 List 以後,也會將 BeaconId 記錄下來

到這裡任務的釋出就完成了

0x02 TeamServer->Beacon

在 Beacon 迴心跳包的時候,會來請求任務

直接從任務佇列中取出資料

然後迴圈新增,並將新增過的移除,如果任務大於指定大小的話就會跳出迴圈

最後將任務佇列返回

之後再相應的將其他的內容取出

最後構造並返回,這裡會進行列印日誌的操作,輸出傳送了的命令的長度

在返回之後會對資料進行加密

首先會根據 BeaconId 取出對應的 AESKey 和 HmacSHA256Key

之後寫入系統時間/1000,任務長度,任務資料,並對其進行補齊,新增 A,補夠 16 的整數倍

然後進行 AES 加密

接著對資料進行 Hmac

之後將 AES 加密後的任務寫入,並將 Hmac 的前 16 位拼接到後面

之後便返回給 Beacon 了

0x03 流程圖