1. 程式人生 > 其它 >CobaltStrike逆向學習系列(15):CS功能分析-BOF

CobaltStrike逆向學習系列(15):CS功能分析-BOF

這是[信安成長計劃]的第 15 篇文章

0x00 目錄

0x01 BOF功能分析

0x02 BOF功能執行

0x03 寫在最後

其實在看過 RDI 與 DotNet 功能執行之後,BOF 的執行基本就不用再說了,唯一需要提及的可能就是它所包含的技術,而且相關的文章和程式碼也都很豐富了

0x01 BOF功能分析

在 CS 中,有相當一部分功能都是 BOF 形式的,我們隨意選擇一個

它繼承了 PostExInlineObject 類,需要自己實現的並不多,但實際上,一些函式還是自己實現的好

在實際呼叫的時候,會先獲取到 beacon 的 payload 和架構,然後一起傳入後,呼叫了 go

在 go 函式裡,首先會獲取到需要執行的 bof 檔案,然後對其進行解析

在其中他會獲取執行函式,預設執行的函式是 go

這裡就可以自己實現這個函式,讓名字按照自己的想法來走

之後會對一些關鍵的位置進行解析,OBJ 實際上就是編譯後但未連結的目標檔案,這裡就是把一些關鍵的節都取出來

然後接著就進行了任務的構建和傳送,在構建的時候就將關鍵的資訊都做成了一段資料,並不是將整個 OBJ 檔案直接傳送過去

最後一個放入的是引數,在我們當前這個 BOF 功能中,引數就是 beacon 的 payload,用於 BypassUAC 之後直接上線的

再結合之前的 DotNet 的操作,可以發現,引數是非常重要的,也是非常便於擴充套件的,我們可以定製自己想要的方式,然後將其他的內容通過引數傳遞過去,只需要在接受的時候進行處理就好了,後期的擴充套件性是很好的

0x02 BOF功能執行

這裡就不跟了,任務號是 100,感興趣的可以去看看

其中所使用的技術,有很多文章和開原始碼了,直接參照這些會更舒服一點

直接來看 COFFLoader 就可以了

https://www.trustedsec.com/blog/coffloader-building-your-own-in-memory-loader-or-how-to-run-bofs/

https://github.com/trustedsec/COFFLoader

WBGlIl 的文章也是非常好的參考

https://wbglil.gitbook.io/cobalt-strike/cobalt-strike-yuan-li-jie-shao/untitled-3

0x03 寫在最後

雖然這三種執行方式的細節點都直接略過了,實際上它們中間能夠進行的修改操作還是可以有很多的,有一些細節是可以再優化一下了,不過整體來說,CS 是真的強,整體的程式碼規劃和設計非常的完善,要在上面新增一些功能或者做一些改動都是非常方便的。