Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
NativeDump — تفريغ lsass باستخدام وظائف NTAPI فقط عن طريق صياغة ملفات Minidump يدويًا (بدون MiniDumpWriteDump!!!) | Kitploit
أدوات/GitHubGitHub/ricardojoserf/nativedump
تحليل الذاكرة الجنائيما بعد الاستغلالالفريق الأحمر
GitHubricardojoserf/nativedump

NativeDump

تفريغ lsass باستخدام وظائف NTAPI فقط عن طريق صياغة ملفات Minidump يدويًا (بدون MiniDumpWriteDump!!!)

عرض المستودعالموقع الإلكتروني
74510423منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

NativeDump

تتيح أداة NativeDump تفريغ عملية lsass باستخدام NTAPIs فقط، منتجة ملف Minidump يحتوي فقط على التدفقات اللازمة لتحليلها بواسطة أدوات مثل Mimikatz أو Pypykatz (تدفقات SystemInfo و ModuleList و Memory64List).

esquema

  • استخدام NTOpenProcessToken و NtAdjustPrivilegeToken للحصول على صلاحية "SeDebugPrivilege"
  • استخدام RtlGetVersion للحصول على تفاصيل إصدار نظام التشغيل (الرقم الرئيسي والرقم الثانوي ورقم البناء). هذا ضروري لتيار SystemInfo
  • استخدام NtQueryInformationProcess و NtReadVirtualMemory للحصول على عنوان lsasrv.dll. هذه هي الوحدة الوحيدة اللازمة لتيار ModuleList
  • استخدام NtOpenProcess للحصول على مقبض لعملية lsass
  • استخدام NtQueryVirtualMemory و NtReadVirtualMemory للتكرار عبر مناطق الذاكرة وتفريغ جميع المناطق الممكنة. وفي الوقت نفسه، يتم ملء تيار Memory64List

يحتوي البرنامج على وسيط اختياري لملف الإخراج، واسم الملف الافتراضي هو "proc_.dmp":

NativeDump.exe [DUMP_FILE]

poc

تم اختبار الأداة على أحدث إصدارات Windows مع الحلول الأمنية الأكثر شيوعًا (Microsoft Defender for Endpoints، CrowdStrike...) وتعمل بشكل جيد، لكن درجة التخفي ستعتمد على "النكهة" التي تختارها: استخدم لغات غير شائعة وخصص الثنائيات للحصول على أفضل النتائج! ومع ذلك، لا تعمل الأداة إذا كان PPL مفعّلاً أو إذا كانت بنية PEB غير قابلة للقراءة. تحديث: أصبح من الممكن الآن تنفيذ البرامج دون قراءة PEB، راجع فرع peb-unreadable :)

بعض فوائد هذه التقنية هي:

  • لا تستخدم الدالة المعروفة dbghelp!MinidumpWriteDump
  • تستخدم فقط دوال من Ntdll.dll، مما يتيح تجاوز ربط APIs عن طريق إعادة رسم خريطة المكتبة
  • لا يلزم كتابة ملف Minidump على القرص، بل يمكن نقل بايتاته (مشفرة أو موسّعة) إلى جهاز بعيد

يمكنك العثور على المشروع بـ "نكهات" (أو لغات) مختلفة:

  • main - تنفيذ .NET أساسي (هذا الفرع)

  • python-flavour - تنفيذ Python مع 3 طرق لاستبدال ntdll.dll + إرسال إلى جهاز بعيد

  • golang-flavour - تنفيذ Golang مع 3 طرق لاستبدال ntdll.dll + إرسال إلى جهاز بعيد

  • c-flavour - تنفيذ C/C++ مع 3 طرق لاستبدال ntdll.dll

  • bof-flavour - ملف BOF مع 3 طرق لاستبدال ntdll.dll

  • rust-flavour - تنفيذ Rust بواسطة @safedv

  • crystal-flavour - تنفيذ Crystal مع إمكانيات استبدال ntdll.dll

  • nim-flavour - تنفيذ Nim مع إمكانيات استبدال ntdll.dll

فروع أخرى مثيرة للاهتمام باستخدام .NET:

  • remote - إرسال إلى جهاز بعيد + 3 طرق لاستبدال ntdll.dll + حل ديناميكي للدوال + تشفير سلسلة AES + تشفير محتوى Minidump بـ XOR

  • all-modules - الحصول على معلومات جميع الوحدات (وليس فقط lsasrv.dll)

  • peb-unreadable - تنفيذ دون قراءة بنية PEB لعملية lsass + 3 طرق لاستبدال ntdll.dll



تفصيل التقنية: إنشاء ملف Minidump أدنى

