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

المختبر 11.3: مسابقة CTF مصغرة شاملة

مقدمة​

مرحبًا بكم في مسابقة CTF المصغرة الشاملة لدورة أنظمة التشغيل!

هذا التحدي يدمج المهارات المكتسبة طوال الجلسة:

  • إعداد النظام
  • تحليل العمليات والذاكرة
  • أمان Windows
  • PowerShell والبرمجة النصية
  • الاتصال بين العمليات
  • كشف التهديدات

التنسيق​

  • النوع: Capture The Flag (CTF)
  • المدة: 90 دقيقة
  • النقاط: 100 نقطة إجمالاً
  • الأعلام: التنسيق FLAG{texte_du_flag}

القواعد​

  1. عمل فردي - لا تعاون أثناء CTF
  2. الموارد المسموح بها:
    • ملاحظات الدورة
    • توثيق Microsoft
    • أدوات Sysinternals
  3. الموارد المحظورة:
    • التواصل مع طلاب آخرين
    • الحلول عبر الإنترنت
  4. التقديم: انسخ الأعلام في وثيقة الإجابة

البيئة​

لديك جهاز افتراضي Windows مُعد مسبقًا مع:

  • أدوات Sysinternals مثبتة
  • PowerShell متاح
  • أدلة مخفية في النظام

تأكد من وجود لقطة قبل البدء!


التحديات​

التحدي 1: استكشاف النظام (15 نقطة)​

الهدف: العثور على معلومات مخفية في إعدادات النظام.

التعليمات:

  1. علم مخفي في متغيرات البيئة للمستخدم
  2. ابحث عن المتغير الذي يحتوي على العلم

تلميح: يبدأ اسم المتغير بـ "SECRET_"

إعداد للمدرس (يجب القيام به قبل CTF):

# إضافة متغير البيئة
[Environment]::SetEnvironmentVariable("SECRET_CTF", "FLAG{env_vars_reveal_secrets}", "User")

الحل المتوقع: FLAG{env_vars_reveal_secrets}


التحدي 2: سجل Windows (15 نقطة)​

الهدف: استكشاف السجل للعثور على علم مخفي.

التعليمات:

  1. علم مخفي في مفتاح سجل
  2. ابحث في HKCU:\Software\

تلميح: يسمى المفتاح "CoursSE"

الإعداد:

# إنشاء مفتاح السجل
New-Item -Path "HKCU:\Software\CoursSE" -Force
Set-ItemProperty -Path "HKCU:\Software\CoursSE" -Name "Flag" -Value "FLAG{registry_hunter_pro}"

أمر مفيد:

Get-ItemProperty -Path "HKCU:\Software\CoursSE"

التحدي 3: الملفات المخفية (15 نقطة)​

الهدف: العثور على ملف مخفي في النظام.

التعليمات:

  1. ملف مخفي يحتوي على العلم
  2. يوجد في مجلد المستندات للمستخدم
  3. يستخدم الملف تدفق بيانات بديل (ADS)

الإعداد:

# إنشاء الملف مع ADS
$path = [Environment]::GetFolderPath("MyDocuments")
Set-Content "$path\readme.txt" -Value "Ceci est un fichier normal."
Set-Content "$path\readme.txt:secret" -Value "FLAG{ads_are_sneaky}" -Stream "secret"

أمر مفيد:

Get-Item "$path\readme.txt" -Stream *
Get-Content "$path\readme.txt" -Stream secret

التحدي 4: خدمة مشبوهة (20 نقطة)​

الهدف: تحديد خدمة مشبوهة والعثور على علمها.

التعليمات:

  1. تم إنشاء خدمة بوصف يحتوي على علم
  2. الخدمة غير مفعلة
  3. ابحث عنها بين الخدمات المثبتة

الإعداد:

# إنشاء خدمة وهمية (يتطلب صلاحيات المسؤول)
New-Service -Name "SvcCTF" -BinaryPathName "C:\Windows\System32\cmd.exe" `
-DisplayName "Windows CTF Helper" `
-Description "FLAG{service_enumeration_master}" `
-StartupType Manual

أوامر مفيدة:

Get-Service | Where-Object { $_.DisplayName -like "*CTF*" }
Get-WmiObject Win32_Service | Where-Object { $_.Description -like "*FLAG*" }

التحدي 5: العمليات والذاكرة (20 نقطة)​

الهدف: تحليل عملية للعثور على علم.

التعليمات:

  1. يعمل سكربت PowerShell في الخلفية
  2. يحتوي على العلم في وسائط سطر الأوامر
  3. استخدم أدوات التحليل للعثور عليه

الإعداد:

# تشغيل عملية مع العلم كوسيط
Start-Process powershell -ArgumentList "-NoExit -Command `"Write-Host 'Background process'; while(`$true){Start-Sleep 60}`"" -WindowStyle Hidden
# العلم الحقيقي سيكون في الوسائط
Start-Process powershell -ArgumentList "-NoExit -Command `"`$flag='FLAG{process_forensics_win}'; while(`$true){Start-Sleep 60}`"" -WindowStyle Hidden

أوامر مفيدة:

Get-WmiObject Win32_Process | Select-Object Name, ProcessId, CommandLine
Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like "*FLAG*" }

التحدي 6: الشبكة والاتصالات (15 نقطة)​

الهدف: تحليل الاتصالات الشبكية للعثور على دليل.

التعليمات:

  1. يستمع خادم على منفذ غير معتاد
  2. اتصل بالخادم للحصول على العلم
  3. المنفذ بين 8000 و9000

الإعداد:

# سكربت الخادم لتشغيله قبل CTF
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, 8888)
$listener.Start()
Write-Host "Serveur CTF en ecoute sur port 8888"
while ($true) {
$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$writer = [System.IO.StreamWriter]::new($stream)
$writer.WriteLine("FLAG{network_detective}")
$writer.Flush()
$client.Close()
}

أوامر مفيدة:

# العثور على المنافذ المستمعة
Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -gt 8000 -and $_.LocalPort -lt 9000 }

# الاتصال
$client = New-Object System.Net.Sockets.TcpClient("127.0.0.1", 8888)
$reader = New-Object System.IO.StreamReader($client.GetStream())
$reader.ReadLine()

تحدي إضافي (10 نقاط)​

التحدي 7: مهمة مجدولة​

الهدف: العثور على علم مخفي في مهمة مجدولة.

الإعداد:

# إنشاء مهمة مجدولة مع العلم
$action = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c echo FLAG{scheduled_task_investigator}"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddYears(1)
Register-ScheduledTask -TaskName "CTF_Task" -Action $action -Trigger $trigger -Description "Hidden CTF challenge"

أمر مفيد:

Get-ScheduledTask | Where-Object { $_.TaskName -like "*CTF*" }
(Get-ScheduledTask -TaskName "CTF_Task").Actions

ورقة الإجابة​

الاسم: ______________________
التاريخ: ______________________

التحدي 1 (15 نقطة): FLAG{_____________________}
التحدي 2 (15 نقطة): FLAG{_____________________}
التحدي 3 (15 نقطة): FLAG{_____________________}
التحدي 4 (20 نقطة): FLAG{_____________________}
التحدي 5 (20 نقطة): FLAG{_____________________}
التحدي 6 (15 نقطة): FLAG{_____________________}
الإضافي (10 نقاط): FLAG{_____________________}

المجموع: _____ / 110 نقطة

معايير التقييم​

التحديالنقاطالصعوبة
1. متغيرات البيئة15سهل
2. السجل15سهل
3. ADS15متوسط
4. الخدمات20متوسط
5. العمليات20صعب
6. الشبكة15متوسط
7. إضافي10صعب

دليل للمدرس​

إعداد الجهاز الافتراضي​

# سكربت الإعداد الكامل لـ CTF
# يجب تشغيله كمسؤول قبل البدء

Write-Host "إعداد مسابقة CTF المصغرة..." -ForegroundColor Cyan

# التحدي 1 - متغير البيئة
[Environment]::SetEnvironmentVariable("SECRET_CTF", "FLAG{env_vars_reveal_secrets}", "User")

# التحدي 2 - السجل
New-Item -Path "HKCU:\Software\CoursSE" -Force | Out-Null
Set-ItemProperty -Path "HKCU:\Software\CoursSE" -Name "Flag" -Value "FLAG{registry_hunter_pro}"

# التحدي 3 - ADS
$docPath = [Environment]::GetFolderPath("MyDocuments")
Set-Content "$docPath\readme.txt" -Value "Ceci est un fichier normal de documentation."
Set-Content "$docPath\readme.txt:secret" -Value "FLAG{ads_are_sneaky}" -Stream "secret"

# التحدي 4 - الخدمة (يتطلب صلاحيات المسؤول)
if ((New-Service -Name "SvcCTF" -BinaryPathName "C:\Windows\System32\cmd.exe" `
-DisplayName "Windows CTF Helper" `
-Description "FLAG{service_enumeration_master}" `
-StartupType Manual -ErrorAction SilentlyContinue)) {
Write-Host "تم إنشاء الخدمة" -ForegroundColor Green
}

# التحدي 5 - العمليات
Start-Process powershell -ArgumentList "-WindowStyle Hidden -NoExit -Command `"`$flag='FLAG{process_forensics_win}'; while(`$true){Start-Sleep 60}`""

# التحدي 7 - المهمة المجدولة
$action = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c echo FLAG{scheduled_task_investigator}"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddYears(1)
Register-ScheduledTask -TaskName "CTF_Task" -Action $action -Trigger $trigger -Description "Hidden CTF" -Force | Out-Null

Write-Host "تم الانتهاء من الإعداد!" -ForegroundColor Green
Write-Host "لا تنسَ تشغيل الخادم الشبكي (التحدي 6) بشكل منفصل."

تشغيل الخادم الشبكي (التحدي 6)​

# يجب تشغيله في نافذة منفصلة
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, 8888)
$listener.Start()
Write-Host "الخادم CTF يستمع على المنفذ 8888..."
while ($true) {
$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$writer = [System.IO.StreamWriter]::new($stream)
$writer.WriteLine("FLAG{network_detective}")
$writer.Flush()
$client.Close()
Write-Host "تم خدمة العميل."
}

التنظيف بعد CTF​

# سكربت التنظيف
[Environment]::SetEnvironmentVariable("SECRET_CTF", $null, "User")
Remove-Item "HKCU:\Software\CoursSE" -Recurse -Force -ErrorAction SilentlyContinue
$docPath = [Environment]::GetFolderPath("MyDocuments")
Remove-Item "$docPath\readme.txt" -Force -ErrorAction SilentlyContinue
Stop-Service "SvcCTF" -ErrorAction SilentlyContinue
sc.exe delete "SvcCTF"
Get-Process powershell | Where-Object { $_.CommandLine -like "*flag=*" } | Stop-Process -Force
Unregister-ScheduledTask -TaskName "CTF_Task" -Confirm:$false -ErrorAction SilentlyContinue
Write-Host "تم الانتهاء من التنظيف." -ForegroundColor Green

الخاتمة​

تختبر هذه المسابقة المصغرة CTF إتقانك للمفاهيم الأساسية:

  • استكشاف نظام Windows
  • استخدام PowerShell
  • تحليل جنائي بسيط
  • الأمان والكشف

حظًا موفقًا! 🎯


تم تطوير مسابقة CTF المصغرة كجزء من دورة أنظمة التشغيل - الوحدة 11