Cobalt Strike 4.0系列(三) --- 主機上線

skynet_x發表於2020-10-30

概念引入

開始之前,需要引入幾個概念。

stager:

定義 - 本身是一段儘可能小的手工優化過的彙編程式 參考 功能 - 連線到主控端,按照主控端的要求對大的payload (即
stage)進行下載、注入記憶體、執行

payload (即 stage):

定義 - 理論上是一段任意大小的、與位置無關的程式碼,被stager執行 功能 - 具體功能的實現,Cobalt
Strike的許多攻擊和工作流程都將payload用多個stage實現投遞

stageless payload

可理解為包含了payload的"全功能"被控端程式

Listener:

我的理解是:生成的木馬將執行相應的指令,Listener則負責在服務端開啟相應的監聽程式,類似於MSF中handler,等待木馬傳送的反彈shell,一旦收到木馬傳送的資料,雙方開始建立會話,CS客戶端上線。

Beacon:

為cs內建監聽器,也就是說,當我們在目標系統成功執行payload以後,會彈回一個beacon的shell給cs

Foreign:

主要是提供給外部使用的一些監聽器,比如你想利用cs派生一個meterpreter或者armitage的shell回來,來繼續後面的內網滲透,這時就選擇使用外部監聽器

主機上線

CS的攻擊方式眾多,今天主要了解以下以下三種:
在這裡插入圖片描述

Payload Generator

用該模組可以生成不同語言的payload用於執行,從而在不同的應用環境下執行並反彈SHELL到服務端完成上線。在這裡插入圖片描述

以Windows環境下的power shell為例,我們先點選箭頭所指的按鈕,在彈出的對話方塊中選擇Add新建一個Listener,引數如下。

在這裡插入圖片描述

點選Save後即可看到剛才的對話窗中出現了我們剛才新建的Listener,點選choose選擇。
在這裡插入圖片描述

設定好了Listener,在output中選擇powershell command。因為我們的測試靶機為Windows7 X64位,所以我們勾選上Use x64 payload。
在這裡插入圖片描述
點選generate,程式會將產生的程式碼放到payload.txt,選擇位置儲存後,開啟payload.txt便得到power shell命令。複製命令到靶機的power shell執行後,CS便可以看到靶機已經上線。
在這裡插入圖片描述
在CS客戶端可以看到靶機的內網外網IP、listener的名稱、靶機作業系統當前的使用者、系統名稱、反彈shell的程式、程式號、持續時間。

在靶機資訊上右鍵,點選interact便可獲得一個和meterpreter相似的互動式的命令介面。
在這裡插入圖片描述
輸入help檢視可用的命令以及命令的解釋。
在這裡插入圖片描述
在這裡貼上各種命令的解釋

beacon> help

Beacon Commands
===============

