
صندوق أدوات يحتوي على ملاحظات بحثية وكود PoC لتسليح DLR الخاص بـ .NET
صندوق أدوات يحتوي على ملاحظات بحثية وكود إثبات المفهوم لتسليح DLR الخاص بـ .NET
| السكربت | الوصف |
|---|---|
Kukulkan | نسخة مصغرة من SILENTTRINITY، DLL و EXE بلغة C# تدمج محرك IPY. الاتصالات مشفرة ويمكن استخدامها مع CobaltStrike |
Invoke-JumpScare.ps1 | ينفذ شيلكود باستخدام مترجم Boolang مضمّن، لا شيء يلمس القرص (على الأقل مما رأيته) ولا توجد استدعاءات لـ csc.exe :) |
Invoke-IronPython.ps1 | ينفذ كود IronPython باستخدام محرك IPY المضمّن. نفس مفهوم Invoke-JumpScare ولكن باستخدام IronPython. |
Invoke-ClearScript.ps1 | ينفذ كود JScript (أو VBScript) باستخدام محرك ClearScript المضمّن |
SharpSnek.cs | كود C# يدمج محرك IronPython وينفذ كود IPY مضمّن. يربط AppDomain.CurrentDomain.AssemblyResolve لحل التجميعات المطلوبة وقت التشغيل. |
runBoo.cs | نسخة C# من Invoke-JumpScare. ينفذ شيلكود باستخدام مترجم Boolang مضمّن. |
runBooAssemblyResolve.cs | كود C# يدمج مترجم Boolang وينفذ كود Boolang مضمّن. يربط AppDomain.CurrentDomain.AssemblyResolve لحل التجميعات المطلوبة وقت التشغيل. |
minidump.boo | سكربت Boolang أصلي لتفريغ الذاكرة باستخدام MiniDumpWriteDump |
shellcode.boo | سكربت Boolang أصلي ينفذ شيلكود. يحتوي حالياً على 3 تقنيات مختلفة (QueueUserAPC، CreateThread/WaitForSingleObject، WriteProcessMemory/CreateRemoteThread) |
Invoke-SSharp.ps1 | ينفذ SSharp من مترجم مضمّن داخل PowerShell. التجميع لا يستدعي csc.exe |
Invoke-Boolang.ps1 | ينفذ كود Boo من مترجم مضمّن. كما يوفر حلولاً لبعض الأخطاء التي اكتشفتها عندما يتم تضمين مترجم Boolang داخل PowerShell. |
Invoke-NeoLua.ps1 | ينفذ كود Lua من مترجم مضمّن داخل PowerShell. |
إن .NET DLR هو ببساطة أمر جنوني، فهو يسمح لك بفعل أشياء مجنونة مثل تضمين مترجمين/محركات داخل لغات .NET أخرى (مثل PowerShell و C#) مع البقاء آمناً من الناحية الأمنية التشغيلية والبقاء في الذاكرة. في حالة IronPython، يمكنك حتى الحصول على ما أسميه 'تضمين المحرك': هل تريد تضمين محرك IPY داخل محرك IPY داخل محرك IPY آخر؟ (نعم يا صاح، سمعت أنك تحب محركات IPY...).
من منظور هجومي، هذا يوفر مرونة هائلة وعدداً من المزايا، على سبيل المثال لا الحصر:
وصول خارج الصندوق إلى واجهة برمجة التطبيقات .NET، دون المرور عبر PowerShell بأي شكل. بشكل أساسي، استخدام DLR يمنحك كل قوة PowerShell، ولكن بدون PowerShell وبلغة يسهل عادةً كتابة السكربتات بها (مثل Python)
كميات هائلة من الانعكاس/التضمين تحدث طوال الوقت، مما يعني المزيد من المراوغة.
باستخدام DLR تتجاوز دائماً AMSI (إذا قمت بتجهيز حمولاتك بشكل صحيح)، لا حاجة للتعتيم أو التصحيح إلخ.
كل 'شرك' يمكن برمجته بلغة المحرك/المترجم المضمّن. إذا قمت بذلك باستخدام PowerShell، فإن تسجيل ScriptBlock لا يرى شيئاً لأن كل السحر يحدث في DLR.
عادةً، جميع لغات DLR لديها طريقة لاستدعاء الأساليب الأصلية إما من خلال اللغة نفسها أو عن طريق تجميع C# بشكل ديناميكي (مثل Add-Type في PowerShell).
إذا اخترت الطريقة الأولى، لا توجد استدعاءات لـ csc.exe وعادة لا يتم إسقاط أي شيء على القرص لأن اللغات تولد كل ما هو مطلوب في الذاكرة من خلال كود IL.
يمكننا الذهاب "...منخفضاً وعالياً كما نريد" (Op_nomad) وهذا يسمح لنا بفعل كل الأشياء الجيدة التي نحبها (حقن الشيلكود، DLL غير المُدارة، تحميل PEs إلخ)
يسمح بإعادة تجهيز وتسليح الحمولات بسرعة. لا حاجة للتجميع اليدوي.
إذا كنت مهتماً بهذا، إليك بعض الأدوات الأخرى التي تحاول أيضاً تسليح DLR:
تحذير عادل، إذا بدأت في قراءة هذه المواد، فسوف تقودك إلى جحر أرنب جهنمي (مع أرانب شيطانية فعلية).