安裝和設置
系統要求
Cobalt Strike的最低系統要求
2 GHz +以上的cpu
2 GB RAM
500MB +可用空間
在Amazon的EC2上,至少使用較高核數的CPU(c1.medium,1.7 GB)實例主機。
支持的操作系統
以下系統支持Cobalt Strike Team Server:
Kali Linux 2018.4 - AMD64
Ubuntu Linux 16.04,18.04 - x86_64
Cobalt Strike客戶端在以下系統上運行:
Windows 7及更高版本
MacOS X 10.13及以上版本
Kali Linux 2018.4 - AMD64
Ubuntu Linux 16.04,18.04 - x86_64
更新Cobalt Strike
要充分利用Cobalt Strike的功能,您必須使用許可證密鑰更新許可產品。試用程序中包含執行此操作的更新程序
此程序接受許可證密鑰並為您獲取最新的Cobalt Strike版本。授權的Cobalt Strike軟件包括防病毒的逃避功能,並刪除了試用程序中未授許可申明。
windows
1.進入到到Cobalt Strike文件夾
2.雙擊update.bat
Linux
輸入以下內容:
cd /path/to/cobaltstrike
./update
MacOS X
1.進入到Cobalt Strike文件夾
2.雙擊“ Update Cobalt Strike.command”
確保使用許可證密鑰更新team server和客戶端軟件。Cobalt Strike通常根據每個用戶獲得許可。team server不需要單獨的許可證。
如何重置許可證密鑰
Cobalt Strike的更新程序只會詢問您的密鑰一次。之后,它會記住你的鑰匙。如果需要更改密鑰,只需刪除存儲在主目錄中的.cobaltstrike.license文件即可。再次運行更新程序,Cobalt Strike將要求您提供新密鑰。
安裝Cobalt Strike
Cobalt Strike依賴於Oracle Java 1.8,Oracle Java 11或OpenJDK 11環境。
Linux
1.為Linux 設置推薦的Java環境
2.解壓cobaltstrike-trial.tgz
tar zxvf cobaltstrike-trial.tgz
MacOS X
1.為MacOS X 設置推薦的Java環境
2.雙擊cobaltstrike-trial.dmg文件以安裝它。
3.將Cobalt Strike文件夾拖到“應用程序”文件夾中。
windows
1.為Windows 設置推薦的Java環境
2.在下載並安裝Cobalt Strike之前禁用防病毒軟件。
3.使用您喜歡的zip工具將cobaltstrike-trial.zip解壓到您首選的安裝位置。
啟動Cobalt Strike
Team Server
Cobalt Strike分為客戶端和服務器端。該服務器端被稱為團隊服務器,是Beacon有效負載的控制器,同時Cobalt Strike也具有社會工程學功能。團隊服務器還存儲Cobalt Strike收集的數據,並管理日志記錄。
Cobalt Strike團隊服務器必須以root身份運行在所支持的操作系統上。要啟動Cobalt Strike團隊服務器,請使用Cobalt Strike Linux軟件包附帶的teamserver腳本。
./teamserver 服務器IP地址 密碼
團隊服務器有兩個必要參數和兩個可選參數。第一個是團隊服務器的IP地址。Cobalt Strike使用此值作為其默認的服務器主機。第二個是您的團隊成員用於將Cobalt Strike客戶端連接到團隊服務器的密碼。
第三個參數是可選的。此參數指定Malleable C2通信配置文件。
第四個參數也是可選的。此參數指定以YYYY-MM-DD為格式的結束日期。團隊服務器會將此結束日期嵌入其生成的每個Beacon中。Beacon有效負載將拒絕在此結束日期或之后運行。如果Beacon有效載荷在此結束日期或之后喚醒,它也將被運行退出。
當團隊服務器啟動時,它將發布團隊服務器SSL證書的SHA256哈希值。您應該將此哈希值分發給您的團隊成員。當您的團隊成員連接時,Cobalt Strike客戶端會在向團隊服務器進行身份驗證之前詢問是否驗證此哈希。這是防止中間人攻擊的重要保護。
Cobalt Strike Client
Cobalt Strike客戶端連接到團隊服務器。要啟動Cobalt Strike客戶端,請使用軟件包中附帶的啟動程序。不帶任何參數。當Cobalt Strike客戶端啟動時,您將看到一個連接對話框。
Linux下:
Windows下:
在“host”字段中指定團隊服務器的ip地址。團隊服務器的默認端口是50050.很少有人更改此設置。“user”字段是團隊服務器上的用戶名稱。將此更改為您的名稱。“password”字段是團隊服務器的密碼。點擊Connect連接到Cobalt Strike團隊服務器。如果這是您與此團隊服務器的第一次連接,Cobalt Strike將詢問您是否識別此團隊服務器的SSL證書的SHA256哈希值。如果需要,請點擊OK,Cobalt Strike客戶端將連接到服務器。Cobalt Strike還會記住這個SHA256哈希,以便以后方便連接。
您可以通過Cobalt Strike - > Preferences - > Fingerprints管理這些哈
希值。
Cobalt Strike會跟蹤您連接的團隊服務器並記住您的信息。從連接對話框的左側選擇其中一個團隊服務器配置文件,以使用其信息自動填充連接對話框。您也可以通過Cobalt Strike - > Preferences - > Team Servers修改此連接。
功能參考
Application Browser
要查看受控的應用程序,請進入View -> Applications。這將打開一個Applications選項卡,其中包含一個列表,顯示System Profiler受控的所有應用程序信息。
Analyst技巧
應用程序瀏覽器有很多信息可用於對目標攻擊的方法。以下是如何充分利用此輸出的方法:
內部IP地址字段是從沒有危險的未知簽名Java小程序中收集的。如果此字段顯示為unknown,則表示Java applet可能沒有被運行。如果您在此處看到IP地址,則表示未簽名的Java小程序已被執行。
Internet Explorer將輸出用戶安裝的基本版本信息。隨着Internet Explorer獲取到更新信息后 , 它的輸出的版本信息不會被更改。Cobalt Strike使用JScript.dll 版本號來判斷Internet Explorer的補丁等級。進入到support.microsoft.com並搜索JScript.dll的內部版本號(版本字符串中的第三個數字)以將顯示其Internet Explorer更新版本信息。
應用程序旁邊的A * 64表示它是x64位應用程序。
Attacks-->web Dive-by-->system profiter
Client-side Reconaissance
Artifact Kit
Cobalt Strike使用Artifact Kit生成其可執行文件和DLL。Artifact Kit是一款商業框架,用於構建可逃逸某些防病毒產品的可執行文件和DLL的檢查。
Artifact Kit理論
傳統的防病毒產品使用簽名來識別已知的惡意信息。如果我們將已知的惡意shellcode嵌入到可執行文件中,則防病毒產品將識別shellcode並將可執行文件標記為惡意軟件。
為了逃避這種檢測,攻擊者以某種方式混淆shellcode並將其嵌套於二進制文件中是很常見的。這種混淆可以逃避那些使用簡單字符串搜索來識別惡意代碼的反病毒產品。
有許多防病毒產品在進行了病毒庫更新后,防病毒產品會模擬虛擬沙箱中可執行文件的來檢查。通過每個模擬的運行步驟,防病毒產品會在模擬的進程空間中檢查已知的錯誤。如果出現已知錯誤,則防病毒產品會將可執行文件或DLL標記為惡意。這種技術使許多編碼器和加載器會被AV檢查到,而這些編碼器和加載器試圖隱藏基於簽名的防病毒產品中的已知錯誤。
Cobalt Strike與此相反,防病毒沙箱有局限性。它不是一個完整的虛擬機。防病毒沙箱無法模擬系統行為。Artifact Kit是可執行文件和DLL模板的集合,它依賴於反病毒產品不會模擬的某些行為來恢復位於二進制文件內的shellcode。
其中一種技術[參見:Artifact Kit中的 src-common/bypass-pipe.c]生成可執行文件和DLL,它們通過命名管道為自己提供shellcode。如果防病毒沙箱不能模擬命名管道,它將找不到已知的惡意shellcode。
Artifact Kit無效的原因
當然,反病毒產品可能會破壞Artifact Ki的特定功能。如果反病毒軟件供應商為您使用的Artifact Kit進行數字簽名檢查,那么它創建的可執行文件和DLL將被AV檢查到。隨着時間的推移,這種情況開始發生在Cobalt Strike 2.5及以下的版本中。如果您想從Artifact Kit中發揮最大的作用,那么您將使用其中一種技術作為基礎來構建您自己的Artifact Kit套件。
即使這遠遠還夠,因為反病毒廠商首先要確定可執行文件或DLL是否存在已知風險或未知風險或未發現和可執行文件或DLL。其中一些防病毒產品會自動將未知的可執行文件和DLL自動發送給反病毒廠商進行進一步分析並告警用戶。並將未知的可執行文件和DLL視為惡意。這取決於反病毒產品及其設置。
注意:在這種情況下,沒有任何“混淆”可用。你面對的是另一種檢查方式,需要相應地改變。以此和處理應用程序白名單相同的方式來處理這些情況。需要嘗試找到一個已知可用程序(例如,powershell),它將使你的有效負載可有效執行。
如何使用Artifact Kit
從授權的Cobalt Strike 進入Help -> Arsena來下載Artifact Kit。
Strategic Cyber LLC將Artifact Kit分發為.tgz文件。使用tar命令將其解壓縮。Artifact Kit包含build.sh腳本。在Kali Linux上運行此腳本,使用Minimal GNU for Windows Cross Compiler構建默認的Artifact Kit技術。
Artifact Kit構建過程
Artifact Kit構建腳本為每個Artifact Kit技術創建一個包含模板的文件夾。要使用Cobalt Strike技術,請轉到Cobalt Strike - > Script Manager,然后從該文件夾中加載artifact.cna腳本。
我們鼓勵您修改Artifact Kit及其代碼,以滿足您的特定需求。雖然熟練的C程序員可以使用Artifact Kit做更多的事情,但非程序員也可以使用Artifact Kit。例如,一個主要的反病毒產品喜歡在每次發布時都在Cobalt Strike的試用版中為可執行文件寫入數字簽名。直到Cobalt Strike 2.5后,Cobalt Strike的試用版和許可版在其可執行文件和DLL中使用了命名管道技術。該供應商將為可執行文件使用的命名管道字符串也寫一個數字簽名。逃避它們的數字簽名,可在執行后釋放其本身的字符特征,就像在管道技術的源代碼中更改管道的名稱一樣簡單。
Artifact Kit使用
Cobalt Strike許可證授權文件
Cobalt Strike的許可版本需要有效的授權文件才能啟動。授權文件是加密的blob,它提供有關Cobalt Strike產品許可的信息。此信息包括:許可證密鑰,許可證到期日期以及與許可證密鑰綁定的ID號。
如何獲得授權文件
內置的更新程序在運行(built-in update program )時從Cobalt Strike的更新服務器請求一個授權文件。即使您的Cobalt Strike版本是最新的,更新程序也會下載新的授權文件。這允許授權文件與Strategic Cyber LLC的記錄中的許可日期保持同步。
許可證到期后會發生什么
Cobalt Strike將在其授權文件到期時阻止啟動。如果授權文件在Cobalt Strike運行時失效,則不會產生任何影響。許可的Cobalt Strike產品僅在啟動時檢查授權文件。
授權文件什么時候到期
當您的Cobalt Strike許可證到期時,您的授權文件將過期。如果續訂Cobalt Strike許可證,請運行更新程序在運行(built-in update program )以使用最新信息刷新授權文件。
進入到Help -> System Information以查找授權文件何時到期。查找“ Other”部分下查找“有效”值。請記住,客戶端信息和Team Server信息可能具有不同的值(取決於使用的許可證密鑰以及上次刷新授權文件的時間)。
當Cobalt Strike的授權文件在其有效期限的30天內發出警告時,它也會發出警告。
如何將授權文件傳輸至封閉環境
授權文件是cobaltstrike.auth。更新程序始終將此文件與cobaltstrike.jar放在一起。在封閉環境中使用Cobalt Strike:
1.下載https://www.cobaltstrike.com/download上的Cobalt Strike試用包
2.從互聯網連接系統更新Cobalt Strike試用包
3.將更新的cobaltstrike 文件夾的內容復制到您的環境中。最重要的文件是cobaltstrike.jar和cobaltstrike.auth。
Cobalt Strike是否致電Strategic Cyber LLC
在更新過程中,Cobalt Strike不會給Strategic Cyber LLC“致電”。授權文件由更新過程生成。
如何使用舊版本的Cobalt Strike並刷新授權文件
Cobalt Strike 3.8及以下版本不檢查或要求授權文件。
Cobalt Strike 3.9及更高版本檢查與cobaltstrike.jar文件位於同一目錄的cobaltstrike.auth文件。從另一個文件夾更新Cobalt Strike並將新的cobaltstrike.auth文件復制到包含舊版Cobalt Strike的文件夾中。授權文件與產品的特定版本無關。
什么是客戶ID值
客戶ID是與Cobalt Strike許可證密鑰關聯的4字節數字。Cobalt Strike 3.9及更高版本將此信息嵌入Cobalt Strike生成的payload stagers 和 stages generated中
如何在Cobalt Strike artifact中找到客戶ID值
客戶ID值是Cobalt Strike 3.9及更高版本中Cobalt Strike payload stager的最后4個字節。
此屏幕截圖是來自試用版的HTTP stager。試用版的客戶ID值為0.此stager的最后4個字節(0x0,0x0,0x0,0x0)顯示了這一點。
HTTP Payload Stager(Cobalt Strike Trial)
客戶ID值也存在於payload stage,但還有更多的恢復步驟。Cobalt Strike不會在其網絡流量或工具的其他部分中使用客戶ID值。
如何使用此ID保護不同的紅隊基礎架構受交叉標識的影響
如果每個team server上都有唯一的授權文件,則每個team server和源自它的 artifacts將具有不同的ID。
每次運行更新程序時,Cobalt Strike的更新服務器都會生成一個新的授權文件。每個授權文件都有一個唯一的ID。Cobalt Strike僅傳輸team server的ID。它不會從GUI或無客戶端的授權文件傳播ID
Beacon
Beacon是Cobalt Strike有效載荷,用來模擬高級的攻擊。使用Beacon通過HTTP,HTTPS或DNS來建立通信。您還可以通過控制Windows命名管道上的點對點Beacons來限制哪些主機可以通信。
Beacon非常靈活,支持異步和交互式通信。異步通信延遲低又慢。Beacon會將任務返回給服務器請求,並下載任務,然后進入睡眠狀態。交互式通信是實時執行。Beacon的網絡指標具有malleable性。重新定義Beacon與Cobalt Strike malleable C2之間的建立。這可以使您將Beacon活動作為其他惡意軟件或混淆加密的流量為合法流量。
Beacon控制台
右鍵單擊Beacon會話並選擇 interact(交互)以打開Beacon的控制台。控制台是Beacon會話的主要用戶界面。Beacon控制台允許您查看向Beacon發出的任務以及何時下載它們。Beacon控制台也是命令輸出和其他信息輸出的地方。
Beacon控制台
在Beacon控制台的輸入和輸出之間是一個狀態欄。此狀態欄包含有關當前會話的信息。在其默認配置中,狀態欄顯示目標的NetBIOS名稱以及當前會話的用戶名和PID以及Beacon的最后記錄時間。
通過GUI或控制台發送給Beacon的每個命令都將顯示在此窗口中。如果其他隊友發出命令,Cobalt Strike將使用他們的handle來預先修復命令。
您可能會花費大部分時間在Beacon控制台中使用Cobalt Strike。在Beacon控制台中鍵入help以查看其可用的命令。鍵入help后跟命令名稱以獲取詳細幫助。
Beacon 菜單
右鍵單擊Beacon或Beacon控制台內部以訪問Beacon菜單。這與用於打開Beacon控制台的菜單相同。ACCESS菜單包含操作授信material和提升訪問權限的選項。Explore菜單包含用於提取信息與目標系統交互的選項。通過Pivoting菜單,您可以設置工具以通過Beacon隧道進行傳輸流量。Session菜單是您管理當前Beacon會話的位置。
Beacon 菜單
Cobalt Strike的一些可視化(pivot圖和會話表)允許您一次選擇多個Beacon 。通過此菜單產生的大多數操作都將適用於所有選定的Beacon會話。
異步和交互式操作
請注意,Beacon是異步有效負載。命令不會立即執行。每個命令都進入隊列。當Beacon驗入(連接到您)時,它將下載這些命令並逐個執行。此時,Beacon還會顯示它為您提供的任何輸出。如果輸入有誤,請使用clear命令清除當前Beacon的命令隊列。
默認情況下,Beacons每60秒驗入一次。您可以使用Beacons sleep命令更改此設置。使用sleep命令然后以秒為單位來指定Beacon應該驗入的頻率時間。您還可以指定0到99之間的第二個數字。此數字是波動因素。Beacon會根據您指定為波動因素的隨機百分比來改變每個 Beacons 的驗入時間。例如,sleep 300 20將使Beacon以20%的波動百分比來休眠300秒。這意味着,每次進入Beacon后,Beacon將在240到300秒之間休眠一段隨機值。
要每秒多次檢查Beacon,請嘗試sleep 0。這是交互模式。在此模式下,命令將立即執行。您必須先讓Beacon進行交互,然后才能將流量通過隧道傳輸。一些Beacon命令(例如,browserpivot和desktop等)將在下次驗入時自動將Beacon置於交互模式。
運行命令
Beacon的shell命令將Beacon通過受害主機上的cmd.exe執行命令。命令執行完成后,Beacon將向您顯示輸出信息。
使用不帶cmd.exe的run命令執行。run命令會將輸出顯示給您。在后台運行的程序執行命令時並不能捕獲到其輸出。
使用powershell命令在受害的主機上使用PowerShell執行命令。使用powerpick命令在不使用powershell.exe的情況下執行PowerShell cmdlet。此命令依賴於Lee Christensen開發的Unmanaged PowerShell技術。powershell和powerpick命令將使用您當前的令牌。
psinject命令將向特定進程中注入非托管PowerShell,並從該位置運行您的Cmdlet。
PowerShell導入命令將PowerShell腳本導入到Beacon。PowerShell、Powerpick和psinject命令將導入腳本中的Cmdlet。Beacon一次只能保存一個PowerShell腳本。導入空文件以從Beacon中清除導入腳本。
execute assembly命令將運行本地.NET可執行文件作為Beacon post-exploitation job.。可以將參數傳遞給此程序集,就像它是從Windows命令行界面運行的一樣。此命令還將繼承您當前的令牌。
如果您希望Beacon從特定目錄執行命令,請使用Beacon控制台中的cd命令切換Beacon進程的當前目錄。該PWD命令將顯示當前目錄,該SETENV命令將設置環境變量。
會話傳遞
使用spawn命令為偵聽器生成的會話。spawn命令接受一個系統架構(例如,x86,x64)和一個偵聽器作為其參數。
默認情況下,spawn命令將在rundll32.exe中生成一個會話。可能會被管理員會發現rundll32.exe定期連接到Internet很異常。找到一個更好的程序(例如,Internet Explorer)並使用spawnto命令來使Beacon應該將會話注入到哪個程序中。spanwto命令要求您根據需要指定要生成的程序的系統架構和完整路徑。鍵入spawto並按Enter鍵顯示Beacon返回其默認行為。
inject和spawn命令都將所需偵聽器的stager注入到內存中。這個stager試圖回連您,將請求的有效負載轉移到內存中。如果stager無法通過任何網絡防火牆出口限制,您將無法獲得會話。
使用dllinject [pid]將反射DLL注入進程。使用shinject [pid] [architecture] [/path/to/file.bin]命令將shellcode從本地文件注入到目標進程中。使用shspawn [archicture] [/path/to/file.bin]生成的“spawn to”進程,並將指定的shellcode文件注入到該進程中。
使用[archicture] [/path/to/file.bin] 在另一個進程中加載磁盤上的DLL。
替換父進程
使用ppid [pid]為Beacon會話運行的程序分發備用父進程。這是一種讓您的執行行為與目標上的正常執行行為融為相似的方法。當前的Beacon會話必須擁有備用父進程的權限,如果備用父進程與Beacon位於同一桌面會話中,則最好。鍵入ppid,不帶任何參數,在沒有欺騙父進程的情況下進行Beacon會話啟動。
runu命令將以另一個進程作為父進程執行命令。此命令將以其備用父進程的權限和桌面會話一起運行。當前的Beacon會話必須擁有備用父進程的最高權限。如果另一個父進程在另一個桌面會話中,就可以了。spawu命令在runu上生成一個會話(通過powershell.exe),以另一個進程作為父進程。這些命令是在桌面會話之間移動而不進行遠程進程注入的一種方法。
欺騙進程參數
每個Beacon都有一個內部的命令列表,它應該帶有欺騙參數。當Beacon運行與列表匹配的命令時,Beacon:
1.以掛起狀態啟動匹配的進程(使用偽參數)
2.使用真實參數更新進程內存
3. 恢復進程
結果是記錄進程啟動的主機工具將看到偽參數。這有助於掩飾您的真實執行行為。
使用argue [command] [fake arguments]將命令添加到此內部列表。[command]部分可以包含環境變量。使用argue [command]從此內部列表中刪除命令。argue,它本身列出了這個內部列表中的命令。進程匹配邏輯是准確的。如果Beacon嘗試啟動“net.exe”,它將無法與其內部列表中的net,NET.EXE或c:\windows\system32\net.exe匹配。它只會匹配net.exe。x86 Beacon只能欺騙x86子進程中的參數。同樣,x64 Beacon只能欺騙x64子進程中的參數。真正的參數將被寫入到包含偽參數的內存空間中。如果實參數比偽參數長,則命令將啟動失敗。
上傳和下載文件
該download命令將下載請求的文件。不需要在文件名周圍提供帶空格的引號。Beacon是為低速度和緩慢的數據傳輸而建立的。在每次連接期間,Beacon將下載其任務要獲取的每個文件的固定塊。這個數據塊的大小取決於Beacon當前的數據通道。HTTP和HTTPS通道以512KB塊的形式提取數據。
輸入downloads 命令來查看當前Beacon正在進行的文件下載列表。使用cancel命令,后跟文件名,將取消正在進行的文件下載。您可以在cancel命令中使用通配符,一次取消多個文件下載。
進入Cobalt Strike中的View->Downloads,查看您的團隊成員迄今為止已下載的文件。只有已完成的下載才會顯示在此選項卡中。下載的文件存儲在團隊服務器上。要將文件傳回到系統中,請在此處突出顯示它們,然后按“同步文件”。最后,Cobalt Strike會將所選文件下載到系統上您選擇的文件夾中。
該upload命令將文件上傳到主機中。
上傳文件時,有時需要更新其時間戳,使其與同一文件夾中的其他文件混合。使用timestomp命令執行此操作。timestomp命令將一個文件的修改、訪問和創建時間與另一個文件匹配。
文件系統命令
使用ls命令列出當前目錄中的文件。使用mkdir創建目錄。rm將刪除文件或文件夾。cp將文件復制到目標文件中。mv移動文件
Windows注冊表
使用reg query [x86 | x64] [HIVE \ path \ to \ key]查詢注冊表中的特定項。此命令將輸出該鍵和任何子鍵列表中的值。需要x86/x64選項,並強制Beacon使用注冊表的WOW64(x86)或本機視圖。reg queryv [x86 | x64] [HIVE \ path \ to \ key] [value]將查詢注冊表項中的特定值。
Keystrokes and Screenshots
Beacon用於記錄鍵盤和截屏的工具,旨在注入到另一個進程中,並將其結果報告給您的Beacon。要啟動鍵盤記錄器,請使用keylogger pid將其注入到x86進程中。使用keylogger pid x64注入到x64進程中。explorer.exe是此工具的一個很好的候選者。單獨使用keylogger將鍵盤記錄器注入到臨時進程中。鍵盤記錄器將監控來自注入進程的鍵入,並將其報告給Beacon,直到進程終止或您終止鍵盤記錄器。請注意,多個鍵盤記錄程序可能會相互沖突。每個桌面會話僅使用一個鍵盤記錄器。要截取屏幕截圖,請使用screenshot pid將屏幕截圖工具注入到x86進程中。使用screenshot pid x64注入到x64進程中。同樣,explorer.exe也是這個工具的一個很好的候選者。截圖命令的這個變換將采用一個屏幕截圖並退出。截圖本身將把截圖工具注入到一個臨時進程中。您可以使用screenshot pid architecture time讓屏幕截圖工具運行幾秒鍾,並在每次Beacon檢入時輸出屏幕截圖。這是一種觀察用戶桌面的簡便方法。
當Beacon接收到新的屏幕截圖或按鍵時,它將向Beacon控制台發送消息。但是,屏幕截圖和鍵入信息無法通過Beacon控制台獲得。進入 View -> Keystrokes,查看所有Beacon會話中記錄的鍵入信息。進入View -> Screenshots,瀏覽所有Beacon會話的屏幕截圖。這兩個對話框都會隨着新信息的出現而更新。這些對話框使一個操作員可以輕松監控所有Beacon會話的鍵入和屏幕截圖。
管理Post-Exploitation Jobs
Beacon將每個shell,powershell和鍵盤記錄器實例視為一項任務。這些任務在后台運行,並在可用時輸出其信息。使用jobs命令查看Beacon中正在運行的任務。使用jobkill取消一項任務。
SOCKS代理
使用SOCKS 8080在端口8080(或您選擇的任何其他端口)上設置SOCKS4A代理服務器。這將設置一個SOCKS代理服務器,通過Beacon傳輸流量。Beacon的睡眠時間增加了你通過它的任何流量的延遲。使用sleep 0可以每秒多次進行Beacon連接。Beacon的HTTP數據通道對pivoting目標的響應最快。如果您想通過DNS傳輸流量,請使用DNS txtrecord通信模式。您可以使用proxychains隧道通過Beacon來傳輸其他工具。使用socks stop來禁用SOCKS代理服務器。
Reverse Pivoting
使用rportfwd命令通過Beacon設置 reverse pivot。rportfwd命令將綁定受感染目標上的端口。任何到此端口的連接都將導致您的Cobalt Strike服務器啟動到另一個主機和端口的連接,並在這兩個連接之間中繼流量。Cobalt Strike通過Beacon隧道傳輸此流量。rportfwd的語法是:rportfwd [bind port] [forward host] [forward port]
使用rportfwd stop [bind port]禁用反向端口轉發
權限提升
某些后期利用命令需要系統管理員級別的權限。Beacon提供了幾個選項來幫助您提升訪問權限。Beacon的許多權限提升選項都接受一個監聽器作為參數。這是使用SMB Beacon的理想情況。SMB Beacon使用命名管道發送其輸出並通過另一個Beacon獲取其任務。SMB Beacon與權限提升攻擊相結合,可以避免您計算如何提高進出權限的麻煩。
通過漏洞提升
鍵入elevate以列出使用Cobalt Strike注冊的權限提升漏洞。運行elevate[exploit name][listener]嘗試使用特定的漏洞進行提升
要啟動權限提升漏洞利用集合,請下載Elevate Kit。Elevate Kit是一個Aggressor腳本,它將幾個開源特權提升漏洞集成到Cobalt Strike中。https://github.com/rsmudge/ElevateKit
使用方法:
1.下載此git
git clone https://github.com/rsmudge/ElevateKit.git
2.將elevate.cna加載到Cobalt Strike中。
轉到Cobalt Strike - > Scripts,按Load,選擇elevate.cna
3.與Beacon交互,選擇Interact
4.鍵入“elevate”以查看可用權限升級攻擊列表
5.鍵入'elevate <exploit name>'以執行攻擊
使用已知憑據進行提升
使用runas [DOMAIN \ user] [password] [command]]以另一個使用其憑據的用戶身份運行命令。runas命令不會返回任何輸出。不過,您可以使用非特權中的runa
使用spawnas [DOMAIN \ user] [password] [listener]以另一用戶身份使用其憑據生成會話。此命令使用PowerShell在內存中加載負載
獲得SYSTEM
使用getsystem模擬SYSTEM帳戶的令牌,此級別的訪問權限可允許您執行管理員用戶無法執行的特權操作.
UAC Bypass
Microsoft在Windows Vista中引入了用戶帳戶控制(UAC),並在Windows 7中對其進行了改進.UAC在UNIX中與sudo非常相似。用戶使用普通權限進行日常操作。當用戶需要執行特權操作時 - 系統會詢問他們是否想要提升他們的權利。
Cobalt Strike附帶兩個UAC旁路攻擊。如果當前用戶不是管理員,則這些攻擊將不起作用。要檢查當前用戶是否在Administrators組中,請使用shell whoami /groups
elevate uac-dll [listener] 將在具有提升權限的進程中生成會話。此攻擊使用UAC漏洞將Artifact Kit生成的DLL復制到特權位置。然后它運行一個應用程序,該應用程序(a)在運行時具有完全權限,(b)易受DLL劫持的攻擊。這些步驟加載啟動Beacon會話的DLL。此攻擊適用於Windows 7和未修補的Windows 8及更高版本。如果Always Notify處於最高設置,則此攻擊將不起作用。
elevate uac-token-duplication [listener] 將在具有提升權限的進程中生成會話。這種攻擊使用一個UAC漏洞,允許非提升進程使用從提升進程中竊取的令牌啟動任意進程。此漏洞要求攻擊刪除分配給提升令牌的多個權限。此攻擊適用於Windows 7及更高版本。如果Always Notify處於最高設置,則此攻擊要求提升的進程已在當前桌面會話中運行(作為同一用戶)。此漏洞使用PowerShell生成會話。
使用runasadmin [command]運行具有提升權限的任意命令。runasadmin命令使用UAC令牌復制攻擊。
Elevate Kit包含UAC旁路選項,可以更好地與最新版本的Windows配合使用
Privileges
鍵入getprivs以啟用分配給當前訪問令牌的權限。
Mimikatz
Beacon集成了mimikatz。使用mimikatz命令將任何命令傳遞給mimikatz的命令調度程序。例如,mimikatz standard::coffee會返回coffee信息。Beacon將注入與目標的本機架構匹配mimikatz實例。一些mimikatz命令必須作為SYSTEM權限才能運行。在命令前面加上!符號來強制Mimikatz在運行您的命令之前提升到system權限。例如:mimikatz !lsa::cache將恢復系統緩存的salt密碼哈希
有一段時間,您可能需要使用Beacon的當前訪問令牌運行mimikatz命令。使用@前綴命令強制mimikatz模擬Beacon的當前訪問令牌。例如,mimikatz !lsa::cache將使用Beacon的當前訪問令牌在mimikatz中運行dcsync命令。
有時您可能需要使用Beacon的當前訪問令牌運行mimikatz命令。在命令前面加上@以強制mimikatz模擬Beacon的當前訪問令牌。例如,mimikatz @lsadump::dcsync將使用Beacon的當前訪問令牌在mimimikatz中運行dcsync命令。
Credential and Hash獲取
要轉儲哈希值,請進入[beacon] - > Access - > Dump Hashes。您也可以使用Beacon控制台中的hashdump命令。這些命令將生成一個注入LSASS的進程,並為當前系統上的本地用戶轉儲密碼哈希值。該logonpasswords命令將使用mimimikatz為登錄到當前系統的用戶讀取明文密碼和哈希。logonpasswords命令與[beacon] -> Access -> Run Mimikatz相同
使用dcsync [DOMAIN.FQDN]從域控制器中為所有帳戶提取密碼哈希值。此技術使用Windows API構建來在域控制器之間同步信息。它需要域管理員信任關系。Beacon使用mimikatz來執行這項技術。如果需要特定的密碼哈希,請使用dcsync[domain.fqdn][domain\user]
使用這些命令轉儲的憑據由Cobalt Strike收集並存儲在憑證數據模型中。進入View - > Credentials以獲取當前團隊服務器上的憑據。
Port Scanner
Beacon有一個內置端口掃描器。使用portscan [targets] [ports] [discovery method]來啟動端口掃描器程序。您可以指定以逗號分隔的目標范圍列表。端口也是如此。例如,端口掃描172.16.48.0/24 1-1024,8080將在端口1到1024和8080上掃描主機范圍172.16.48.0到172.16.48.255。
有三種發現主機存活的選項。arp方法使用ARP請求來發現主機是否處於存活狀態。icmp方法發送ICMP echo請求來檢查目標是否處於存活狀態。none選項告訴portscan工具假定所有主機都處於存活狀態。
端口掃描程序將在Beacon check ins之間運行。當它有結果需要輸出時,它會將信息發送到Beacon控制台。Cobalt Strike將處理此信息並使用發現的主機更新目標模型。
網絡和主機枚舉
Beacon的網絡模塊提供了在Windows Active Directory網絡中查詢和發現目標的工具。使用net dclist命令查找目標加入的域的域控制器。使用net view命令在目標加入的域中查找目標。這兩個命令也填充目標模型。net computers命令通過查詢域控制器上的計算機帳戶組來查找目標。
Beacon的網絡模塊包含基於Windows網絡枚舉API構建的命令,這些命令可直接替代Windows中的許多內置網絡命令。這里還有一些特殊的功能。例如,使用net localgroup\\target列出另一個系統上的組。使用net localgroup \\target group name列出另一個系統上組的成員。這些命令在橫向移動時非常有用,當您必須找到另一個系統上的本地管理員時。
使用help net獲取Beacon網絡模塊中所有命令列表。使用help net command獲取獲取每個單獨命令的幫助。
信任關系
當用戶登錄到Windows主機時,將生成訪問令牌。此令牌包含有關用戶及其權限的信息。訪問令牌還保存將用戶身份驗證到同一Active Directory域上的另一個系統所需的信息。您可以從另一個進程中竊取一個令牌並並將其應用於您的Beacon中。執行此操作時,您可以作為該用戶與域中的其他系統進行交互。
使用steal_token [process id]來模擬現有進程中的令牌。如果要查看正在運行的進程,請使用ps。getuid命令將輸出您當前的令牌。使用rev2self恢復原始令牌。
如果您知道某個用戶的憑據; 使用make_token [DOMAIN \ user] [password]生成傳遞這些憑據的令牌。此令牌是當前令牌的副本,具有修改后的單一登錄信息。它會顯示您當前的用戶名。這是預期的結果。
使用mimikatz通過Beacon傳遞哈希值。Beacon命令mimikatz sekurlsa :: pth / user:[user] / domain:[DOMAIN] / ntlm:[hash] / run:“powershell -w hidden將創建一個帶有令牌設置的進程來根據您提供的信息來單點登錄。使用steal_token從此新進程中獲取令牌,您將繼承其單點登錄的權限。
Kerberos票據
使用kerberos_ticket_use [/path/to/ticket]將kerberos票據注入當前會話中。這將允許Beacon使用此票據中的權限與遠程系統進行交互。嘗試使用mimikatz 2.0生成的Golden Ticke
使用kerberos_ticket_purge清除與您的會話關聯的任何kerberos票據
橫向移動
一旦您擁有域管理員或是目標上本地管理員的域用戶的令牌,您就可以濫用此信任關系來控制目標。Cobalt Strike的Beacon有幾種內置橫向移動選項。
使用Beacon的psexec [target] [share] [listener]在遠程主機上執行有效負載。此命令將為您的偵聽器生成Windows服務可執行文件,將其復制到您指定的共享,創建服務,啟動服務以及自行清除。默認共享包括ADMIN $和C $。
使用psexec_psh [target] [listener]使用PowerShell在遠程主機上執行有效負載。此命令將創建一個服務來運行PowerShell單行程序,啟動它並自行清除。如果您不想接觸磁盤,這種橫向移動方法很有用。
Beacon的winrm [target] [listener]命令將使用WinRM在遠程主機上執行有效負載。此選項要求在目標系統上啟用WinRM。它默認是關閉的。此選項使用PowerShell在目標上加載有效負載。
最后,使用wmi [target] [listener]通過Windows Management Instrumentation傳遞有效負載。此命令使用PowerShell在目標上加載有效負載。
其他命令
Beacon還有一些其他命令未介紹
該clear命令將清除Beacon的任務列表。如果你輸入了錯誤命令,可以用該命令清除。
輸入exit以退出Beacon控制台。
使用kill [pid]來終止進程
使用timestomp將一個文件的Modified,Accessed和Created時間與另一個文件的時間相匹配
DNS Beacon
混合HTTP和DNS Beacon
混合HTTP和DNS Beacon有效載荷是最受歡迎的Cobalt Strike功能。這個有效負載使用DNS請求向您發送信號。這些DNS請求是針對您的Cobalt Strike團隊服務器授權的域的查找。DNS響應告訴Beacon進入睡眠狀態或連接到您下載任務。DNS響應還將告訴Beacon如何從您的團隊服務器下載任務。
DNS Beacon流程圖
最初,此有效負載將通過HTTP GET連接下載其所有任務。DNS Beacon的目的是最小化有效負載直接連接到您的被受控端。隨着時間的推移,很明顯在某些情況下,也可以通過DNS下載任務。
數據通道
今天,混合HTTP和DNS Beacon可以通過HTTP,DNS A記錄,DNS AAAA記錄或DNS TXT記錄下載任務。更好的是,這種有效負載在目標上時能夠靈活地在這些數據通道之間切換。使用Beacon的mode命令更改當前Beacon的數據通道。mode http是HTTP數據通道。mode dns是DNS A記錄數據通道。 mode dns6是DNS AAAA記錄通道。並且,模式dns-txt是DNS TXT記錄數據信道。
HTTP數據通道使用HTTP POST請求將信息發送回您。DNS數據通道將為您的團隊服務器准備的數據嵌入到一個長主機名中。此主機名的最大長度由malleable c2 maxdns選項設置。DNS TXT通道將使用該值的100%。DNS AAAA通道將使用該值的50%。DNS A通道將使用該值的25%。
請注意,只有任務可用時,DNS信標才會驗入。使用checkin命令在下次調用home時請求DNS Beacon檢查。
Listener設置
Windows/Beacon_DNS/Reverse_HTTP有效載荷階段通過HTTP連接。當您創建這個監聽器時,請注意,您正在配置的主機和端口的cobalt strike,它將用於通過HTTP轉移這個載荷。當您選擇設置此有效負載時,Cobalt Strike要知道在端口53上安裝的DNS服務器信息。
windows/beacon-dns/reverse-dns-txt有效載荷使用dns-txt記錄下載和准備混合http和dns-beacon。創建此偵聽器時,請注意您正在配置此負載將用於HTTP通信的端口。同樣,Cobalt Strike要知道在端口53上安裝的DNS服務器。
如果使用HTTP stager設置Hybrid HTTP和DNS Beacon有效負載,請注意您仍然可以請求DNS TXT記錄。許多Cobalt Strike功能將允許您指定 listener name (DNS)以強制使用DNS TXT記錄stager。
DNS Beacon域
創建監聽器並點擊Save后,Cobalt Strike將要求您提供要登錄的域列表。您的Cobalt Strike團隊服務器系統必須對您指定的域具有權威性。創建DNS A記錄並將其指向您的Cobalt Strike團隊服務器。使用DNS NS記錄將多個域或子域委派給Cobalt Strike團隊服務器的A記錄。
監聽器配置
要測試DNS配置,請打開終端並鍵入nslookup jibberish.beacon.domain
。如果您獲得0.0.0.0的A記錄應答 - 那么您的DNS設置正確。如果您沒有收到應答,那么您的DNS配置不正確,混合HTTP和DNS Beacon將無法與您通信。
確保您的DNS記錄引用網絡接口上的主要地址。Cobalt Strike的DNS服務器將始終從您的網絡接口的主地址發送響應。DNS解析器在從一台服務器請求信息時會丟棄回復,但會收到另一台服務器的回復。
如果您位於NAT設備后面,請確保使用公共IP地址作為NS記錄,並將防火牆設置為允許端口53上的UDP流量轉發到此系統上。Cobalt Strike包括一個控制Beacon的DNS服務器。
DNS Beacon Setup and Use
HTTP和HTTPS Beacon
windows/beacon-http/reverse-http是Cobalt Strike的http beacon。此beacon將檢查任務並使用HTTP GET請求來下載它們。這個信標用HTTP POST請求發送數據。一旦您創建了監聽器並點擊Save,Cobalt Strike將要求您提供一個域列表,以提供給beacon指向。創建指向您的團隊服務器的IP地址或其重定向的DNS A記錄。如果你沒有控制的域名服務器,則在此框中輸入您的團隊服務器的IP地址。
HTTP Beacon
windows / beacon_https / reverse_https是Cobalt Strike的HTTPS Beacon。Beacon的這種方式將SSL加密其通信。您可以使用HTTPS Beacon 的有效SSL證書。
手動代理設置
HTTP和HTTPS Beacon使用與Internet Explorer相同的代理設置。如果用戶運行的Beacon是從context,HTTP和HTTPS通信,並將自動向代理服務器驗證自身請求。有時,這些默認值是不可取的。
可以使用備用代理配置導出不穩定 Beacon artifac。進入到 Attacks -> Packages -> Windows Executable (S)。點擊代理字段旁邊的the … 按鈕。這將打開一個對話框來更改 Beacon artifac的代理設置。
手動代理設置
(手動)代理設置對話框提供了幾個選項來更改Beacon發送HTTP和HTTPS請求的方式。proxy type字段配置代理類型。proxy host 和proxy port字段告訴Beacon代理所在的位置。username和password字段是可選的。這些字段指定Beacon用於向代理進行身份驗證的憑據。
選中 the Ignore proxy settings; use direct connection 框強制Beacon嘗試其HTTP和HTTPS請求而無需通過代理。
點擊 Set按鈕彈出以使用所需的代理設置更新 Beacon 對話框。點擊Reset按鈕將代理配置設置回默認值。
沒有使用Beacon偵聽器來本身指定手動代理設置的選項。這是因為beacon http和https stager不支持這些選項。
如何創建 HTTP Beacon Listener
SMB Beacon
windows/beacon_smb/bind_pipe 是Cobalt Strike的SMB Beacon,SMB Beacon使用命名管道通過父級Beacon進行通信。這種點對點通信在同一主機上與Beacons一起工作,它也適用於整個網絡,Windows在SMB協議中封裝命名管道通信。因此,名稱為SMB Beacon
對於Beacon的大多數功能,您可以將SMB Beacon用作目標偵聽器。影響本地主機的功能將通過設置的TCP進行連接轉移,以避免基於本地主機的防火牆的IRE攔截。Beacon的橫向移動功能將SMB Beacon放置到命名管道上。
您還可以導出stagless SMB Beacon可執行文件或DLL。進入到Attacks - > Packages - > Windows Executable(S)並選擇SMB Beacon監聽器。
啟動SMB Beacon的操作將自動鏈接到它。如果您運行一個不穩定性的SMB Beacon有效負載,則必須鏈接到該有效負載以以控制它。
SMB Beacon的localhost-only TCP stager將綁定到New Listener對話框中指定的端口上。SMB Beacon的名為pipe stager的遠程主機將綁定到Malleable C2配置文件中的pipename_stager選項。
SMB Beacon有效負載將綁定到Malleable C2配置文件中的pipename選項。
鏈接和取消鏈接
從Beacon控制台,使用Link[IP Address]將當前Beacon鏈接到正在等待連接的SMB Beacon。當前Beacon檢入時,其鏈接的對等端也將簽入。
為了融入正常流量,鏈接的Beacon使用Windows命名管道進行通信。此流量封裝在SMB協議中。這種方法有一些注意事項:
1.具有SMB Beacon的主機必須接受端口445的連接
2.您只能鏈接由同一Cobalt Strike實例管理的Beacon。
如果在嘗試鏈接到Beacon后收到錯誤5(拒絕訪問):竊取域用戶的令牌或使用shell net use \\host\IPC$ /U:DOMAIN\user password 與主機建立會話。此管理員用戶不是必需的。任何有效的域用戶都可以。完成會話后,嘗試再次鏈接到Beacon。
要銷毀Beacon鏈接,請在父級或子級中使用unlink [ip address]。稍后,您可以再次鏈接到未鏈接的Beacon中(或從另一個Beacon鏈接到它)
Pivot拓撲圖
pivo拓撲圖以自然的方式顯示您的SMB Beaco鏈接。進入到Cobalt Strike - > Visualization - > Pivot Graph以啟用顯示此拓撲圖。
Pivot拓撲圖
每個Beacon會話都有一個圖標。與會話表一樣:每個主機的圖標表示其操作系統。如果圖標為紅色並帶有閃電圖狀,則Beacon將在具有管理員權限的進程中運行。較暗的圖標表示要求Beacon會話退出,並且它需要確認此命令。
防火牆圖標表示Beacon的最后一個出口點(例如,代理、防火牆或重定向器)。Beacon將使用一條綠色虛線表示它使用HTTP、HTTPS或DNS端口網絡。
將一個Beacon會話連接到另一個Beacon會話的橙色箭頭表示兩個信標之間的鏈接。Cobalt Strike的Beacon使用Windows命名管道以這種點對點的方式控制Beacons。命名管道是Windows上的進程間通信機制。主機到主機的命名管道流量封裝在SMB協議中。紅色箭頭表示Beacon鏈接已斷開。
單擊Beacon來選擇它。您可以通過在所需主機上單擊並拖動一個框來選擇多個信標。按ctrl和shift鍵以選擇或取消選擇單個Beacon。
右鍵單擊Beacon,彈出一個菜單,其中包含可用的后期利用選項。
右鍵單擊沒有選定Beacon的pivo拓撲圖以配置此圖的拓撲圖。
SMB Beacon設置和使用
TCP Beacon
windows/beacon-tcp/bind-tcp是Cobalt Strike的tcp Beacon。TCP Beacon使用TCP套接字通過父Beacon進行通信。這種點對點通信與同一主機和網絡上的Beacon一起工作。
對於beacon的大多數特性,您可以使用tcp beacon作為目標偵聽器。
您還可以導出一個不穩定的stageless TCP Beacon executable or DLL,進入到attacks->packages->windows executable(s)並選擇您的TCP Beacon偵聽器。
執行 Beacon的操作將自動連接到它。如果您運行的是不穩定的TCP Beacon負載,則必須連接到該負載以控制它。
TCP Beacon stager將綁定到New Listener對話框中指定的端口。TCP Beacon有效負載將綁定到單獨的端口,在Malleable C2配置文件中指定為tcp_port選項。
連接和取消鏈接
在Beacon控制台中,使用connect [ip address]將當前會話連接到等待連接的TCP Beacon。當前會話簽入時,其鏈接的對等方也將簽入。
從Beacon控制台,使用Connect[IP address]將當前會話連接到正在等待連接的TCP Beacon。當前會話簽入時,其鏈接的對等方也將簽入。
要取消Beacon鏈接,請在父級或子級中使用unlink [ip address]。稍后,您可以從同一主機(或不同的主機)重新連接到TCP Beacon。
TCP Beacon的使用
Browser Pivoting
Browser Pivot 是一種用於劫持受感染用戶的經過身份驗證的Web會話的瀏覽器攻擊。Cobalt Strike使用注入32位和64位Internet Explorer的代理服務器實現Browser Pivot 。瀏覽此代理服務器時,您將保存cookie信息,驗證HTTP會話身份和客戶端SSL證書。Browser Pivot 是一種通過有針對性的攻擊來展示風險的方法。
要設置Browser Pivot ,請進入到[beacon] - > Explore - > Browser Pivot。選擇要注入的Internet Explorer進程。您還可以決定將Browser Pivot 代理服務器綁定到哪個端口上。
你注入的過程非常重要。注入Internet Explorer以繼承用戶經過身份驗證的Web會話。最新版本的Internet Explorer為每個選項卡生成一個進程。如果您的目標使用最新版Internet Explore,則必須將其注入子選項卡以繼承會話狀態。
通常,子選項卡共享所有會話狀態。有一個例外。InternetExplorer11似乎打破了它共享客戶端SSL狀態的方式。這是不可預測的。如果您注入到與客戶機SSL會話關聯的選項卡進程中,那么它將運行。
通過查看Browser Pivo設置對話框中的PPID值來標識Internet Explorer子選項卡進程。當ppid引用explorer.exe時,該進程不是子選項卡。當PPID引用iexplore.exe時,該進程是子選項卡。
設置Browser Pivo后,將Web瀏覽器設置為使用Browser Pivot Proxy服務器。Browser Pivot Proxy服務器是HTTP代理服務器。
使用
啟動Browser Pivo后,您可以將目標用戶作為目標用戶瀏覽。請注意,Browser Pivo代理服務器將為您訪問的啟用SSL的網站提供其SSL證書。這是運行的必要條件。
Browser Pivo代理服務器會在檢測到SSL錯誤時要求您將主機添加到瀏覽器的信任存儲區。將這些主機添加到信任庫中, 按刷新以使SSL保護的站點正確加載。
要停止Browser Pivot代理服務器,請在其Beacon控制台中鍵入browserpivot stop
關閉“Browser Pivot tab”選項卡以停止browser pivoting代理服務器。
如果用戶關閉您正在使用的選項卡,則需要重新注入browser pivoting代理服務器。Browser Pivot tab選項卡將在無法連接到瀏覽器中的browser pivoting代理服務器時發出警告。
怎樣運行
Internet Explorer將其所有通信委托給名為WinINet的庫。任何程序都可以使用此庫,為其使用者管理cookie,SSL會話和服務器身份驗證。Cobalt Strike的browser pivoting功能利用了WinINet透明地管理每個進程的身份驗證和重新認證這一特定。通過將Cobalt Strike的Browser Pivoting技術注入用戶的Internet Explorer進程中,可以免費獲得這種透明的重新認證。
Internet Explorer將其所有通信委托給一個名為wininet的庫。這個庫,任何程序都可以使用它,為其用戶管理cookie、ssl會話和服務器身份驗證。Cobalt Strike的browser pivoting利用了這一個功能,即Wininet在每個進程的基礎上透明地管理身份驗證和重新驗證。通過將Cobalt Strike的Browser Pivoting技術注入用戶的Internet Explorer進程中,可以免費獲得這種透明的重新認證。
Browser Pivoting
在KALI主機中訪問
憑據管理器
管理憑據
進入到View - > Credentials,並與Cobalt Strike的憑證模型進行交互。按添加以向憑證模型添加條目。
您可以按住shift並點擊保存按鈕 以使其對話框保持打開狀態,以便更輕松地向模塊添加新憑據。選擇復制將突出顯示的記錄復制到剪貼板。使用導出以pwdump格式導出憑證。
管理憑據使用
數據模型
概述
Cobalt Strike 3.0的團隊服務器是Cobalt Strike在參與期間收集的信息的的助理。Cobalt Strike解析其Beacon有效負載的輸出,以提取目標,服務和憑據的信息作為報告輸出。
如果您想導出Cobalt Strike的數據,您可以通過 Reporting -> Export Data來實現。Cobalt Strike提供了將數據導出為TSV和XML格式文件的選項。Cobalt Strike客戶端的導出數據功能將合並您當前連接的所有團隊服務器的數據。
Targets
您可以通過View - > Targets與Cobalt Strike的目標信息進行交互。此選項卡顯示與目標可視化相同的信息。選擇添加按鈕將新目標添加到Cobalt Strike的數據模型中。
Services
在目標顯示中,右鍵單擊主機,然后選擇tServices。這將打開Cobalt Strike的服務瀏覽器。在這里,您可以瀏覽服務,為不同的服務分配注釋,以及刪除服務記錄。
Credentials
進入到View - > Credentials,並與Cobalt Strike的憑證模型進行交互。按添加以向憑證模型添加條目。您可以按住shift並點擊保存按鈕 以使其對話框保持打開狀態,以便更輕松地向模塊添加新憑據。選擇復制將突出顯示的記錄復制到剪貼板。
Maintenance
Cobalt Strike收集的所有數據都存儲在 您從團隊服務器啟動的同一位置的數據/子文件中。
如果您想清除Cobalt Strike的數據模型,請停止團隊服務器,並刪除數據/文件夾及其內容。Cobalt Strike將在您下次啟動團隊服務器時重新創建數據/文件夾
如果您要存檔數據模型,請停止團隊服務器,並使用您最喜歡的程序將數據/文件夾及其文件存儲到其他位置。要還原數據模型,請停止團隊服務器,並將舊內容還原到數據/文件夾。Cobalt Strike的數據模型將其所有狀態和狀態元數據保存在數據/文件夾中。
Reporting -> Reset Data重置Cobalt Strike的數據模型,無需重新啟動團隊服務器。
管理下載文件
進入Cobalt Strike中的View->Downloads,查看您的團隊迄今為止下載的文件。只有已完成的下載才會顯示在此選項卡中。下載的文件存儲在團隊服務器上。要將文件穿回系統,請在此處突出顯示它們,選擇 Sync File按鈕”。然后,Cobalt Strike會將所選文件下載到系統上您選擇的文件夾中。
Cobalt Strike中管理文件下載
導出數據
進入到Reporting -> Export Data,以從Cobalt Strike中導出數據,Cobalt Strike客戶端將匯總您連接到的每個團隊服務器的數據,並使用Cobalt Strike的數據模型中的數據導出TSV和XML格式的文件。
ExternalC2(第三方命令和控制台)
Cobalt Strike的外部命令和控制(External C2)接口允許第三方程序充當Cobalt Strike與其Beacon有效載荷之間的通信層。
自Cobalt Strike 3.6以來,已存在此功能和標准的測試版。該標准還未被認為是最終的,也未得到支持。此功能仍在開發和考慮中。
如果您現在想嘗試一下,請參閱External C2標准規范,如下連接。
一些“商業”問題
如果您想將規范中的示例(附錄B)修改為第三方C2,您可以為規范中包含代碼的3-clause BSD license f
如果您想參考外部C2規范,請轉到此頁面。隨着文檔和資源的豐富,此頁面將進行更新。
第三方參考
以下是引用,使用或構建外部C2的第三方項目和帖子列表:
·external_c2_framework由喬納森·埃查瓦里亞編寫。用於構建外部C2客戶端和服務器的Python框架。
·ExternalC2 Library由瑞恩·漢森編寫。帶有Web APi,WebSockets和直接套字節的.net庫。包括測試和評論。
·Tasking Office 365 for Cobalt Strike C2 由MWR Lab編寫 。用於Cobalt Strike的Office 365 C2的討論和演示。
·Shared File C2 by Outflank BV. POC to use a file/share for command and control.
File Browser
Beacon的文件瀏覽器是一個在受控主機上查看文件。
進入到[Beacon] - > Explore - > File Browser打開它。
文件瀏覽器
右鍵單擊要下載或刪除的文件。
要上傳文件夾,請按左上角文件路徑旁邊的文件夾按鈕。要查看哪些驅動器可用,請點擊 List Drives.按鈕
請注意,文件瀏覽器中的每個操作都會創建Beacon執行的任務。文件瀏覽器無法使用您請求的信息刷新其內容,直到Beacon檢入下一個。如果您的Beacon處於高睡眠間隔,則使用文件瀏覽器將不會令人愉快。建議您使用具有低信標睡眠時間(例如,少於10秒)的文件瀏覽器。
請注意,文件瀏覽器中的每個操作都會創建Beacon執行的任務。在下一個Beacon驗入之前,文件瀏覽器無法使用您請求的信息刷新其內容。如果您的Beacon處於高睡眠間隔,您使用文件瀏覽器將很慢,建議您使用具有低Beaco睡眠時間(例如,少於10秒)的文件瀏覽器。
Golden Ticket
Golden Ticket是一張自行生成的Kerberos票據。最常見的是使用域管理員權限偽造Golden Ticket
Golden Ticket需要四條信息:
1.要偽造票據的用戶
2.要為其偽造票據的域名
3.域的SID
4.域控制器上krbtgt用戶的NTLM哈希值
進入到[beacon] - > Access - > Golden Ticket,從Cobalt Strike生成一張Golden Ticket,並設置以上四條信息,Cobalt Strike將使用mimikatz生成一張票據並將其注入到你的kerberos磁盤中。
Golden Ticket Tutoria
Host File
Cobalt Strike的Web服務器可以為您托管社會工程學工具包,進入到 Attacks -> Web Drive-by -> Host File進行設置。選擇要加載的文件,選擇任意URL,然后選擇文件的mime類型。
選中Enable SSL to serve this content over SSL,在Malleable C2配置文件中指定有效的SSL證書時,此選項可用。
HTML Application 攻擊
HTML應用程序是用HTML編寫的Windows程序和Internet Explorer支持的腳本語言。該包生成一個運行Cobalt Strike監聽器的HTML應用程序。此攻擊使您可以選擇使用可執行文件或PowerShell來運行有效負載。進入到 Attacks -> Packages -> HTML Application.
此攻擊有幾種方法可以運行選定的偵聽器。該可執行方法寫一個可執行文件到硬盤並運行它。在PowerShell的方法將使用PowerShell的一班輪運行負載驛站。該VBA方法使用微軟Office宏注入您的有效載荷送入內存。VBA方法需要目標系統上的Microsoft Office。
這種攻擊有幾種方法來運行選定的監聽器。可執行方法會將可執行文件寫入到磁盤中並運行它。PowerShell方法將使用PowerShell一行程序來運行負載stager。vba方法使用Microsoft Office宏將有效負載注入到內存中,VBA方法需要目標系統上安裝Microsoft Office。
HTML Application Attack on Windows 10
Java Signed Applet 攻擊
此工具可通過攻擊->web drive by->signed applet攻擊獲得。這個攻擊啟動了一個Cobalt Strike Web服務器,它承加載了一個自簽名的Java小程序。要求訪問者授予applet運行權限。當訪問者授予此權限時,您就可以訪問他們的系統。
設置URI路徑和端口以配置Web服務器。
選擇 Launch按鈕開始攻擊
選擇Enable SSL以通過SSL提供此內容。在Malleable C2配置文件中指定有效的SSL證書時,此選項可用。
選 Enable SSL to serve this content over SSL,在Malleable C2配置文件中指定有效的SSL證書時,此選項可用。
Signing Cobalt Strike's Applet 攻擊
在沒有有效的代碼簽名證書的情況下,Cobalt Strike的Java簽名小應用程序攻擊是 無效 。本教程展示了如何用自己的代碼簽名證書來簽署Cobalt Strike的Java簽名小程序攻擊。
Java Applet Attack Code Signing Tutorial
Java Applet攻擊代碼簽名:
Java Smart Applet攻擊
Cobalt Strike的Smart Applet Attack結合了多個漏洞,可以將Java安全沙箱禁用到一個軟件包中。
此工具可通過Attacks - > Web Drive-by - > Smart Applet Attack獲得。此攻擊啟動了托管Java applet的Cobalt Strike Web服務器。最初,此applet在Java的安全沙箱中運行,並且不需要用戶確認即可啟動。
設置URI路徑和Port 以配置Web服務器。
選中URI Path 通過SSL提供此內容(Enable SSL to serve this content over SSL)。在Malleable C2配置文件中指定有效的SSL證書時,此選項可用。
smart applet分析其環境並決定使用哪種Java漏洞。如果Java版本容易受到攻擊,則applet將禁用安全沙箱,並使用Cobalt Strike的Java注入器生成會話。
這次攻擊中的這些攻擊對Java 1.7u21及更早版本起作用。Java 1.6u45及更低版本也容易受到這種攻擊。
選擇Launch以啟動攻擊
注意:此攻擊的實現已過時,在現有的最新環境中無效
橫向移動
Cobalt Strike提供了一個圖形用戶界面,使橫向移動更加容易。切換到目標可視化或進入到View -> Targets.進入到 [target] -> Login 並選擇所需的橫向移動選項。
將打開以下對話框:
要配置此會話框:
首先,決定你想用哪種信任機制進行橫向移動。如果要在Beacons中使用令牌,請選中使用會話的當前訪問令牌框。如果你想使用憑證或哈希來橫向移動, 那也沒關系。從憑據存儲中選擇憑據或填充“user”,“password”和“domain”字段。Beacon將使用此信息為您生成訪問令牌。請記住,您需要從高完整性上[管理員]進行操作才能使其正常工作。
接下來,選擇用於橫向移動的listener。SMB Beacon通常是一個很好的候選者。
最后,選擇要執行橫向移動攻擊的會話。Cobalt Strike的異步攻擊模型要求每次攻擊都要從受感染的系統執行。如果沒有Beacon會話進行攻擊,則無法執行此攻擊。如果您正在進行內部參與,請考慮掛鈎您控制的Windows系統,並將其作為攻擊其他系統憑據或哈希值的起點。
最后,選擇要執行橫向移動攻擊的會話。Cobalt Strike的異步攻擊模型要求每個攻擊都從一個受損的系統執行。如果沒有可以攻擊的Beacon會話,則無法執行此攻擊。如果您正在進行內部滲透,請考慮掛接您控制的Windows系統,並將其用作使用憑證或哈希攻擊其他系統的起點。
選擇lauch按鈕,Cobalt Strike將激活所選Beacon的選項卡並向其發出命令。來自攻擊的反饋將顯示在Beacon控制台中。
Cobalt Strike橫向移動
Pivot Listeners
限制從目標網絡到命令和控制基礎架構的直連接數量是一個很好的工具。pivot listener允許您創建綁定到Beacon或SSH會話的偵聽器。通過這種方式,您可以創建新的反向會話,而無需與命令和控制基礎架構建立更直接的連接
要設置pivot listener,請進入到 [beacon] -> Pivoting -> Listener。這將打開一個對話框,您可以在其中定義新的pivot listener。
pivot listener將綁定到指定Session上的偵聽端口。Listen Host值配置反向TCP有效負載用於連接此偵聽器的地址。
現在,唯一的有效載荷選項是windows/beacon-reverse-tcp。這是一個沒有stager的listener。這個有效載荷嵌入到命令和自動化中,而這些命令和自動化是需要stagers的。您可以選擇導出一個不穩定的有效stageless payload artifact 並運行它來傳遞一個反向的TCP有效負載。
Pivot Listeners不會更改pivot主機的防火牆配置。如果pivot 主機具有基於主機的防火牆功能,則有可能會干擾您的偵聽器。它,即運營商,負責預測這種情況發生並采取正確的防御措施。
要刪除Pivot Listeners,請教納入到Cobalt Strike - > Listeners,並在那里刪除偵聽器。如果會話仍然可以訪問,Cobalt Strike將發送一個任務來清除偵聽套字節。
Cobalt Strike反向TCP Pivot Listeners
Malleable Command and Control
概述
Beacon的HTTP指標由Malleable C2配置文件控制。Malleable C2配置文件是一個簡單的程序,它指定如何轉換數據並將其存儲在事務中。轉換和存儲數據的相同配置文件也可以從事務中提取和恢復數據。
要使用自定義配置文件,您必須啟動Cobalt Strike團隊服務器並在此時指定您的配置文件。
./teamserver [external IP] [password] [/path/to/my.profile]
每個Cobalt Strike實例只能加載一個配置文件。如果您在參與過程中需要多個配置文件,請啟動多個團隊服務器 個【服務器都有自己的配置文件】並從一個Cobalt Strike客戶端連接到它們。
檢查錯誤
Cobalt Strike的Linux軟件包包括一個c2lint程序。該程序將檢查通信配置文件的語法,應用一些額外的檢查,甚至使用隨機數據對您的配置文件進行單元測試。強烈建議您在將配置文件加載到Cobalt Strike之前使用此工具檢查配置文件。
./c2lint [/path/to/my.profile]
Profile Language
創建配置文件的最佳方法是修改現有配置文件。看看Github 上的例子。
當您打開配置文件時,您將看到以下內容:
# this is a comment
set global_option "value";
protocol-transaction {
set local_option "value";
client {
# customize client indicators
}
server {
# customize server indicators
}
}
注釋以#開頭,直到結束。set語句是一種為選項賦值的方法。配置文件使用{}將語句和信息組合在一起。語句總是以分號結尾
為了讓所有這些都看起來來通俗易懂,這里有一部分前提說明:
http-get {
set uri "/foobar";
client {
metadata {
base64;
prepend "user=";
header "Cookie";
}
}
此部分配置文件定義HTTP GET事務的指標。第一個語句set uri指定客戶端和服務器在此事務期間將引用的URI。此set語句發生在客戶端和服務器代碼塊之外,因為它適用於這兩個代碼塊。
客戶端塊為執行HTTP GET的客戶端定義指標。在這種情況下,客戶是Cobalt Strike的Beacon。
當Cobalt Strike的Beacon“phones home”時,它會將自己的元數據發送給Cobalt Strike。在此配置文件中,我們必須定義如何使用HTTP GET請求對元數據進行編碼和發送。
后跟一組語句的metadata關鍵字指定如何將元數據轉換並嵌入到我們的HTTP GET請求中。元數據關鍵字后面的語句組稱為數據轉換。
Step |
Action |
Data |
|
0. |
Start |
metadata |
|
1. |
base64 |
Base64 Encode |
bWV0YWRhdGE= |
2. |
prepend "user=" |
Prepend String |
user=bWV0YWRhdGE= |
3. |
header "Cookie" |
Store in Transaction |
數據轉換中的第一條語句聲明我們將base64編碼元數據[1]。第二條語句是prepend,它獲取我們編碼的元數據,並將字符串user=預先發送給它[2]。現在我們轉換的元數據是"user=" . base64(元數據)。第三條語句指出,我們將把轉換后的元數據存儲到一個名為cookie[3]的客戶端HTTP頭中。
Beacon及其服務器都使用配置文件。在這里,我們從Beacon客戶端的角度讀取了該配置文件。Beacon服務器將采用相同的信息並並在后端處理。假設我們的Cobalt Strike Web服務器收到uri/foobar的GET請求后。那么,它想要從事務中提取元數據。
Step |
Action |
Data |
|
0. |
Start |
||
1. |
header "Cookie" |
Recover from Transaction |
user=bWV0YWRhdGE= |
2. |
prepend "user=" |
Remove first 5 characters |
bWV0YWRhdGE= |
3. |
base64 |
Base64 Decode |
metadata |
header語句將告訴我們的服務器從[1]恢復轉換后的元數據的位置。HTTP服務器負責為我們解析來自HTTP客戶端的標頭。接下來,我們需要處理prepend語句。為了恢復轉換后的數據,我們將prepend解釋為刪除前X個字符[2],其中X是我們前綴的原始字符串的長度。現在,剩下的就是解釋最后一個語句base64。我們之前使用base64編碼函數來轉換元數據。現在,我們使用base64解碼來恢復元數據[3]。
header語句將告訴服務器從何處恢復轉換后的元數據[1]。HTTP服務器負責為我們解析來自HTTP客戶端的head。接下來,我們需要處理預處理語句。為了恢復轉換的數據,我們將prepend解釋為刪除前x個字符[2],其中x是我們預先准備的原始字符串的長度。現在,只剩下解釋最后一條語句base64了。我們以前使用base64編碼函數來轉換元數據。現在,我們使用base64解碼來恢復元數據[3]。
一旦配置文件解釋器完成執行每個反向語句后,我們將獲得原始元數據
Data Transform Language
數據轉換是一系列轉換和傳輸數據的語句。數據轉換語句是:
Statement |
Action |
Inverse |
append "string" |
Append "string" |
Remove last LEN("string") characters |
base64 |
Base64 Encode |
Base64 Decode |
base64url |
URL-safe Base64 Encode |
URL-safe Base64 Decode |
mask |
XOR mask w/ random key |
XOR mask w/ same random key |
netbios |
NetBIOS Encode 'a' |
NetBIOS Decode 'a' |
netbiosu |
NetBIOS Encode 'A' |
NetBIOS Decode 'A' |
prepend "string" |
Prepend "string" |
Remove first LEN("string") characters |
數據轉換是這些語句中任意數量的任意順序的組合。例如,您可以選擇對要傳輸的數據進行NetBIOS編碼,預先添加一些信息,然后對整個包進行base64編碼。
數據轉換總是以終止語句結束。在轉換中只能使用一個終止語句。此語句告訴Beacon及其服務器在事務中的何處存儲轉換的數據。
有四個終止語句聲明:
Statement |
What |
header "header" |
Store data in an HTTP header |
parameter "key" |
Store data in a URI parameter |
|
Send data as transaction body |
uri-append |
Append to URI |
頭終止語句將轉換后的數據存儲在HTTP頭中。參數終止語句將轉換后的數據存儲在HTTP參數中。此參數始終作為URI的一部分發送。print語句在事務正文中發送轉換后的數據。
print語句是http-get.server.output,http-post.server.output和http-stager.server.output塊的預期終止語句。您可以對其他塊使用header,parameter,print和uri-append termination語句。
如果在http-post.client.output上使用header、參數或uri append termination語句,beacon會將其響應分塊到一個合理的長度,以適應事務的一部分
這些塊及其發送的數據將在后面的部分中介紹。
Strings
Beacon的Profile Language允許您在多個地方使用“strings”。通常,字符串被解釋為-is。但是,您可以在字符串中使用一些特殊值:
Value |
Special Value |
"\n" |
Newline character |
"\r" |
Carriage Return |
"\t" |
Tab character |
"\u####" |
A unicode character |
"\x##" |
A byte (e.g., \x41 = 'A') |
"\\" |
\ |
Headers and Parameters
數據轉換是指標定制過程的重要組成部分。它們允許您對Beacon在每個事務中必須發送或接收的數據進行修改。也可以為每個事務添加額外的指示符。
在HTTP GET或POST請求中,這些無關的指示符以標題或參數的形式出現。使用客戶端塊中的參數語句將任意參數添加到HTTP GET或POST事務。
此代碼將強制Beacon在發出請求時將 ?bar=blah添加到 /foobar URI中。
http-get {
client {
parameter "bar" "blah";
使用客戶端或服務器塊中的頭語句將任意HTTP頭添加到客戶端的請求或服務器的響應中。此標頭語句添加了一個指標。
http-get {
server {
header "X-Not-Malware" "I promise!";
配置文件解釋器將按順序解釋頭語句和參數語句。也就是說,Wininet庫(客戶機)和Cobalt Strike Web服務器對這些指標在事務中出現的位置有最終決定權。
選項
您可以通過配置文件配置Beacon的默認值。有兩種類型的選項:全局和本地選項。全局選項會更改全局Beacon設置。本地選項是特定於事務的,您必須在正確的上下文中設置本地選項。
使用set語句設置選項。
set "sleeptime" "1000";
以下是可用選項:
Option |
Context |
Default Value |
Changes |
amsi_disable |
false |
(Attempt to) disable AMSI for execute-assembly, powerpick, and psinject |
|
dns_idle |
0.0.0.0 |
IP address used to indicate no tasks are available to DNS Beacon; Mask for other DNS C2 values |
|
dns_max_txt |
252 |
Maximum length of DNS TXT responses for tasks |
|
dns_sleep |
0 |
Force a sleep prior to each individual DNS request. (in milliseconds) |
|
dns_stager_prepend |
Prepend text to payload stage delivered to DNS TXT record stager |
||
dns_stager_subhost |
.stage.123456. |
Subdomain used by DNS TXT record stager. |
|
dns_ttl |
1 |
TTL for DNS replies |
|
host_stage |
true |
Host payload for staging over HTTP, HTTPS, or DNS. Required by stagers. |
|
jitter |
0 |
Default jitter factor (0-99%) |
|
maxdns |
255 |
Maximum length of hostname when uploading data over DNS (0-255) |
|
pipename |
msagent_## |
Name of pipe to use for SMB Beacon's peer-to-peer communication. ## is replaced with a number unique to your team server. |
|
pipename_stager |
status_## |
Name of pipe to use for SMB Beacon's named pipe stager. ## is replaced with a number. |
|
sample_name |
My Profile |
The name of this profile (used in the Indicators of Compromise report) |
|
sleeptime |
60000 |
Default sleep time (in milliseconds) |
|
spawnto_x86 |
%windir%\syswow64\rundll32.exe |
Default x86 program to open and inject shellcode into |
|
spawnto_x64 |
%windir%\sysnative\rundll32.exe |
Default x64 program to open and inject shellcode into |
|
tcp_port |
4444 |
TCP Beacon listen port |
|
uri |
http-get, |
[required option] |
Transaction URI |
uri_x86 |
http-stager |
x86 payload stage URI |
|
uri_x64 |
http-stager |
x64 payload stage URI |
|
useragent |
Internet Explorer (Random) |
Default User-Agent for HTTP comms. |
|
verb |
http-get, |
GET, |
HTTP Verb to use for transaction |
使用uri選項,可以將多個uri指定為一個空格分隔的字符串。Cobalt Strike的Web服務器將綁定所有這些URI,並在構建Beacon階段時將其中一個URI分配給每個Beacon主機。
即使存在useragent選項; 您可以使用header語句來覆蓋此選項。
Beacon HTTP Transaction
為了將所有這些放在一起,有助於了解Beacon事務的外觀以及每個請求發送的數據。
當Beacon向Cobalt Strike的Web服務器發出HTTP GET請求時,事務就會開始。此時,Beacon必須發送 包含有關受控系統信息的元數據。
提示:會話元數據是加密的數據blob。沒有編碼,它不適合在頭或URI參數中傳輸。始終應用base64,base64url或netbios語句對元數據進行編碼。
Cobalt Strike的Web服務器使用Beacon執行的任務來應答此HTTP GET。這些任務最初是作為一個加密的二進制blob發送的。您可以在HTTP GET的服務器上使用output關鍵字轉換此信息。
當Beacon執行其任務時,它會累積輸出。完成所有任務后,Beacon會檢查是否有要發送的輸出。如果沒有輸出,Beacon會進入睡眠狀態。如果有輸出,Beacon會發起HTTP POST請求。
HTTP POST請求必須包含URI參數或標頭中的會話ID。Cobalt Strike使用此信息將輸出與正確的會話相關聯。發布的內容最初是加密的二進制blob。您可以使用http-post的客戶端上的output關鍵字轉換此信息。
Cobalt Strike的Web服務器可能會響應任何請求的HTTP POST。Beacon不會清除或使用此信息。您可以使用http-post的服務器上的output關鍵字指定HTTP POST的輸出。
注意:雖然http-get默認使用GET,而http-post默認使用POST,但您不必拘泥於這些選項。使用動詞選項更改這些默認值。這里有很大的靈活性。
此表總結了這些關鍵字及其發送的數據:
Request |
Component |
Block |
Data |
http-get |
client |
metadata |
Session metadata |
http-get |
server |
output |
Beacon's tasks |
http-post |
client |
id |
Session ID |
http-post |
client |
output |
Beacon's responses |
http-post |
server |
output |
Empty |
http-stager |
server |
output |
Encoded payload stage |
HTTP Staging
Beacon是一個分階段的有效載荷。這意味着有效負載由stager下載並注入內存。在目標內存中有Beacon之前,HTTP GET和HTTP POST指標不會生效。Malleable C2的http-stager塊可自定義HTTP分段過程。
http-stager {
set uri_x86 "/get32.gif";
set uri_x64 "/get64.gif";
該uri_x86選項設置URI下載x86的有效載荷階段。該uri_x64選項設置URI下載64位的有效載荷階段。
client {
parameter "id" "1234";
header "Cookie" "SomeValue";
}
http-stager上的client關鍵字定義了HTTP事務的客戶端。使用parameter關鍵字將參數添加到URI中。使用header關鍵字將標頭添加到stager的HTTP GET請求中。
server {
header "Content-Type" "image/gif";
output {
prepend "GIF89a";
print;
}
}
}
HTTP stager上下文下的server關鍵字定義了HTTP事務的服務器端。header關鍵字將服務器頭添加到服務器的響應中。HTTP stager服務器上的output關鍵字是用於更改有效負載階段的數據轉換。此轉換只能在階段前附加字符串。使用打印終止語句關閉此輸出塊。
HTTP Headers
http-config塊對Cobalt Strike的Web服務器提供的所有HTTP響應都有影響。在這里,您可以指定其他HTTP標頭和HTTP標頭順序。
http-config {
set headers "Date, Server, Content-Length, Keep-Alive, Connection, Content-Type";
header "Server" "Apache";
header "Keep-Alive" "timeout=5, max=100";
header "Connection" "Keep-Alive";
}
header關鍵字為cobalt strike的每個HTTP響應添加一個header值。如果響應中已經定義了標頭值,則忽略該值。
set headers選項指定這些HTTP頭在HTTP響應中的傳遞順序。不在此列表中的任何標題都將添加到末尾。
使用SSL Beacon的自簽名證書
HTTPS Beacon在其通信中使用HTTP Beacon的指示符。Malleable C2配置文件還可以指定Beacon C2服務器的自簽名SSL證書的參數。如果要在SSL證書中復制具有唯一指示符的actor,這非常有用:
https-certificate {
set CN "bobsmalware.com";
set O "Bob's Malware";
}
置文件控制的證書參數:
Option |
Example |
Description |
C |
US |
Country |
CN |
beacon.cobaltstrike.com |
Common Name; Your callback domain |
L |
Washington |
Locality |
O |
Strategic Cyber LLC |
Organization Name |
OU |
Certificate Department |
Organizational Unit Name |
ST |
DC |
State or Province |
validity |
365 |
Number of days certificate is valid for |
使用SSL Beacon的有效SSL證書
您可以選擇將有效SSL證書與Beacon一起使用。使用Malleable C2配置文件指定Java密鑰庫文件和密碼。此密鑰庫必須包含證書的私鑰,根證書,任何中間證書以及SSL證書供應商提供的域證書。Cobalt Strike希望在與Malleable C2配置文件相同的文件夾中找到Java Keystore文件。
https-certificate {
set keystore "domain.store";
set password "mypassword";
}
使用有效SSL證書的參數是:
Option |
Example |
Description |
keystore |
domain.store |
Java Keystore file with certificate information |
password |
mypassword |
The password to your Java Keystore |
以下是創建用於Cobalt Strike的Beacon的有效SSL證書的步驟:
1.使用keytool程序創建Java密鑰存儲文件。這個程序會詢問“你的姓名是什么?” 確保使用完全權威的域名來響應Beacon服務器。另外,請確保記下密鑰庫密碼。你以后會需要它。
$ keytool -genkey -keyalg RSA -keysize 2048 -keystore domain.store
2.使用keytool生成證書簽名請求(CSR)。您將向您的SSL證書供應商提交此文件。他們將驗證您的身份並頒發證書。有些供應商比其他供應商更容易和便宜。
$ keytool -certreq -keyalg RSA -file domain.csr -keystore domain.store
3.導入SSL供應商提供的Root和任何中間證書。
$ keytool -import -trustcacerts -alias FILE -file FILE.crt -keystore domain.store
4.最后,您必須安裝域證書。
$ keytool -import -trustcacerts -alias mykey -file domain.crt -keystore domain.store
而且,就是這樣。您現在擁有一個可以與Cobalt Strike的Beacon一起使用的Java Keystore文件。
代碼簽名證書
Attacks -> Packages -> Windows Executable and Windows Executable (S) 為您提供簽署可執行文件或DLL文件的選項。要使用此選項,必須使用代碼簽名證書和私鑰指定Java Keystore文件。Cobalt Strike希望在與Malleable C2配置文件相同的文件夾中找到Java Keystore文件。
code-signer {
set keystore "keystore.jks";
set password "password";
set alias "server";
}
代碼簽名證書設置為:
Option |
Example |
Description |
alias |
server |
The keystore's alias for this certificate |
digest_algorithm |
SHA256 |
The digest algorithm |
keystore |
keystore.jks |
Java Keystore file with certificate information |
password |
mypassword |
The password to your Java Keystore |
timestamp |
false |
Timestamp the file using a third-party service |
timestamp_url |
http://timestamp.digicert.com |
URL of the timestamp service |
PE and Memory Indicators
Malleable C2配置文件中的stage塊控制Beacon如何加載到內存中並編輯Beacon DLL的內容。
stage {
set userwx "false";
set compile_time "14 Jul 2009 8:14:00";
set image_size_x86 "512000";
set image_size_x64 "512000";
set obfuscate "true";
transform-x86 {
prepend "\x90\x90";
strrep "ReflectiveLoader" "DoLegitStuff";
}
transform-x64 {
# transform the x64 rDLL stage
}
stringw "I am not Beacon!";
}
階段塊接受將字符串添加到beacon dll的.rdata部分的命令。string命令添加一個以零結尾的字符串。stringw命令添加了一個寬(utf-16le編碼)字符串。data命令按原樣添加字符串。
Transform-x86和Transform-X64阻止PAD和Transform Beacon的反射DLL階段。這些塊支持三個命令:prepend、append和strrep。
prepend命令在beacon的反射dll之前插入一個字符串。append命令在beacon-reflective dll后面添加一個字符串。確保預先准備好的數據是階段體系架構(x86、x64)的有效代碼。c2lint程序沒有對此進行檢查。strrep命令替換beacon反射dll中的字符串。
stage塊接受幾個控制Beacon DLL內容的選項,並提供改變Beacon反射加載器行為的提示:
Option |
Example |
Description |
checksum |
0 |
The CheckSum value in Beacon's PE header |
cleanup |
false |
Ask Beacon to attempt to free memory associated with the Reflective DLL package that initialized it. |
compile_time |
14 July 2009 8:14:00 |
The build time in Beacon's PE header |
entry_point |
92145 |
The EntryPoint value in Beacon's PE header |
image_size_x64 |
512000 |
SizeOfImage value in x64 Beacon's PE header |
image_size_x86 |
512000 |
SizeOfImage value in x86 Beacon's PE header |
module_x64 |
xpsservices.dll |
Same as module_x86; affects x64 loader |
module_x86 |
xpsservices.dll |
Ask the x86 ReflectiveLoader to load the specified library and overwrite its space instead of allocating memory with VirtualAlloc. |
name |
beacon.x64.dll |
The Exported name of the Beacon DLL |
obfuscate |
false |
Obfuscate the Reflective DLL's import table, overwrite unused header content, and ask ReflectiveLoader to copy Beacon to new memory without its DLL headers. |
rich_header |
Meta-information inserted by the compiler |
|
sleep_mask |
false |
Obfuscate Beacon, in-memory, prior to sleeping |
stomppe |
true |
Ask ReflectiveLoader to stomp MZ, PE, and e_lfanew values after it loads Beacon payload |
userwx |
false |
Ask ReflectiveLoader to use or avoid RWX permissions for Beacon DLL in memory |
Cloning PE Headers
Cobalt Strike的Linux軟件包包括一個工具peclone,用於從dll中提取頭文件並將其顯示為一個隨時可用的階段塊:
./peclone [/path/to/sample.dll]
內存中的逃逸和混淆
使用stage block的prepend命令來阻止分析,該分析掃描內存段的前幾個字節以查找注入DLL的符號。如果使用特定於工具的字符串來檢測代理,請使用strrep命令更改它們。
如果strrep不夠,請將sleep_mask設置為true。這導致Beacon在進入睡眠狀態之前在內存中進行模糊處理。在休眠之后,Beacon會對自己進行去模糊處理以請求和處理任務。SMB和Beacon將在等待新連接或等待父會話中的數據時進行模糊處理。
決定您希望在內存中看起來像一個DLL特征。那么您希望方便檢測,請將stomppe設置為false。如果您想在內存中輕微混淆Beacon DLL,請將stomppe設置為true。如果您想要應對挑戰,請將obfuscate設置為true。此選項將采取許多步驟來混淆Beacon階段和內存中DLL的最終狀態
將userwx設置為false以詢問Beacon的加載器以避免以RWX權限執行。具有這些權限的內存段將引起安全分析師和安全產品的額外關注。
默認情況下,Beacon的加載程序使用VirtualAlloc分配內存。模塊踩踏是另一種選擇。將module_x86設置為DLL,該DLL大約是Beacon有效負載本身的兩倍。Beacon的x86加載器將加載指定的DLL,在內存中找到它的位置,並覆蓋它。這是一種將Beacon置於Windows與磁盤上的文件關聯的內存中的方法。您想要駐留的應用程序不需要您選擇的DLL。重要的是module_x64選項是相同的,但它會影響x64 Beacon。
如果您擔心在內存中初始化Beacon DLL的Beacon階段,請將cleanup設置為true。當不再需要時,此選項將釋放與Beacon階段相關聯的內存。
Process Injection
Malleable C2配置文件中的進程注入塊可以注入內容並控制進程注入行為。
process-inject {
set min_alloc "16384";
set startrwx "true";
set userwx "false";
transform-x86 {
prepend "\x90\x90";
}
transform-x64 {
# transform x64 injected content
}
disable "CreateRemoteThread";
}
transform-x86和transform-x64阻止Beacon注入的PAD內容。這些塊支持兩個命令:prepend和append。
prepend命令在插入的內容之前插入一個字符串。append命令在注入的內容之后添加一個字符串。確保預先准備好的數據是注入內容體系架構(x86、x64)的有效代碼。c2lint程序沒有對此進行檢查。
該disable語句是一個提示語,以避免在beacon的進程注入例程中使用某些API的提示。您可以禁用:SetThreadContext,CreateRemoteThread和RtlCreateUserThread。請注意,當您禁用這些調用時,您可能會在Beacon的進程注入例程中引入可避免的失敗。c2lint命令會發出一些警告
process-inject塊接受幾個控制Beacon中的過程注入的選項:
Option |
Example |
Description |
min_alloc |
4096 |
Minimum amount of memory to request for injected content |
startrwx |
true |
Use RWX as initial permissions for injected content. Alternative is RW. |
userwx |
false |
Use RWX as final permissions for injected content. Alternative is RX. |
哪個更危險,Malleable C2還是swimming pool
答案是什么?兩者都有。Malleable C2為您提供了對網絡和主機指標的全新控制。有了這種權限,責任也隨之而來。Malleable C2也是一個犯很多錯誤的地方。當您自定義配置文件時,需要考慮以下幾點:
1.每個Cobalt Strike實例一次使用一個配置文件。如果您更改配置文件或加載新配置文件,則以前部署的Beacons無法與您通信。
2.始終了解數據的狀態以及在開發數據轉換時協議允許的內容。例如,如果您使用base64編碼元數據並將其存儲在一個uri參數中,那么它將不起作用。為什么?一些base64字符(+、=、和/)在URL中有特殊含義。c2lint工具和Profile Compiler不會檢測這些類型的問題。
3.即使經過小的更改,也要測試您的配置文件。如果Beacon無法與您通信,可能是您的配置文件有問題。編輯並重試。
4.信任c2lint工具。該工具超越了配置文件編譯器。這些檢查的基礎是這項技術的實施方式。如果c2lint檢查失敗,則表示您的配置文件存在真正的問題。
Malleable Command and Control Demo
Make Token
進入到[beacon] - > Access - > Make Token,並打開Cobalt Strike的Make Token對話框。此對話框顯示Cobalt Strike的憑據,並將所選憑據轉換為令牌。
Microsoft Word和Excel宏攻擊
Microsoft Office宏工具將生成一個宏以嵌入到Microsoft Word或Microsoft Excel文檔中。進入到Attacks -> Packages -> MS Office Macro
選擇一個偵聽器,然后按Generate創建惡意MS Office宏。Cobalt Strike將提供逐步說明,將宏嵌入到Word或Excel文檔中。
當您可以欺騙用戶在打開文檔時運行宏時,此攻擊很有效。
MS Word和Excel宏攻擊
Payload Generator
Cobalt Strike的Payload Generator輸出源代碼和artifacts,將Cobalt Strike監聽器轉移到主機上。可以把它想象成msfvenom的Cobalt Strike版本。
要生成有效負載,請進入到Attacks - > Packages - > Payload Generator。
將Listener選項設置為要為其輸出有效負載的Cobalt Strike Listener。
使用Output選擇您想要的輸出類型。大多數選項都會為該語言提供格式化為字節數組的shellcode。有幾個選項可以讓您立即使用:
Option |
What? |
COM Scriptlet |
A .sct file to run a listener |
PowerShell |
PowerShell script to run shellcode |
PowerShell Command |
PowerShell one-liner to run a Beacon stager. |
Raw |
blob of position independent shellcode. |
Veil |
Custom shellcode suitable for use with the Veil Evasion Framework. |
選中“Use x64 payload ”框為所選偵聽器生成x64 stager。
創建可執行Beacon的Veil Evasion Framework:
復制剛生成的veil的poc:
端口掃描器
進入到 [beacon] -> Explore -> Port Scanner,以啟動端口掃描工具。
Beacon掃描端口
Listener Management
要管理您的Cobalt Strike監聽器,請進入到Cobalt Strike - > Listeners。這將打開一個列出所有持久偵聽器的選項卡。單擊“ Add”按鈕以創建新的偵聽器。
給你的監聽器設置一個有意義的名稱。這是您在生成社交工程包,傳遞會話或設置客戶端攻擊時用來引用它的名稱。
使用Payload下拉列表選擇此偵聽器將提供的有效負載。
“host和port”字段定義有效負載將從何處進行轉移。您可以在“host”字段中使用完全權威的域名。
按Save按鈕來保存偵聽器,並為偵聽器啟動服務器。
其他選項
Listeners選項卡是用來管理監聽器。突出顯示偵聽器,然后按 Edit以更改偵聽器。
突出顯示一個或多個偵聽器,然后按“ Remove”。這將阻止這些監聽器並將其從Cobalt Strike中移除。
使用
你可以使用具有Cobalt Strike攻擊和后期開發功能的偵聽器。這些功能將允許您按名稱選擇偵聽器。確保為每個偵聽器使用描述性名稱。
Foreign Listeners
Cobalt Strike支持 foreign listeners。這些是Metasploit®框架或其他Cobalt Strike實例中托管的x86有效負載處理程序的別名。要將Windows HTTPS Meterpreter會話傳遞給具有msfconsole的朋友,請定義一個windows/foreign/reverse偵聽器,並將Host和Port值指向其處理程序。您可以在任何使用常規Cobalt Strike偵聽器的地方使用外部偵聽器。
會話傳遞
權限升級
進入到[beacon] - > Access - > Elevate以啟動權限提升漏洞利用。選擇一個偵聽器,選擇一個exploit,然后按“ Launch ”以運行該漏洞。此對話框是Beacon的提升權限命令的前端。
Cobalt Strike附帶三個內置漏洞:
ms14-058是一個(過時的)權限升級漏洞利用程序,可用於未打補丁的Windows 7系統提權。
UAC DLL是一種繞過UAC的攻擊,它試圖將本地管理員運行的有效負載從低權限提升到高權限。此攻擊使用UAC漏洞將Artifact Kit生成的DLL復制到特權位置。然后,它運行一個應用程序,該應用程序(a)在運行時具有完全權限,(b)易受DLL劫持的攻擊。這些步驟加載啟動Beacon會話的DLL。此攻擊適用於Windows 7和Windows 8及更高版本的未修補版本。如果Always Notify處於其最高設置,則此攻擊將不起作用。
uac-token-duplication是另一種繞過UAC的攻擊,將其從低權限提升到高權限(作為本地管理員)。這種攻擊使用一個UAC漏洞,允許非提升進程使用從提升進程中竊取的令牌啟動任意進程。此漏洞要求攻擊刪除分配給提升令牌的多個權限。。此攻擊適用於Windows 7及更高版本。如果Always Notify處於其最高設置,則此攻擊要求提升的進程已在當前桌面會話中運行(作為同一用戶)。此漏洞使用PowerShell生成會話。
您可以通過Elevate Kit向Cobalt Strike添加權限提升漏洞。Elevate Kit是一個Aggressor腳本,它將幾個開源特權升級漏洞集成到Cobalt Strike中。https://github.com/rsmudge/ElevateKit。
Elevate Kit提升套件
、
Process Browser
進入到 [beacon] -> Explore -> Show Processes以打開進程瀏覽器
進程瀏覽器顯而易見; 它要求Beacon顯示進程列表並向給你輸出這些信息。Process Browser也是從其他進程模擬令牌,部署屏幕截圖工具或部署鍵盤記錄器。突出顯示一個或多個進程,然后選擇對話框底部的相應按鈕。
進程瀏覽器
如果您突出顯示多個信標並將其命令顯示進程,Cobalt Strike將顯示一個進程瀏覽器,該進程瀏覽器還會指出進程來自哪個主機。Process Browser的這種變體是將Beacon的后期開發工具同時部署到多個系統的便捷方式。只需按進程名稱排序,突出顯示目標系統上的有趣進程,然后按屏幕截圖或日志按鍵按鈕將這些工具部署到所有突出顯示的系統。
如果您突出顯示多個Beacon並讓它們顯示進程,Cobalt Strike將顯示一個進程瀏覽器,該進程瀏覽器還會指出進程來自哪個主機。Process Browser的這種變體是將Beacon的后期開發工具同時部署到多個系統的便捷方式。只需按進程名稱排序,突出顯示目標系統上重要進程,然后按Screenshot或Keystrokes 按鈕將這些工具部署到所有突出顯示的系統
大規模用戶利用
Reporting
Cobalt Strike提供了多種報告選項,可幫助您了解數據並向客戶呈現你的報告。您可以配置大多數報告中顯示的標題,說明和主機。
進入到“ Reporting ”並選擇要生成的其中一個報告。Cobalt Strike會將您的報告導出為MS Word或PDF文檔格式。
報告類型
·活動報告(.pdf)
活動報告提供了紅隊活動的時間表。
·主機報告(.pdf)
主機報告按主機統計了Cobalt Strike的數據模型。此處記錄了主機,服務,憑據和會話。
·折衷報告指標.pdf)
該報告類似於威脅情報報告中的“折衷指標”附錄。內容包括對您的Malleable C2配置文件的生成分析,您使用的域名以及您上傳的文件的MD5哈希值。
·會議報告(.pdf)
該報告提供了紅隊活動的完整信息。它捕獲每個會話,該會話的通信路徑,在該會話期間放置在目標上的MD5哈希值,並提供紅隊活動的運行日志。
·社會工程報告(.pdf)
社交工程報告記錄每一次點擊的魚叉釣魚郵件,以及從點擊的每個用戶收集的內容。此報告還顯示由系統探查器發現的應用程序。
·戰術,技術和程序報告(.pdf)
此報告將您的Cobalt Strike行動映射到MITRE的ATT&CK Matrix中。ATT&CK描述了每個策略以及檢測和解決方案。您可以在https://attack.mitre.org了解更多關於MITRE的ATT&CK的信息
自定義標簽
Cobalt Strike報告在第一頁頂部顯示Cobalt Strike圖標。您可以用自己選擇的圖像替換來它。進入到Cobalt Strike -> Preferences -> Reporting 並設置您要使用的圖標。也可以設置強調色。強調文字顏色是報表第一頁圖像下方的粗線。
報告首選項
您的自定義圖像應該是1192X257px,設置為300dpi。300dpi設置是報表引擎以正確的大小呈現圖像所必需的。
自定義報告
Cobalt Strike使用特定於域的語言來定義其報告。您可以通過“ Report Preferences”對話框來加載自己的報告。要了解有關此功能的更多信息,請參閱Aggressor Script文檔的“ 自定義報告”一章
Resource Kit
Resource Kit是Cobalt Strike改變Cobalt Strike在其工作流程中使用的HTA,PowerShell,Python,VBA和VBS腳本模板的方法。同樣,Resource Kit可供Cobalt Strike庫中的許可用戶使用。進入到Help -> Arsenal 下載Resource Kit。
Resource Kit附帶的README.txt記錄了包含的腳本以及使用它們的功能。要規逃避AV檢查,請考慮更改這些腳本中的字符串或特征
要使Cobalt Strike在內置腳本模板上使用腳本模板,請加載Resource Kit附帶的resources.cna腳本。
Resource Kit
Scripted Web Delivery
該 Attacks -> Web Drive-by -> Scripted Web Delivery功能產生啟動信標,承載它鈷攻擊的Web服務器上,並提出了一個班輪下載並運行該神器神器。選項包括:bitsadmin,powershell,python和regsvr32。
該 Attacks -> Web Drive-by -> Scripted Web Delivery生成一個artifact並啟動Beacon,將其托管在Cobalt Strike的web服務器上,並提供一個用於下載和運行artifact的一行程序。選項包括:bitsadmin、powershell、python和regsvr32。
bitsadmin選項托管一個可執行文件,並使用bitsadmin下載它。bitsadmin方法通過cmd.exe運行可執行文件。PowerShell選項托管PowerShell腳本,並使用PowerShell.exe下載該腳本並對其進行評估。python選項托管一個python腳本,並使用python.exe下載並運行該腳本。regsvr32選項生成一個com scriptlet文件,並使用regsvr32.exe下載和運行scriptlet的內容。COM Scriptlet使用惡意的VBA宏將Beacon輸入內存。COM Scriptlet選項要求目標上有Microsoft Office。每個選項都是運行Cobalt Strike偵聽器的不同方式。
選中Enable SSL 以通過SSL提供此內容。在Malleable C2配置文件中指定有效的SSL證書時,此選項可用。確保Host字段與SSL證書的CN字段匹配。這將避免由於這些字段之間的不匹配而導致此功能失敗的情況
Scripted Web Delivery使用
Aggressor Script
Aggressor Script是Cobalt Strike 3.0版及更高版本中內置的腳本語言。Aggresor Script允許您修改和擴展Cobalt Strike客戶端。
Aggressor腳本的文檔位於https://www.cobaltstrike.com/aggressor-script/
歷史參考
Aggressor Script是Armitage中開源腳本引擎Cortana的基礎。通過DARPA的Cyber Fast Track項目,Cortana項目可能被實現。Cortana允許其用戶通過Armitage的團隊服務器擴展Armitage並控制Metasploit®框架及其功能。Cobalt Strike 3.0是在沒有Armitage的基礎上對Cobalt Strike的一次徹底改寫。這一變化提供了一個重新審視Cobalt Strike腳本的機會,並圍繞Cobalt Strike的功能構建一些東西。這項工作的成果是Aggressor Script。
Aggressor Script是一種腳本語言,用於受可腳本化IRC客戶機和機器人程序的啟發而進行的紅色團隊操作和對手模擬。它的目的是雙重的。你可以創建一個長時間運行的機器人來模擬虛擬的紅色成員,與你並排模擬進行黑客攻擊。您也可以使用它來擴展和修改Cobalt Strike客戶機以滿足您的需要。
如何加載腳本
Aggressor Script內置於Cobalt Strike客戶端。要永久加載腳本,請進入到Cobalt Strike - > Script Manager,然后按Load。
腳本加載器
Aggressor Script
具體參考說明:https://www.cobaltstrike.com/aggressor-script/index.html
輸入help命令
從default.can中復制2段代碼
Site Management
Cobalt Strike功能使用自己的Web服務器。站點管理工具允許您管理此Web服務器。進入到Attacks -> Web Drive-by -> Manage以訪問它。
突出顯示URL並按“ Copy URL”將URL復制到剪貼板。按Kill關閉應用程序。
SOCKS Proxy Pivoting
進入到[beacon] - > Pivoting - > SOCKS Server,在您的團隊服務器上設置SOCKS4a代理服務器。或者,使用socks 8080在端口8080(或您選擇的任何其他端口)上設置SOCKS4a代理服務器。
通過這些SOCKS服務器的所有連接都將變為連接,讀取,寫入和關閉任務狀態,以便執行相關的Beacon。您可以通過SOCKS的任何類型的Beacon(甚至是SMBBeacon)進行隧道傳輸。
Beacon的HTTP數據通道對數據轉發的響應最快。。如果您想通過DNS轉發流量,請使用DNS TXT記錄通信模式。
要查看當前設置的SOCKS服務器,請進入到View - > Proxy Pivots。
在Beacon控制台中使用socks stop來停止SOCKS代理服務器。
Proxychains
該proxychains工具將強制外部程序使用指定的SOCKS代理服務器。您可以使用代理鏈強制第三方工具通過Cobalt Strike的SOCKS服務器
SOCKS Pivoting with Proxychains
Metasploit
您還可以通過Beacon挖掘Metasploit®Framework漏洞和模塊。創建Beacon SOCKS代理服務器[如上所述]並將以下內容粘貼到Metasploit®Framework控制台中:
您還可以通過Beacon隧道連接Metasploit®Framework漏洞和模塊。創建Beacon Socks代理服務器[如上所述],並將以下內容粘貼到Metasploit®框架控制台中:
setg Proxies socks4:team server IP:proxy port
setg ReverseAllowProxy true
這些命令將顯示Metasploit®Framework將Proxies選項應用於此前執行的所有模塊。一旦您以這種方式完成了通過Beacon的轉發,請使用unsetg Proxies來停止此執行。
如果您發現上面的內容難以記住,請進入到View -> Proxy Pivots.。突出顯示您設置的代理轉發,然后選擇Tunnel。此按鈕將提供通過Beacon傳輸Metasploit®Framework所需的setg Proxies語法。
Sending Metasploit through a SOCKS Proxy Pivot
Spawn As
此對話框使用指定的憑據作為另一個用戶生成Cobalt Strike偵聽器。進入到[beacon] - > Access - > Spawn As打開它。
Elevate with Credentials
魚叉式網絡釣魚SSH會話
Cobalt Strike通過內置SSH客戶端控制UNIX目標。此SSH客戶端通過父Beacon接收任務並將其輸出鏈接信息。
右鍵單擊目標並進入到 Login -> ssh ,使用用戶名和密碼進行身份驗證。進入到Login -> ssh (key),使用密鑰進行身份驗證。
從Beacon控制台:使用ssh [target] [user] [password]從Beacon啟動SSH會話。使用ssh-key [target] [user] [/path/to/key.pem]通過密鑰進行身份驗證。
這些命令運行Cobalt Strike的SSH客戶端。客戶端將向父Beacon輸出任何連接或身份驗證問題。如果連接成功,您將在Cobalt Strike中看到一個新會話。這是一個SSH會話。右鍵單擊此會話,然后按Interact打開SSH控制台。
輸入help以查看SSH會話支持的命令列表。輸入help+命令名稱以獲取該命令的詳細信息。
運行命令
shell命令將運行您提供的命令和參數。在Cobalt Strike將命令置於后台之前,運行命令會阻止ssh會話長達20秒。Cobalt Strike將報告這些長時間運行命令的輸出。
使用sudo [password] [command + arguments]嘗試通過sudo運行命令。此別名要求目標的sudo接受-S標志。
CD命令更改SSH會話的當前工作目錄。PWD命令表示當前工作目錄。
上傳和下載文件
upload命令將文件上傳到當前工作目錄。 download命令將下載文件。使用下載命令下載的文件可在View -> Downloads下找到。您還可以鍵入 downloads以查看正在進行的文件下載。該cance命令將取消正在進行中的下載。
點對點C2
SSH會話可以控制TCPBeacons。使用connect命令可以控制等待連接的TCP Beacon。使用unlink命令斷開TCP Beacon會話。
進入到[session] - > Listeners - > Pivot Listener ...以設置與此SSH會話關聯的數據轉發監聽器。這將允許此受控的UNIX目標接收反向TCP Beacon會話。此選項確實要求SSH守護程序的GatewayPorts選項設置為yes或ClientSpecified。
SOCKS轉發和反向端口轉發
使用socks命令在您的團隊服務器上創建一個socks服務器,通過ssh會話轉發流量。rportfwd命令還將創建一個反向端口轉發,通過ssh會話和 Beacon鏈路由流量。
rportfwd有一個警告:rportfwd命令要求SSH守護程序綁定到所有接口。SSH守護程序很可能會覆蓋此並強制端口綁定到localhost。您需要將SSH守護程序的GatewayPorts選項更改為yes或clientspecified
利用Cobalt Strike SSH會話進行Unix后期利用
系統分析器
System Profiler是用於客戶端攻擊過程的偵察工具。此工具啟動本地Web服務器,並對訪問它的任何人進行身份識別。System Profiler會發現代理服務器后面的用戶的內部IP地址以及多個應用程序及其版本信息。
要啟動System Profiler,請進入到Attacks - > Web Drive-by - > System Profiler。
啟動Profiler必須指定要綁定的URI和啟動Cobalt Strike Web服務器的端口。
如果您指定一個Redirect URL,Cobalt Strike將在獲取訪問者的配置文件后將其重定向到此URL。單擊“Launch”以啟動System Profile。
System Profiler使用未簽名的Java Applet來分解目標的內部IP地址,並確定目標的Java版本。使用Java的點擊運行安全功能 - 這可能會引起懷疑。取消選中Use Java Applet獲取信息框,以便在沒有Java Applet的情況下運行System Profiler。
選中Enable SSL以通過SSL提供此內容。在Malleable C2配置文件中指定有效的SSL證書時,此選項可用。
要從System Profiler 查看結果,請進入到 View -> Applications。Cobalt Strike將列出它在系統分析過程中發現的所有應用程序。
Client-side Reconaissance
目標和服務
您可以通過View - > Targets與Cobalt Strike的目標信息進行交互。此選項卡顯示與“目標可視化”相同的信息。
選擇Import以導入包含目標信息的文件。Cobalt Strike接受每行一個主機的純文本文件。它還接受由nmap生成的XML文件。。
選擇Add 以手動將新目標添加到Cobalt Strike的數據模型中。
添加目標
此對話框允許您將多個主機添加到Cobalt Strike的數據庫中。指定一個IP地址范圍或在地址字段中使用CIDR表示法一次添加多個主機。單擊“保存”將主機添加到數據模型並保持此對話框打開時按住SHIFT鍵。
選擇一個或多個主機,然后右鍵單擊以打開主機菜單。此菜單用於更改主機上的說明、設置其操作系統信息或從數據模型中刪除主機。
服務
在目標顯示中,右鍵單擊主機,然后選擇“ Services.”。這將打開Cobalt Strike的服務瀏覽器。在這里,您可以瀏覽服務,為不同的服務分配注釋,以及刪除服務記錄
Cobalt Strike中的Unicode支持
Unicode是通用語言中字符到固定數字或代碼點的轉換。下文介紹了Cobalt Strike對Unicode文本的支持
編碼
Unicode是字符到數字(代碼點)的轉換,但它不是編碼。編碼是通過將單個序列或字節序列映射到該映射中的代碼點來為其賦予意義的相同方法。
在內部,Java應用程序使用UTF-16編碼存儲和操作字符。UTF-16是一種使用兩個字節來表示普通字符的編碼。Rarer字符用四個字節表示。Cobalt Strike是一個Java應用程序,在內部,Cobalt Strike能夠在世界各種系統中存儲,操作和顯示文本。在核心Java平台上沒有真正的技術障礙。
在Windows系統中,情況有所不同。Windows中用於表示字符的選項可以追溯到DOS日期。DOS程序使用ASCII文本和那些漂亮的制表符。將數字0-127轉換成US ASCII和128-255,轉換成漂亮的制表符的常見編碼有一個名稱,它叫代碼頁437。代碼頁437有幾種版本,將漂亮的制表符與特定語言的字符混合在一起。此編碼集合稱為OEM編碼。現在,每個Windows實例都有一個全局OEM編碼設置。此設置表示如何編譯程序寫入控制台的字節輸出。為了正確地編譯cmd.exe的輸出,了解目標的OEM編碼是很重要的。
盡管如此有趣。制表符是DOS程序所需要的,但不一定是Windows程序。因此,有了這個,Windows就有了ANSI編碼的概念。這是一個全局設置,如OEM編碼。ANSI編碼規定了ANSI Win32 API如何將字節序列轉換成代碼點。一種語言的ansi編碼放棄了為其設計編碼的語言中有用的字符而使用的漂亮的制表符。編碼不一定限於將一個字節轉換成一個字符。可變長編碼可以將最常見的字符表示為單個字節,然后將其他字符表示為一些多字節序列。
不過,ANSI編碼並不完整。Windows API通常具有ANSI和Unicode版本。API的ANSI版本接受並解釋如上所述的文本參數。Unicode Win32 API需要使用UTF-16編碼的文本參數。
在Windows中,可能存在多種編碼情況。有OEM編碼,可以用目標配置的語言表示一些文本。有ANSI編碼可以表示更多的文本,主要是在目標的配置語言中。而且,UTF-16可以包含任何代碼點。還有UTF-8,它是一種可變長編碼,對ASCII文本來說空間有效率很高,但也可以包含任何代碼點。
Beacon
Cobalt Strike的Beacon輸出目標的ANSI和OEM編碼作為其會話元數據的一部分。Cobalt Strike根據需要使用這些值將文本輸入編碼為目標的編碼。Cobalt Strike還根據需要使用這些值對目標的編碼文本輸出進行解碼。
一般來說,文本與目標編碼之間的轉換對您是透明的。如果您在一個目標上執行,配置為一種語言,事情將按您的期望執行。
當您在使用混合語言環境時,命令之間會出現不同的結果。例如,如果輸出包含來自西里爾字母、中文和拉丁字母的字符,則某些命令將正常執行,而其他不會正常執行。
Beacon中的大多數命令使用目標的ANSI編碼來編碼輸入和解碼輸出。目標配置的ANSI編碼可能只將字符映射到少數寫入系統的代碼點。如果當前目標的ANSI編碼未映射西里爾字符,則make_token將不會對使用西里爾字符的用戶名或密碼執行正確的操作。
在Beacon中,有些命令使用UTF-8作為輸入和輸出。。通常,這些命令將按照您對混合語言內容的要求執行。這是因為UTF-8文本可以將字符轉換成任何Unicode代碼點
下表列出了哪些Beacon命令使用ANSI編碼以外的其他內容來解碼輸入和輸出:
Command |
Input Encoding |
Output Encoding |
hashdump |
UTF-8 |
|
mimikatz |
UTF-8 |
UTF-8 |
powerpick |
UTF-8 |
UTF-8 |
powershell |
UTF-16 |
OEM |
psinject |
UTF-8 |
UTF-8 |
shell |
ANSI |
OEM |
注意:對於熟悉mimimikatz的人,您將注意到mimimikatz在內部使用unicode win32 API和utf-16字符。UTF-8是從哪里來的?Cobalt Strike與Mimikatz的接口以utf-8的形式發送輸入,並將輸出轉換為utf-8。
SSH會話
Cobalt Strike的SSH會話使用UTF-8編碼進行輸入和輸出。
日志
Cobalt Strike的日志是UTF-8編碼的文本。
字體
您的字體可能會限制顯示某些系統中的字符。要更改Cobalt Strike字體:
進入到Cobalt Strike - > Preferences - > Cobalt Strike來更改GUI Font值。這將改變Cobalt Strike在其對話框,表格和界面其余部分中使用的字體。
進入到Cobalt Strike - > Preferences - > Console以更改Cobalt Strike控制台使用的字體。
Cobalt Strike - > Preferences - > Graph有一個Font選項來更改Cobalt Strike的pivot圖所使用的字體
USB/CD 自動播放攻擊
Cobalt Strike的 USB/CD 自動播放攻擊可幫助您將CD-ROM或USB驅動器轉變為針對Windows XP和Windows Vista系統的攻擊。Cobalt Strike創建了一個autorun.info文件,它添加了一個自動播放操作並掛鈎了驅動器的幾個shell命令。這些掛鈎將允許用戶在嘗試查看驅動器的內容時無意中運行您指定的可執行文件
要創建惡意USB驅動器,請進入到Attacks - > Packages - > USB/CD AutoPlay
在“ Media Label ”字段中指定驅動器的名稱。
提供自動播放操作(AutoPlay Action)文本。當插入驅動器時,將在操作列表的頂部向用戶顯示此內容。此外,請確保在驅動器上放置幾個支持您的符文的合法文件。Windows根據用戶在驅動器上看到的文件類型向用戶顯示操作。
提供自動播放操作文本。當驅動器插入時,這將顯示在操作列表頂部的用戶。另外,請確保您在驅動器上放置了幾個支持您的詭計的合法文件。Windows根據用戶在驅動器上看到的文件類型向用戶顯示操作
指定自動播放圖標(AutoPlay Icon)。您可以引用驅動器上的文件或在標准位置指定圖標。
最后,選擇要運行的可執行文件。您可以 通過Cobalt Strike 生成可執行文件,或者如果需要,可以使用另一個可執行文件。
選擇“Launch”並選擇保存文件的位置。這些文件應最終位於驅動器的根目錄上,這樣攻擊才能正常執行。
此攻擊最適合Windows XP系統。它的一部分可以在Windows Vista上運行。此攻擊不適用於Windows 7。
注意:此攻擊的實現已過時,在現有的最新環境中不起作用。
Website Clone Tool(網站克隆工具)
在將漏洞發送到目標之前,它有助於對其進行修飾。Cobalt Strike的網站克隆工具可以幫助解決這個問題。網站克隆工具生成一個本地網站副本,其中添加了一些代碼以修復鏈接和圖像,以便它們按預期執行。
要克隆網站,請進入到Attacks -> Web Drive-by -> Clone Site.
可以將攻擊嵌入到克隆的站點中。在Embed字段中寫下攻擊的URL,Cobalt Strike將使用IFRAME將其添加到克隆的站點。點擊...按鈕並選擇一個正在運行的客戶端漏洞。
克隆的網站也可以捕獲鍵盤輸入。選中Log keystrokes on cloned site框。這將在克隆的站點中插入一個javascript密鑰記錄器。
要查看記錄的鍵盤輸入或查看克隆站點的訪問,請進入到View -> Web Log.。
選中Enable SSL以通過SSL提供此內容。在Malleable C2配置文件中指定有效的SSL證書時,此選項可用。確保Host字段與SSL證書的CN字段匹配。這將避免由於這些字段之間的不匹配而導致此功能失敗的情況
選中“ Enable SSL to serve this content over SSL.”。
Delivering Beacon with a Metasploit Framework Exploit
Covert VPN
Cobalt Strike通過其Covert VPN功能來提供VPN 轉發。Covert VPN在Cobalt Strike系統上創建了一個網絡接口,並將此接口連接到目標網絡。
如何部署Covert VPN
要激活Covert VPN,請右鍵單擊受控的主機,進入到 [beacon] - > Pivoting - > Deploy VPN。選擇您希望Covert VPN綁定到的遠程接口。如果沒有本地接口,請選擇Add來創建。
檢查克隆主機MAC地址,使本地接口與遠程接口具有相同的MAC地址。
選擇Deploy在目標上啟動Covert VPN客戶端。Covert VPN需要管理員訪問才能部署。
一旦Covert VPN接口被激活,您就可以像使用系統上的任何物理接口一樣使用它。使用ifconfig配置其IP地址。如果目標網絡具有DHCP服務器,則可以使用操作系統的內置工具從該服務器請求IP地址
管理接口
要管理您的Covert VPN接口,請進入到Cobalt Strike - > Interfaces。在這里,Cobalt Strike將顯示Covert VPN接口,它們的配置方式以及通過每個接口傳輸和接收的字節數。突出顯示一個接口,然后選擇“Remove”清除該接口並關閉遠程Covert VPN客戶端。。Covert VPN將在重新啟動時刪除其臨時文件,並立即自動撤消任何系統更改。
選擇Add 以配置新的Covert VPN接口。
配置接口
Covert VPN接口包括一個網路分流器(Network Tap)和一個通過以太網幀進行通信的通道。要配置接口,請選擇接口名稱(這是稍后通過ifconfig操作的內容)和MAC地址。
VPN接口設置
您還必須為您的接口配置Covert VPN通信通道。Covert VPN可以通過UDP連接、TCP連接,ICMP或使用HTTP協議來通信以太網幀。TCP(反向)通道的目標連接到Cobalt Strike實例。TCP(Bind)通道通過Beacon具有Cobalt Strike隧道VPN。
Cobalt Strike將根據您選擇的本地端口和通道設置和管理與Covert VPN客戶端的通信。
Covert VPN HTTP通道使用Cobalt Strike Web服務器。您可以在同一端口上托管其他Cobalt Strike Web應用程序和多個Covert VPN HTTP通道。
為獲得最佳性能,請使用UDP通道。與TCP和HTTP通道相比,UDP通道的消耗最小。如果需要通過防火牆,請使用ICMP,HTTP或TCP(Bind)通道。
注意:此功能在Windows 10目標上不起作用。
創建Windows Dropper EXE
dropper是一個可執行文件,它將文檔存儲到磁盤上,打開它,然后在后台以靜默方式執行攻擊者的有效負載。Attacks -> Packages -> Windows Dropper將為您生成一個Windows Dropper。
Embedded File是嵌入可執行的文件。您可以在此處使用任何文件類型。
File Name是文件存儲到磁盤時的名稱。您應該盡可能使此名稱與您的dropper的計划名稱相匹配。Cobalt Strike會將嵌入的文件存儲到用戶的Documents文件夾中。
選擇Generate生成Dropper可執行文件。
使用圖標編輯器(icon editor )將可執行文件的圖標更改為嵌入式文件。
Cobalt Strike的Artifact Kit生成Windows Dropper可執行文件。
創建Windows EXE
Attacks -> Packages -> Windows Executabl生成一個win32偵聽器的windows可執行artifact。此包提供了幾個輸出選項:
Windows EXE是Windows可執行文件。
Windows Service EXE 是響應服務控制管理器命令的Windows可執行文件。您可以使用此可執行文件創建帶有sc的Windows服務,或使用Metasploit®Framework的PsExec模塊創建自定義可執行文件。
Windows DLL (32-bit) 是一個x86 Windows DLL。
Windows DLL (64-bit)是一個x64 Windows DLL。如果未選中Use x64 payload”,則x64 DLL將生成32位進程並將偵聽器遷移到該進程。
x86和x64 DLL選項導出與rundll32.exe兼容的Start函數。使用適合體系架構的rundll32.exe從命令行加載DLL。
rundll32 foo.dll,Start
此功能生成x86 artifacts,默認情況下提供x86架構(除非另有說明)。選中Use x64 payload 框以生成包含x64有效負載架構的x64 artifacts。
選中Sign executable file框,使用代碼簽名證書對EXE或DLL artifacts進行簽名。必須在Malleable C2配置文件中指定證書。
Cobalt Strike使用其Artifact Kit生成此輸出。
創建Windows Executable (Stageless)
Attacks -> Packages -> Windows Executable (S) 生成一個Windows可執行artifacts,其中包含Cobalt Strike的Beacon(沒有stagers,因此沒有穩定有效載荷)。此包提供了幾個輸出選項:
PowerShell是一個PowerShell腳本,它向內存中注入一個不穩定的Beacon。
Raw是一個包含Beacon的與位置無關的代碼塊。
Windows EXE是Windows可執行文件。
Windows Service EXE 是響應服務控制管理器命令的Windows可執行文件。您可以使用此可執行文件創建帶有sc的Windows服務,或使用Metasploit®Framework的PsExec模塊創建自定義可執行文件。
Windows DLL (32-bit) 是一個x86 Windows DLL。
Windows DLL (64-bit) 是一個x64 Windows DLL。如果未選中“ Use x64 payload”,則x64 DLL將生成32位進程並將偵聽器遷移到該進程。
x86和x64 DLL選項導出與rundll32.exe兼容的Start函數。使用適合體系架構的rundll32.exe從命令行加載DLL。
rundll32 foo.dll,Start
Proxy字段配置用於Beacon的手動代理設置。這是可選的。
此功能生成x86 artifacts,默認情況下提供x86架構(除非另有說明)。選中Use x64 payload 框以生成包含x64有效負載架構的x64 artifacts。
選中Sign executable file框,使用代碼簽名證書對EXE或DLL artifacts進行簽名。必須在Malleable C2配置文件中指定證書。
Cobalt Strike使用其Artifact Kit生成此輸出。。
Lateral Movement Demonstration