Command                   Description
-------                   -----------
argue                     程式引數欺騙
blockdlls                 阻止子程式載入非Microsoft DLL
browserpivot              注入受害者瀏覽器程式
bypassuac                 繞過UAC提升許可權
cancel                    取消正在進行的下載
cd                        切換目錄
checkin                   強制讓被控端回連一次
clear                     清除beacon內部的任務佇列
connect                   Connect to a Beacon peer over TCP
covertvpn                 部署Covert VPN客戶端
cp                        複製檔案
dcsync                    從DC中提取密碼雜湊
desktop                   遠端桌面(VNC)
dllinject                 反射DLL注入程式
dllload                   使用LoadLibrary將DLL載入到程式中
download                  下載檔案
downloads                 列出正在進行的檔案下載
drives                    列出目標碟符
elevate                   使用exp
execute                   在目標上執行程式(無輸出)
execute-assembly          在目標上記憶體中執行本地.NET程式
exit                      終止beacon會話
getprivs                  Enable system privileges on current token
getsystem                 嘗試獲取SYSTEM許可權
getuid                    獲取使用者ID
hashdump                  轉儲密碼雜湊值
help                      幫助
inject                    在注入程式生成會話
jobkill                   結束一個後臺任務
jobs                      列出後臺任務
kerberos_ccache_use       從ccache檔案中匯入票據應用於此會話
kerberos_ticket_purge     清除當前會話的票據
kerberos_ticket_use       Apply 從ticket檔案中匯入票據應用於此會話
keylogger                 鍵盤記錄
kill                      結束程式
link                      Connect to a Beacon peer over a named pipe
logonpasswords            使用mimikatz轉儲憑據和雜湊值
ls                        列出檔案
make_token                建立令牌以傳遞憑據
mimikatz                  執行mimikatz
mkdir                     建立一個目錄
mode dns                  使用DNS A作為通訊通道(僅限DNS beacon)
mode dns-txt              使用DNS TXT作為通訊通道(僅限D beacon)
mode dns6                 使用DNS AAAA作為通訊通道(僅限DNS beacon)
mode http                 使用HTTP作為通訊通道
mv                        移動檔案
net                       net命令
note                      備註       
portscan                  進行埠掃描
powerpick                 通過Unmanaged PowerShell執行命令
powershell                通過powershell.exe執行命令
powershell-import         匯入powershell指令碼
ppid                      Set parent PID for spawned post-ex jobs
ps                        顯示程式列表
psexec                    Use a service to spawn a session on a host
psexec_psh                Use PowerShell to spawn a session on a host
psinject                  在特定程式中執行PowerShell命令
pth                       使用Mimikatz進行傳遞雜湊
pwd                       當前目錄位置
reg                       Query the registry
rev2self                  恢復原始令牌
rm                        刪除檔案或資料夾
rportfwd                  埠轉發
run                       在目標上執行程式(返回輸出)
runas                     以其他使用者許可權執行程式
runasadmin                在高許可權下執行程式
runu                      Execute a program under another PID
screenshot                螢幕截圖
setenv                    設定環境變數
shell                     執行cmd命令
shinject                  將shellcode注入程式
shspawn                   啟動一個程式並將shellcode注入其中
sleep                     設定睡眠延遲時間
socks                     啟動SOCKS4代理
socks stop                停止SOCKS4
spawn                     Spawn a session 
spawnas                   Spawn a session as another user
spawnto                   Set executable to spawn processes into
spawnu                    Spawn a session under another PID
ssh                       使用ssh連線遠端主機
ssh-key                   使用金鑰連線遠端主機
steal_token               從程式中竊取令牌
timestomp                 將一個檔案的時間戳應用到另一個檔案
unlink                    Disconnect from parent Beacon
upload                    上傳檔案
wdigest                   使用mimikatz轉儲明文憑據
winrm                     使用WinRM橫向滲透
wmi                       使用WMI橫向滲透

至此主機完成上線,後續對主機的滲透直接在beacon介面 輸入命令即可。不過有個提示的地方,在Cobalt Strike中它的心跳預設是60s(即sleep時間為60s,每一分鐘目標主機與teamserver通訊一次), 這會讓我們執行命令或進行其他操作響應很慢。
一般在獲得beacon後都會先執行sleep命令重新設定睡眠時間,比如sleep5 即為每五秒與伺服器通訊一次。切記不可將sleep時間設定的太短,頻繁的通訊容易被目標察覺。

Windows Executable

該模組是用來生成Windows可執行檔案,生成的檔案中包含惡意語句,當目標主機執行了該檔案後CS便可獲得beacon。

在這裡插入圖片描述

選擇該模組,listener依舊選擇剛才設定的pwtest,output選擇常用的Windows EXE檔案。點選generate即可產生名為artifact.exe的可執行檔案,將其儲存並放到靶機執行即可上線獲得beacon。
在這裡插入圖片描述

在這裡插入圖片描述

Windows Executable(stageless)

相比於Windows Excutable,Windows Executable(stageless)生成的是stageless版本(無狀態Windows後門木馬),Staged 和 Stageless 的區別. 前者的實際功能只是和 C2 建立連線並接收 Payload, 然後載入執行, 而 Stageless 直接省去了接收 Payload 的步驟. Stageless 生成除了的 Payload 都會比 Staged 型別的要大很多, 而且包含了特徵明細。配置方法和Windows Executable一樣,生成的檔名為beacon.exe。

在這裡插入圖片描述

將其放到靶機執行即可上線。
在這裡插入圖片描述

相關文章