cobalt strike 插件開發


0x01 agscript簡介

 

agscriptAggressor Script的簡寫。

 

agscriptCobaltStrike 3.0之后版本中內置的腳本語言,利用Aggresor編寫腳本可輕松地武裝您的CobaltStrike客戶端。

 

agscript是一種簡單腳本語言,主要用於紅隊編寫針對肉雞的攻擊腳本。 它有兩個作用,

一是可以用來對自己的肉雞做持久性控制。

二是可以用來擴展或修改Cobalt Strike客戶端以滿足您的個性化需求。

cobalt strike agscript的官方文檔:

https://www.cobaltstrike.com/aggressor-script/index.html

 

0x02 如何使用

0x0201 加載腳本

agscript內置於Cobalt Strike 客戶端, 如果需要長期使用agscript, 請移步Cobalt Strike客戶端 -> Script Manager and press Load功能。

image.png

 

0x0201 腳本控制台

Cobalt Strike提供了交互式的腳本控制台。 通過控制台可跟蹤,配置,調試以及管理腳本。

可以通過View- > Script Console獲得進入agscript控制台。

 

image.png

image.png

 

命令 參數 作用
? "foo" 即 "foobar" 測試Sleep predicate並打印結果
e println("foo"); 測試Sleep statement
help - 列出所有命令
load /path/to/script.cna 加載腳本
ls - 列出已加載的腳本
proff script.cna 禁用腳本的Sleep Profiler
profile script.cna 轉儲腳本的性能統計信息
pron script.cna 啟用腳本的Sleep Profiler
reload script.cna 重新加載腳本
troff script.cna 禁用腳本的功能跟蹤
tron script.cna 啟用腳本的功能跟蹤
unload script.cna 卸載腳本
x 2 + 2 執行表達式並返回結果

 

 

0x0203命令行使用agscript

您也許會希望在在沒有GUI的情況下啟動Cobalt Strike,客戶端壓縮包中的agscript這個腳本文件能夠滿足您的需求,連接命令:

./agscript [host] [port] [user] [password]

上述命令可以使您快捷的連接到團隊的服務器,當然,如果您希望加載agscript腳本還可以這樣寫參數:

./agscript [host] [port] [user] [password] [/path/to/script.cna]

上述命令可以連接團隊服務器並運行您的腳本,下面給出一段demo代碼:

on ready {  println("Hello World! I am synchronized!");  closeClient(); }

image.png

0x0204 交互式操作

agscript顯示輸出同樣使用了Sleep&println, &printAll, &writeb, 以及&warn這四個函數,這些函數均可在控制台輸出內容。

大多數語言都可以注冊快捷命令,agscript也不例外,使用command即可創建命令:

command foo {  println("Hello $1"); }

這段代碼將會注冊命令foo,腳本控制台會自動解析命令的參數,並按空格將它們拆分為參數,$1是第一個參數,$2是第二個參數,依此類推。用戶可以使用“雙引號”來創建帶空格的參數。 如果這種解析對您可能會對輸入執行造成破壞性的操作,請使用$0訪問傳遞給命令的原始文本。


image.png

 

0x0205 控制台文本顏色

如果你想給Cobalt Strike的控制台添加一些色彩,通過\c\U\o轉義即可告訴Cobalt Strike如何格式化文本。 值得提醒的是這些轉義僅在雙引號字符串內有效。

\cX就是告訴Cobalt Strike你想輸出什么顏色,X是顏色的值:

image.png

 

0x03 cobalt strike客戶端