بعد قراءة هياكل Minidump غير الموثقة، يمكن تلخيص هيكلها إلى:

  • الرأس: معلومات مثل التوقيع ("MDMP")، موقع دليل التدفقات وعدد التدفقات
  • دليل التدفقات: إدخال لكل تدفق، يحتوي على النوع والحجم الكلي والموقع في الملف لكل منها
  • التدفقات: يحتوي كل تدفق على معلومات مختلفة متعلقة بالعملية وله تنسيقه الخاص
  • المناطق: البايتات الفعلية من العملية من كل منطقة ذاكرة يمكن قراءتها

estructure

لقد قمت بإنشاء أداة تحليل قد تكون مفيدة: MinidumpParser. سنركز على إنشاء ملف صالح يحتوي فقط على القيم الضرورية للرأس ودليل التدفقات والتدفقات الثلاثة الوحيدة اللازمة لملف Minidump لكي يتم تحليله بواسطة Mimikatz/Pypykatz: تدفقات SystemInfo و ModuleList و Memory64List.


أ. الرأس

الرأس هو هيكل بحجم 32 بايت يمكن تعريفه في C# كالتالي:

public struct MinidumpHeader
{
    public uint Signature;
    public ushort Version;
    public ushort ImplementationVersion;
    public ushort NumberOfStreams;
    public uint StreamDirectoryRva;
    public uint CheckSum;
    public IntPtr TimeDateStamp;
}

القيم المطلوبة هي:

  • Signature: قيمة ثابتة 0x504d44d (السلسلة "MDMP")
  • Version: قيمة ثابتة 0xa793 (الثابت Microsoft MINIDUMP_VERSION)
  • NumberOfStreams: قيمة ثابتة 3، عدد التدفقات الثلاثة المطلوبة للملف
  • StreamDirectoryRVA: قيمة ثابتة 0x20 أو 32 بايت، حجم الرأس

ب. دليل التدفقات

كل إدخال في دليل التدفقات هو هيكل بحجم 12 بايت، لذا بوجود 3 إدخالات يكون الحجم 36 بايت. تعريف C# للإدخال هو:

public struct MinidumpStreamDirectoryEntry
{
    public uint StreamType;
    public uint Size;
    public uint Location;
}

يمثل الحقل "StreamType" نوع التدفق كعدد صحيح أو معرف، بعض الأنواع الأكثر أهمية هي:

المعرفنوع التدفق
0x00UnusedStream
0x01ReservedStream0
0x02ReservedStream1
0x03ThreadListStream
0x04ModuleListStream
0x05MemoryListStream
0x06ExceptionStream
0x07SystemInfoStream
0x08ThreadExListStream
0x09Memory64ListStream
0x0ACommentStreamA
0x0BCommentStreamW
0x0CHandleDataStream
0x0DFunctionTableStream
0x0EUnloadedModuleListStream
0x0FMiscInfoStream
0x10MemoryInfoListStream
0x11ThreadInfoListStream
0x12HandleOperationListStream
0x13TokenStream
0x16HandleOperationListStream

ج. تدفق معلومات النظام

التدفق الأول هو تدفق معلومات النظام (SystemInformation Stream) بالمعرف 7. حجمه 56 بايت وسيكون موجودًا عند الإزاحة 68 (0x44)، بعد دليل التدفقات. تعريفه في C# هو:

public struct SystemInformationStream
{
    public ushort ProcessorArchitecture;
    public ushort ProcessorLevel;
    public ushort ProcessorRevision;
    public byte NumberOfProcessors;
    public byte ProductType;
    public uint MajorVersion;
    public uint MinorVersion;
    public uint BuildNumber;
    public uint PlatformId;
    public uint UnknownField1;
    public uint UnknownField2;
    public IntPtr ProcessorFeatures;
    public IntPtr ProcessorFeatures2;
    public uint UnknownField3;
    public ushort UnknownField14;
    public byte UnknownField15;
}

القيم المطلوبة هي:

  • ProcessorArchitecture: 9 للأنظمة 64-bit، 0 للأنظمة 32-bit
  • الرقم الرئيسي والرقم الثانوي ورقم البناء: إما مدمجة بشكل ثابت أو يتم الحصول عليها عبر kernel32!GetVersionEx أو ntdll!RtlGetVersion (سنستخدم الأخير)

د. تدفق قائمة الوحدات

التدفق الثاني هو تدفق قائمة الوحدات (ModuleList Stream) بالمعرف 4. يقع عند الإزاحة 124 (0x7C) بعد تدفق معلومات النظام، وسيكون له حجم ثابت 112 بايت، حيث سيحتوي على إدخال وحدة واحدة فقط، وهي الوحيدة اللازمة ليكون التحليل صحيحًا: "lsasrv.dll".

الهيكل النموذجي لهذا التدفق هو قيمة 4 بايت تحتوي على عدد الإدخالات متبوعة بإدخالات بحجم 108 بايت لكل وحدة:

public struct ModuleListStream
{
    public uint NumberOfModules;
    public ModuleInfo[] Modules;
}

وبما أنه يوجد إدخال واحد فقط، يصبح الهيكل مبسطًا:

تنزيل الأداة