Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2024-30088 | Kitploit
أدوات/GitHubGitHub/tykawaii98/cve-2024-30088
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاستغلال الملفات الثنائية
GitHubtykawaii98/cve-2024-30088

CVE-2024-30088

عرض المستودع
29061منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2024-30088

الثغرة:

  • الثغرة داخل الدالة AuthzBasepCopyoutInternalSecurityAttributes عندما تنسخ النواة _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION لكائن الرمز (token) الحالي إلى وضع المستخدم، والتي يكون بنيتها كالتالي:
root@kitploit:~
//0x30 bytes (sizeof)
struct _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION
{
    ULONG SecurityAttributeCount;                                           //0x0
    struct _LIST_ENTRY SecurityAttributesList;                              //0x8
    ULONG WorkingSecurityAttributeCount;                                    //0x18
    struct _LIST_ENTRY WorkingSecurityAttributesList;                       //0x20
}; 
  • عند تنفيذ نسخ SecurityAttributesList، تقوم النواة بإعداد قائمة بنية SecurityAttribute *مباشرة* إلى المؤشر المقدَّم من المستخدم. بعد ذلك، تستدعي الدالتين RtlCopyUnicodeString و AuthzBasepCopyoutInternalSecurityAttributeValues لنسخ اسم وقيمة بنية SecurityAttribute، مما يؤدي إلى عدة حالات TOCTOU في هذه الدالة.

  • باستخدام خيط سباق (racing thread) بسيط لتعديل مؤشر Buffer لاسم السمة قبل استدعاء RtlCopyUnicodeString [*]، يمكنني بسهولة تحقيق كتابة في عنوان عشوائي بقيمة ثابتة وحجم مُتحكم به.

  • لاحظ أن هناك أيضًا بعض الطرق الأخرى لاستغلالها، لكن في حالتي اخترت استخدام RtlCopyUnicodeString.

تشغيل الثغرة:

  • يمكن تشغيل هذه الثغرة بسهولة عن طريق استدعاء NtQueryInformationToken مع فئة TokenAccesInformation.

التصحيحات:

  • يستخدم التصحيح متغيرًا محليًا على مكدس النواة (v18 في كتلة الكود أدناه) كمخزن مؤقت لنسخ اسم/أسماء سمة الأمان قبل الكتابة مرة أخرى إلى مخزن المستخدم إذا كانت استدعاءات النظام من وضع المستخدم.
root@kitploit:~
    [...]
        p_SecurityAttributesList = &a1->SecurityAttributesList;
        Flink = a1->SecurityAttributesList.Flink;
        if ( Flink == p_SecurityAttributesList )
          return (unsigned int)inserted;
        v13 = a2 + 0x98;
        while ( 1 )
        {
          if ( (unsigned int)Feature_2516935995__private_IsEnabledDeviceUsage() )
          {
            inserted = AuthzBasepProbeAndInsertTailList(a2 + 8, v13 - 0x68);
            if ( inserted < 0 )
              goto LABEL_24;
          }
          else
          {
            [...]
          }
          ++*(_DWORD *)a2;
          *(_WORD *)(v13 - 56) = Flink[3].Flink;
          *(_DWORD *)(v13 - 52) = HIDWORD(Flink[3].Flink);
          *(_QWORD *)(v13 - 24) = v13 - 32;
          *(_QWORD *)(v13 - 32) = v13 - 32;
          *(_QWORD *)v13 = v13 - 8;
          *(_QWORD *)(v13 - 8) = v13 - 8;
          *(_QWORD *)(v13 - 48) = 0i64;
          *(_DWORD *)(v13 - 40) = 0;
          *(_DWORD *)(v13 - 16) = 0;
          Flink_low = LOWORD(Flink[2].Flink);
          v19 = Flink_low;
          v17 = (wchar_t *)((v10 + 1) & 0xFFFFFFFFFFFFFFFEui64);
          v15 = (unsigned __int64)v17 + Flink_low;
          if ( (unsigned __int64)v17 + Flink_low > v6 )
            break;
          if ( (unsigned int)Feature_3391791421__private_IsEnabledDeviceUsage() )
          {
            *(_QWORD *)&v18.Length = 0i64;
            v18.MaximumLength = Flink_low;
            v18.Buffer = v17;
            RtlCopyUnicodeString(&v18.Length, (unsigned __int16 *)&Flink[2]);
            *(_UNICODE_STRING *)(v13 - 0x48) = v18;
          }
          else
          {
            [...]
          }
          inserted = AuthzBasepCopyoutInternalSecurityAttributeValues(
                       (__int64)Flink,
                       v13 - 104,
                       v15,
                       (int)v6 - (int)v15,
                       &v19);
    [...]
  • في جلسة التصحيح، يمكننا رؤية أن rcx هو عنوان النواة بعد التصحيح:
root@kitploit:~
5: kd> 
nt!AuthzBasepCopyoutInternalSecurityAttributes+0x1aa:
fffff803`5dbcf14a e8810fa5ff      call    nt!RtlCopyUnicodeString (fffff803`5d6200d0)
5: kd> r
rax=0000025a81d006a0 rbx=0000025a81d00590 rcx=ffffe20697c4f778
rdx=ffffa609c7a101a0 rsi=0000025a81d00598 rdi=0000025a81d00628
rip=fffff8035dbcf14a rsp=ffffe20697c4f740 rbp=0000025a81d006c0
 r8=0000000000000003  r9=0000025a81d00590 r10=ffffa609c816ef78
r11=ffffe20697c4f7d0 r12=0000000000000a70 r13=ffffa609ca9b1118
r14=ffffa609c7a10180 r15=0000025a81d01000
iopl=0         nv up ei pl nz na pe nc
cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00040202
nt!AuthzBasepCopyoutInternalSecurityAttributes+0x1aa:
fffff803`5dbcf14a e8810fa5ff      call    nt!RtlCopyUnicodeString (fffff803`5d6200d0)

POC:

  • https://youtu.be/y5LnlHjzA64
تنزيل الأداة