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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-62215-POC | Kitploit
أدوات/GitHubGitHub/gowonisgood/cve-2025-62215-poc
تحليل الثغرات الأمنيةالاستغلالCTFالتعلم والتعليماستغلال الملفات الثنائية
GitHubgowonisgood/cve-2025-62215-poc

CVE-2025-62215-POC

عرض المستودع
101منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2025-62215 — ثغرة UAF في توكن Windows (حالة سباق SepTokenSidSharingEnabled)

هذا المستودع مخصص للأغراض التعليمية والبحثية فقط.

نظرة عامة

إثبات مفهوم (PoC) لثغرة Use-After-Free تحدث في مسار التحسين SepTokenSidSharingEnabled في نواة Windows.

  • عندما يزيد NtDuplicateToken قيمة RefCount لكتلة قيم SID من 1 إلى 2، يقوم مؤشر ترابط نواة متنافس بتحرير الكتلة عبر ExFreePoolWithTag.
  • بعد ذلك، يصل SepDereferenceSidValuesBlock إلى الكتلة المحررة → UAF / تحرير مزدوج.
root@kitploit:~
[User]  IOCTL_REPLACE_SID_BLOCK  →  Place an independent block (RefCount=1) at TOKEN+0x468
[User]  IOCTL_TRIGGER_FREE       →  Spawn kernel thread (poll until RefCount==2)
[User]  NtDuplicateToken         →  Internally increments RefCount 1→2
[Kernel Thread] RefCount==2 detected → ExFreePoolWithTag(pBlock)  ← UAF point

هيكل الملفات

المسارالوصف
exploit/exploitWithDriv/exploitWithDriv.cppاستغلال بوضع المستخدم (تطبيق وحدة التحكم)
tokendriv/tokendrv/tokendrv/tokendrv.cppبرنامج تشغيل النواة (يوفر واجهة IOCTL)

تعليمات البناء (Visual Studio)

المتطلبات الأساسية

  • Visual Studio 2022 (MSVC)
  • Windows Driver Kit (WDK) — مطلوب لبناء tokendriv
  • SDK 10.0.26100.x أو أحدث

1. tokendriv.sys — برنامج تشغيل النواة

  1. افتح tokendriv/tokendrv/tokendrv.slnx
  2. الإعداد: Release / x64
  3. البناء → يولّد tokendriv/tokendrv/x64/Release/tokendrv.sys
  4. النشر المستقل: انسخ ملف .sys فقط إلى الجهاز الظاهري

بعد تثبيت WDK، تحقق من: خصائص المشروع → إعدادات برنامج التشغيل → إصدار نظام التشغيل الهدف

2. exploitWithDriv.exe — استغلال بوضع المستخدم

  1. افتح exploit/exploitWithDriv.slnx
  2. الإعداد: Release / x64
  3. خصائص المشروع → Linker → System → SubSystem: Console
  4. البناء → يولّد exploit/x64/Release/exploitWithDriv.exe
  5. للنشر المستقل (بدون الحاجة إلى Visual C++ Redistributable):
    • C/C++ → Code Generation → Runtime Library: Multi-threaded (/MT)

التشغيل على جهاز افتراضي

المتطلبات الأساسية

  • ذاكرة الجهاز الظاهري: 2 GB أو أقل (مطلوبة لتفعيل SepTokenSidSharingEnabled)
  • حساب الاختبار: test / 1234 (حساب محلي، لا يتطلب صلاحيات مسؤول)
  • اتصال تصحيح أخطاء النواة (اختياري، مطلوب للتحليل)
  • موجه أوامر بصلاحيات مسؤول

تحميل برنامج التشغيل

root@kitploit:~
sc create tokendriv type= kernel binpath= "C:\path\to\tokendrv.sys"
sc start tokendriv

تحقق من أن برنامج التشغيل يعمل:

root@kitploit:~
sc query tokendriv

يجب أن تكون الحالة RUNNING.

تشغيل الاستغلال

root@kitploit:~
exploitWithDriv.exe

تدفق التنفيذ:

  1. تحقق من FullNumberOfPhysicalPages (يجب أن يكون ≤ 0x83400)
  2. LogonUser("test", ".", "1234") → الحصول على hSource
  3. اضغط Enter لبدء حلقة السباق (100,000 تكرار)
  4. كل تكرار: REPLACE → TRIGGER → NtDuplicateToken → Sleep(1)

تحليل حالة السباق (WinDbg KD)

1. الحصول على عنوان العملية المستهدفة

root@kitploit:~
0: kd> !process 0 0 exploitWithDriv.exe

مثال على المخرجات:

root@kitploit:~
PROCESS ffffa88f5e61e080
    SessionId: 1  Cid: 1234    Peb: ...  ParentCid: ...
    Image: exploitWithDriv.exe

ffffa88f5e61e080 هو عنوان EPROCESS.

2. تعيين نقاط التوقف

قد تختلف العناوين أدناه حسب البيئة — تحقق منها مع رموز النواة الفعلية.

أ. زيادة RefCount لكتلة SID (بداية نافذة السباق)

root@kitploit:~
0: kd> bp fffff800`725c6114 ".if (@$proc == 0xffffa88f5e61e080) { .echo A_REFCNT_INCR; dq poi(@rsi+0x468)+8 L1; gc } .else { gc }"
  • يطبع RefCount (+0x8) لكتلة قيم SID عند TOKEN+0x468
  • اللحظة التي تتغير فيها القيمة من 1 → 2 هي نافذة السباق

ب. نقطة قراءة UAF

root@kitploit:~
0: kd> bp fffff800`726f51fb ".if (@$proc == 0xffffa88f5e61e080) { .echo REAL_UAF_READ; r rax,rdx; gc } .else { gc }"
  • النقطة التي تُقرأ فيها الكتلة المحررة
  • تحقق من قيم rax وrdx

ج. نقطة كتابة UAF

root@kitploit:~
0: kd> bp fffff800`726f5208 ".if (@$proc == 0xffffa88f5e61e080) { .echo REAL_UAF_WRITE; r rcx,rdx,rax; gc } .else { gc }"
  • النقطة التي تُكتب فيها الكتلة المحررة
  • تحقق من rcx وrdx وrax بحثًا عن التلف

3. تدفق توقيت السباق

root@kitploit:~
NtDuplicateToken entry
    └─ SeTokenCanImpersonate
        └─ SID Block RefCount: 1 → 2        ← bp A (A_REFCNT_INCR)
                                              ← kernel thread: ExFreePoolWithTag(pBlock)
    └─ SepDereferenceSidValuesBlock
        └─ dereference pBlock (read)         ← bp B (REAL_UAF_READ)
        └─ dereference pBlock (write)        ← bp C (REAL_UAF_WRITE)

4. نصائح التحليل

  • إذا كانت قيمة RefCount هي 2 مباشرة بعد طباعة A_REFCNT_INCR، فهذا يعني أن نافذة السباق تم الدخول إليها بنجاح
  • إذا ظهر REAL_UAF_READ / REAL_UAF_WRITE، فهذا يؤكد حدوث UAF فعلي
  • تتبع الكتل المخصصة بوسم التجمع 'kcoB': !pool <addr> أو !poolused

الإزاحات الرئيسية (Windows 11 24H2)


إزالة برنامج التشغيل

root@kitploit:~
sc stop tokendriv
sc delete tokendriv


CVE-2025-62215 — Windows Token UAF (SepTokenSidSharingEnabled 레이스 컨디션)

개요

Windows 커널의 SepTokenSidSharingEnabled 최적화 경로에서 발생하는 Use-After-Free 취약점 PoC.

  • NtDuplicateToken 내부에서 SID Values Block의 RefCount가 1→2로 증가하는 순간, 레이스를 걸어 커널 스레드가 해당 블록을 ExFreePoolWithTag로 해제한다.
  • 이후 SepDereferenceSidValuesBlock이 해제된 블록에 다시 접근 → UAF / Double Free.
root@kitploit:~
[User]  IOCTL_REPLACE_SID_BLOCK  →  TOKEN+0x468 에 RefCount=1 독립 블록 배치
[User]  IOCTL_TRIGGER_FREE       →  커널 스레드 시작 (RefCount==2 폴링 대기)
[User]  NtDuplicateToken         →  내부에서 RefCount 1→2
[Kernel Thread] RefCount==2 감지 → ExFreePoolWithTag(pBlock)  ← UAF 지점

구성 파일

경로설명
exploit/exploitWithDriv/exploitWithDriv.cpp유저모드 익스플로잇 (콘솔 앱)
tokendriv/tokendrv/tokendrv/tokendrv.cpp커널 드라이버 (IOCTL 인터페이스 제공)

빌드 방법 (Visual Studio)

공통 사전 조건

  • Visual Studio 2022 (MSVC)
  • Windows Driver Kit (WDK) — tokendriv 빌드 시 필요
  • SDK 10.0.26100.x 이상

1. tokendriv.sys — 커널 드라이버

  1. tokendriv/tokendrv/tokendrv.slnx 열기
  2. 구성: Release / x64
  3. 빌드 → tokendriv/tokendrv/x64/Release/tokendrv.sys 생성
  4. 독립 실행 배포: .sys 파일 하나만 VM으로 복사하면 됨

WDK 설치 후 프로젝트 속성 → Driver Settings → Target OS Version 확인

2. exploitWithDriv.exe — 유저모드 익스플로잇

  1. exploit/exploitWithDriv.slnx 열기
  2. 구성: Release / x64
  3. 프로젝트 속성 → Linker → System → SubSystem: Console
  4. 빌드 → exploit/x64/Release/exploitWithDriv.exe 생성
  5. 독립 실행 배포: Visual C++ Redistributable 없이 동작하도록
    • C/C++ → Code Generation → Runtime Library: Multi-threaded (/MT) 으로 설정

VM 실행 방법

사전 조건

  • VM RAM: 2 GB 이하 (SepTokenSidSharingEnabled 활성화 조건)
  • 테스트 계정: test / 1234 (로컬 계정, 관리자 권한 불필요)
  • Kernel Debugging 연결 (선택, 분석 시 필요)
  • 관리자 권한 cmd

드라이버 로드

root@kitploit:~
sc create tokendriv type= kernel binpath= "C:\path\to\tokendrv.sys"
sc start tokendriv

드라이버 로드 확인:

root@kitploit:~
sc query tokendriv

RUNNING 상태이면 정상.

익스플로잇 실행

root@kitploit:~
exploitWithDriv.exe

실행 흐름:

  1. FullNumberOfPhysicalPages 체크 (0x83400 이하여야 진행)
  2. LogonUser("test", ".", "1234") → hSource 획득
  3. Enter 입력 시 레이스 루프 100,000회 시작
  4. 각 이터레이션: REPLACE → TRIGGER → NtDuplicateToken → Sleep(1)

Race Condition 분석 (WinDbg KD)

1. 분석 대상 프로세스 주소 확인

root@kitploit:~
0: kd> !process 0 0 exploitWithDriv.exe

출력 예시:

root@kitploit:~
PROCESS ffffa88f5e61e080
    SessionId: 1  Cid: 1234    Peb: ...  ParentCid: ...
    Image: exploitWithDriv.exe

ffffa88f5e61e080 부분이 EPROCESS 주소.

2. 브레이크포인트 설정

아래 주소는 환경마다 다를 수 있으므로 실제 커널 심볼로 확인 후 사용.

A. SID Block RefCount 증가 지점 (레이스 윈도우 시작)

root@kitploit:~
0: kd> bp fffff800`725c6114 ".if (@$proc == 0xffffa88f5e61e080) { .echo A_REFCNT_INCR; dq poi(@rsi+0x468)+8 L1; gc } .else { gc }"
  • TOKEN+0x468 에 있는 SID Values Block의 RefCount(+0x8)를 출력
  • 값이 1 → 2로 바뀌는 순간이 레이스 윈도우

B. UAF Read 지점

root@kitploit:~
0: kd> bp fffff800`726f51fb ".if (@$proc == 0xffffa88f5e61e080) { .echo REAL_UAF_READ; r rax,rdx; gc } .else { gc }"
  • 해제된 블록을 읽는 지점
  • rax, rdx 값 확인

C. UAF Write 지점

root@kitploit:~
0: kd> bp fffff800`726f5208 ".if (@$proc == 0xffffa88f5e61e080) { .echo REAL_UAF_WRITE; r rcx,rdx,rax; gc } .else { gc }"
  • 해제된 블록에 쓰는 지점
  • rcx, rdx, rax 값으로 오염 여부 확인

3. 레이스 타이밍 흐름

root@kitploit:~
NtDuplicateToken 진입
    └─ SeTokenCanImpersonate
        └─ SID Block RefCount: 1 → 2        ← bp A (A_REFCNT_INCR)
                                              ← 커널 스레드: ExFreePoolWithTag(pBlock)
    └─ SepDereferenceSidValuesBlock
        └─ pBlock 역참조 (읽기)              ← bp B (REAL_UAF_READ)
        └─ pBlock 역참조 (쓰기)              ← bp C (REAL_UAF_WRITE)

4. 분석 팁

  • A_REFCNT_INCR 출력 직후 RefCount가 2이면 레이스 윈도우 진입 성공
  • REAL_UAF_READ / REAL_UAF_WRITE 이 출력되면 실제 UAF 발생 확인
  • Pool tag 'kcoB' 로 할당된 블록 추적: !pool <addr> 또는 !poolused

주요 오프셋 (Windows 11 24H2 기준)


드라이버 제거

root@kitploit:~
sc stop tokendriv
sc delete tokendriv
تنزيل الأداة
الهيكلالإزاحةالحقل
_TOKEN+0x468SepSidValues (مؤشر كتلة قيم SID)
كتلة قيم SID+0x000Length (ULONG)
كتلة قيم SID+0x008ReferenceCount (LONGLONG)
구조체오프셋필드
_TOKEN+0x468SepSidValues (SID Values Block 포인터)
SID Values Block+0x000Length (ULONG)
SID Values Block+0x008ReferenceCount (LONGLONG)