CS-exe木馬分析

本文為看雪論壇優秀文章
看雪論壇作者ID:pyikaaaa
Cobalt Strike是滲透測試工具,可以通過exe木馬實現遠程控制。
一、生成exe
Windows Executable 生成可執行exe木馬;payload分段。
Windows Executable(S) 生成無狀態的可執行exe木馬,payload不分段。

分析Windows Executable 生成的artifact.exe
查殼:無殼
二、具體分析
401840關鍵函數:獲取系統時間戳,通過sprintf拼接管道名,創建線程,寫加密數據到創建的管道內,最后解密執行。


線程函數:
[
跟進線程函數,創建命名管道,將加密數據寫進管道內。

加密的數據:

加密數據crypt_data1寫入管道內。

讀取管道內的數據,解密數據,跳轉執行。


decodeandcall:解密數據,修改內存屬性,跳轉執行。

用于解密的數組:

申請的內存地址20000。

跳轉到eax:20000執行shellcode。

shellcode分析:
1.loadlibrary加載wininet.dll

InternetOpen函數:在進行HTTP、FTP和服務器通信前初始化 WinInet.dll 。簡單的說通過 InternetOpen 函數創建位于根部的 Hinternet 句柄。

InternetConnect 連接:192.168.99.8

HttpOpenRequestA 創建 HTTP 請求句柄。

HttpSendRequestA發送HTTP請求到指定的服務器。

virtualalloc 申請內存:

不斷internetreadfile 讀數據到申請的內存。

讀到的數據:

讀完數據后繼續跟。

跳轉到申請的內存處,解密出dll。

解密出的pe文件。

后面繼續跟就是反射dll注入。
7CB2+7為 ReflectiveLoader函數的偏移,call ebx調用ReflectiveLoader函數反射注入dll,壓入參數call eax 調用dllmain。

dec ebp ; Mpop edx ; Zcall 0 ; 將下一條指令地址壓到棧里pop ebx ; 將壓到棧里的地址彈到ebxpush edx ;inc ebp ;push ebp ; 保存ebpmov ebp, esp ; 切換堆棧add ebx,0x??? ; ebx+ReflectiveLoader函數偏移-7(ebx相起始偏移7)call ebx ; call ReflectiveLoader