cobalt strike 內置的default.cna(https://www.cobaltstrike.com/aggressor-script/default.cna) 就是定義了工具欄是如何顯示的,並且規定了腳本控制台中的命令等等

image.png

 

本章將向您展示這些功能的工作流程,並使您能夠根據需要打造自己的Cobalt Strike客戶端。

 

0x0301 快捷鍵綁定

使用bind可以快速的綁定快捷鍵,如果說我們像做一個按ctrl+P的快捷鍵打印出hello fengxuan的程序,我們該如何實現?

bind Ctrl+P {  show_message("hello fengxuan!") }

 

加載后,按ctrl+p 就打印出

image.png

快捷鍵可以是任何ASCII字符或特殊鍵,快捷方式可能會應用一個或多個修飾符,修飾符修飾符僅為以下幾個特定按鍵:Ctrl,Shift,Alt,Meta。腳本可以指定修飾符+鍵。

 

0x0302 彈出菜單

 

cobalt strike 可以使用popup 這個關鍵字來實現我們自定義的彈窗。我們來舉個例子:

menubar("風炫測試tab2", "newtab", 1); popup newtab {  item("&我的主頁", { url_open("https://evalshell.com/"); });  separator();  separator();  item("&About", { openAboutDialog(); }); }

這個例子就是新建一個風炫測試tab2的tab標簽,然后下面有兩個下拉菜單,分別是我的主頁和about,點擊我的主頁就會跳轉到https://evalshell.com/

image.png

0x0303 自定義輸出

agscript中的set關鍵字定義了如何格式化事件並將其輸出呈現給客戶端。 以下是set關鍵字的demo:

set EVENT_SBAR_LEFT {  return "[" . tstamp(ticks()) . "] " . mynick(); } set EVENT_SBAR_RIGHT {  return "[lag: $1 $+ ]"; }

上面的代碼定義了Cobalt Strike的事件日志(View -> Event Log)中狀態欄的內容,此狀態欄的左側顯示當前時間和您的昵稱,右側顯示了Cobalt Strike客戶端和團隊服務器之間的消息往返時間。

Cobalt Strike中默認的各種設置都可以通過統一的方法來修改覆蓋。

 

0x0304 事件管理

使用on這個關鍵字可以為事件定義處理程序,當Cobalt Strike連接到團隊服務器並准備代表您行動時,就緒事件將觸發。demo:

on ready {  show_message("Ready for action!"); }

使用* meta-event可查看再Cobalt Strike中發生的所有事件。

on * {  local('$handle $event $args');  $event = shift(@_);  $args = join(" ", @_);  $handle = openf(">>eventspy.txt");  writeb($handle, "[ $+ $event $+ ] $args");  closef($handle); }

 

 

0x04 數據API

teamserver  服務器存儲了所有主機,服務,憑據等信息信息。

 

0x0401 數據模型

使用&data_query函數即可查詢到Cobalt Strike的數據模型。 這個函數可以訪問Cobalt Strike客戶端維護的所有狀態和信息。 使用&data_keys多了一個可以查詢制定數據的功能,看demo:

command dumpallinfo {  local('$handle $model $row $entry $index');  $handle = openf(">fengxuan.txt");  foreach $model (data_keys()) {  println($handle, "== $model ==");  println($handle, data_query($model));  }  closef($handle);  println("See fengxuan.txt for the data."); }

 

image.png

image.png

Cobalt Strike提供了多種功能方便攻擊者們更直觀地使用數據模型。

模型 函數 功能描述
applications &applications 系統分析結果 [View -> Applications]
archives &archives 連接日志/活動
beacons &beacons 激活beacons
credentials &credentials 賬號密碼等
downloads &downloads 下載的文件
keystrokes &keystrokes Beacon接收到鍵盤記錄
screenshots &screenshots 截圖文件啊
services &services 服務相關信息
sites &sites 資產信息
socks &pivots SOCKS代理服務以及端口轉發
targets &targets 主機信息

調用這些函數會返回一個模型中每個條目的數組,每行對於的是一個字典,字典中包含了鍵與其鍵值。

要理解這東西最簡單的方式就是直接到控制台上手調試了,x命令就是為此准備的,看圖

image.png

用x命令執行命令表達式,比如說上面的targets()是一個數組信息 用x命令就可以像python中字典一樣輕松訪問數據。

 

on keystrokes {  println("I have new keystrokes: $1"); }

這行代碼表示,在接收到鍵盤記錄的時候 就打印I have new keystrokes: 記錄的字母

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM