這篇文章將為大家詳細講解有關從剖析CS木馬生成到開發免殺工具的過程是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
創新互聯公司基于成都重慶香港及美國等地區分布式IDC機房數據中心構建的電信大帶寬,聯通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業成都服務器托管報價,主機托管價格性價比高,為金融證券行業服務器托管,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業成都idc公司。
木馬是黑客實施網絡攻擊的常用兵器之一,有些木馬可以通過免殺技術的加持躲過殺毒軟件的查殺。本文旨在通過剖析CS木馬生成過程以及開發免殺工具,幫助大家更好地理解CS木馬的Artifact生成機制。
Cobaltstrike是用于紅隊行動、APT攻擊模擬的軟件,它具備很強大的協同能力和難以置信的可擴展性。
無論是編寫 shellcode,創建自定義的 C2二進制可執行文件,還是修改代碼來隱藏惡意程序,它們都是紅隊日常工作的一部分,閱讀和理解成熟的C2框架代碼也是理所當然的事情。
CS是使用Swing進行UI開發的,代碼中直接找對話框對應操作類。
+ `aggressor\dialogs\WindowsExecutableDialog.class`
可以看到很清晰的生成邏輯。
protected byte[] stager; @Override public void dialogAction(final ActionEvent actionEvent, final Map options) { this.options = options; this.stager = DialogUtils.getStager(options); if (this.stager.length == 0) { return; } final String string = options.get("output") + ""; String s = ""; if (string.indexOf("EXE") > -1) { s = "artifact.exe"; } else if (string.indexOf("DLL") > -1) { s = "artifact.dll"; } SafeDialogs.saveFile(null, s, this); }
通過 DialogUtils.getStager() 獲得生成的 stager 然后通過 saveFile 保存文件。
getStager() 方法調用了 aggressor\DataUtils.shellcode() ,而這里其實是Stagers的接口。
return Stagers.shellcode(s, "x86", b);
最終在 stagers\Stagers.shellcode() 根據監聽器類型,
實例化了繼承自的 GenericStager 的 stagers\GenericHTTPStager 類,并由 generate() 生成shellcode
shellcode生成時,讀取了resources/httpstager.bin,并根據監聽器的host和port等值組合為Packer
最終替換到多個X、Y占位的bin文件中,最后返回bytes[] 類型的shellcode
shellcode生成完成后,回到原點,可以看到根據用戶的選擇,對不同的 artifact 模板進行 patch ,以 x86 的模板為例,
繼續跟進 patchArtifact
new ArtifactUtils(this.client).patchArtifact(this.stager, "artifact32.exe", s);
+ `common\BaseArtifactUtils.class`
public byte[] patchArtifact(final byte[] array, final String s) { final Stack<Scalar> stack = new Stack<Scalar>(); stack.push(SleepUtils.getScalar(array)); stack.push(SleepUtils.getScalar(s)); final String format = this.client.getScriptEngine().format("EXECUTABLE_ARTIFACT_GENERATOR", stack); if (format == null) { return this.fixChecksum(this._patchArtifact(array, s)); } return this.fixChecksum(CommonUtils.toBytes(format)); }
稍微看一下 fixChecksum ,是通過 PE 編輯器修復了校驗碼。
這里不贅述了,對編輯器實現感興趣的可以去看看 pe\PEEditor.class
final PEEditor peEditor = new PEEditor(array); peEditor.updateChecksum(); return peEditor.getImage();
注意看這里 this._patchArtifact(array, s) ,調用了同名方法,PS:差點以為在看Python
讀取了 resources 文件夾下的 artifact32.exe 作為模板文件,根據重復的1024個 A 來定位shellcode 位置。
與生成shellcode時類似,使用common/CommonUtils.replaceAt()對bytes流轉為的字符串進行編輯替換。
public static String replaceAt(final String s, final String s2, final int n) { final StringBuffer sb = new StringBuffer(s); sb.delete(n, n + s2.length()); sb.insert(n, s2); return sb.toString(); }
使用16進制編輯器可以直接看到用于標志存放 shellcode 的位置。
值得一提的是,替換shellcode之后的pe文件,因為shellcode長度沒有完全覆蓋到標識的1024個A,一般生成的exe都會殘留部分字符,當然這并不會影響shellcode的執行。
利用加載器遠程回連獲取下一階段 payload 加載到內存中執行以規避殺軟的探測,這種 VirtualAlloc到 WriteProcessMemory 的分配內存模式早已被眾多遠控木馬軟件廣泛利用。
CS開發者在其最新的介紹視頻中披露了部分 artifact 的源碼,并演示了如何通過修改加載器繞過了Defender 的查殺。
他通過用 HeapAlloc 來代替 VitualAlloc ,躲避了大部分的殺軟。
在這個基礎上,我們添加了對shellcode進行異或加密的功能,顯然一個非常精簡的基于c++的shellcode加載器就成形了。
然后參考CS的方式,在本應放置shellcode的buf中,置入大量重復的占位符作為定位。
python -c "print(1024*'A')"
用VisualStudio或MingW將其編譯為 template.exe
然后新建一個 JavaFx 的項目,樣式與部分代碼參考某chaos免殺小助手。
捋下流程,首先需要對CS或MSF的shellcode進行預處理,然后進行異或加密,讀取模板文件,定位到shellcode位置,進行覆蓋,最后保存。
有很多類直接可以從CS復制過來就能用。
重點看下xor,為了跟launcher解密一致,需要先轉換為int類型進行異或,然后再轉回hex,最終打包為 jar
生成veil類型的payload,復制粘貼,生成, 保存。
最終免殺效果取決于Launcher模板,作為一個非常精簡、沒什么改動的模板,效果已經出乎意料了。
畢竟目的并非追求免殺效果,而應注重于理解CS木馬的Artifact生成機制。
關于從剖析CS木馬生成到開發免殺工具的過程是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網站名稱:從剖析CS木馬生成到開發免殺工具的過程是怎樣的
分享網址:http://m.newbst.com/article6/jesoig.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、靜態網站、品牌網站建設、網站排名、、企業建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