Aller au contenu principal

Lab 11.3: Mini-CTF de Synthese

Introduction​

Bienvenue dans le Mini-CTF de synthese du cours Systemes d'Exploitation!

Ce challenge integre les competences acquises tout au long de la session:

  • Configuration systeme
  • Analyse de processus et memoire
  • Securite Windows
  • PowerShell et scripting
  • Communication inter-processus
  • Detection de menaces

Format​

  • Type: Capture The Flag (CTF)
  • Duree: 90 minutes
  • Points: 100 points total
  • Flags: Format FLAG{texte_du_flag}

Regles​

  1. Travail individuel - Pas de collaboration pendant le CTF
  2. Ressources autorisees:
    • Notes de cours
    • Documentation Microsoft
    • Outils Sysinternals
  3. Ressources interdites:
    • Communication avec d'autres etudiants
    • Solutions en ligne
  4. Soumission: Copiez les flags dans le document de reponse

Environnement​

Vous disposez d'une VM Windows preparee avec:

  • Outils Sysinternals installes
  • PowerShell disponible
  • Indices caches dans le systeme

Assurez-vous d'avoir un snapshot avant de commencer!


Challenges​

Challenge 1: Reconnaissance Systeme (15 points)​

Objectif: Trouver des informations cachees dans la configuration systeme.

Instructions:

  1. Un flag est cache dans les variables d'environnement utilisateur
  2. Trouvez la variable qui contient le flag

Indice: Le nom de la variable commence par "SECRET_"

Configuration pour le professeur (a faire avant le CTF):

# Ajouter la variable d'environnement
[Environment]::SetEnvironmentVariable("SECRET_CTF", "FLAG{env_vars_reveal_secrets}", "User")

Solution attendue: FLAG{env_vars_reveal_secrets}


Challenge 2: Registre Windows (15 points)​

Objectif: Explorer le registre pour trouver un flag cache.

Instructions:

  1. Un flag est cache dans une cle de registre
  2. Cherchez dans HKCU:\Software\

Indice: La cle s'appelle "CoursSE"

Configuration:

# Creer la cle de registre
New-Item -Path "HKCU:\Software\CoursSE" -Force
Set-ItemProperty -Path "HKCU:\Software\CoursSE" -Name "Flag" -Value "FLAG{registry_hunter_pro}"

Commande utile:

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

Challenge 3: Fichiers Caches (15 points)​

Objectif: Trouver un fichier cache dans le systeme.

Instructions:

  1. Un fichier cache contient le flag
  2. Il se trouve dans le dossier Documents de l'utilisateur
  3. Le fichier utilise un Alternate Data Stream (ADS)

Configuration:

# Creer le fichier avec 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"

Commande utile:

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

Challenge 4: Service Suspect (20 points)​

Objectif: Identifier un service suspect et trouver son flag.

Instructions:

  1. Un service a ete cree avec une description contenant un flag
  2. Le service n'est pas demarre
  3. Trouvez-le parmi les services installes

Configuration:

# Creer un faux service (necessite admin)
New-Service -Name "SvcCTF" -BinaryPathName "C:\Windows\System32\cmd.exe" `
-DisplayName "Windows CTF Helper" `
-Description "FLAG{service_enumeration_master}" `
-StartupType Manual

Commandes utiles:

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

Challenge 5: Processus et Memoire (20 points)​

Objectif: Analyser un processus pour trouver un flag.

Instructions:

  1. Un script PowerShell tourne en arriere-plan
  2. Il contient le flag dans ses arguments de ligne de commande
  3. Utilisez les outils d'analyse pour le trouver

Configuration:

# Lancer un processus avec le flag en argument
Start-Process powershell -ArgumentList "-NoExit -Command `"Write-Host 'Background process'; while(`$true){Start-Sleep 60}`"" -WindowStyle Hidden
# Le vrai flag serait dans les arguments
Start-Process powershell -ArgumentList "-NoExit -Command `"`$flag='FLAG{process_forensics_win}'; while(`$true){Start-Sleep 60}`"" -WindowStyle Hidden

Commandes utiles:

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

Challenge 6: Reseau et Connexions (15 points)​

Objectif: Analyser les connexions reseau pour trouver un indice.

Instructions:

  1. Un serveur ecoute sur un port inhabituel
  2. Connectez-vous au serveur pour obtenir le flag
  3. Le port est entre 8000 et 9000

Configuration:

# Script serveur a lancer avant le 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()
}

Commandes utiles:

# Trouver les ports en ecoute
Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -gt 8000 -and $_.LocalPort -lt 9000 }

# Se connecter
$client = New-Object System.Net.Sockets.TcpClient("127.0.0.1", 8888)
$reader = New-Object System.IO.StreamReader($client.GetStream())
$reader.ReadLine()

Bonus Challenge (10 points)​

Challenge 7: Tache Planifiee​

Objectif: Trouver un flag cache dans une tache planifiee.

Configuration:

# Creer une tache planifiee avec le flag
$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"

Commande utile:

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

Feuille de Reponse​

Nom: ______________________
Date: ______________________

Challenge 1 (15 pts): FLAG{_____________________}
Challenge 2 (15 pts): FLAG{_____________________}
Challenge 3 (15 pts): FLAG{_____________________}
Challenge 4 (20 pts): FLAG{_____________________}
Challenge 5 (20 pts): FLAG{_____________________}
Challenge 6 (15 pts): FLAG{_____________________}
Bonus (10 pts): FLAG{_____________________}

Total: _____ / 110 points

Criteres d'Evaluation​

ChallengePointsDifficulte
1. Variables env15Facile
2. Registre15Facile
3. ADS15Moyen
4. Services20Moyen
5. Processus20Difficile
6. Reseau15Moyen
7. Bonus10Difficile

Guide pour le Professeur​

Preparation de la VM​

# Script de configuration complete du CTF
# A executer en administrateur avant le debut

Write-Host "Configuration du Mini-CTF..." -ForegroundColor Cyan

# Challenge 1 - Variable d'environnement
[Environment]::SetEnvironmentVariable("SECRET_CTF", "FLAG{env_vars_reveal_secrets}", "User")

# Challenge 2 - Registre
New-Item -Path "HKCU:\Software\CoursSE" -Force | Out-Null
Set-ItemProperty -Path "HKCU:\Software\CoursSE" -Name "Flag" -Value "FLAG{registry_hunter_pro}"

# Challenge 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"

# Challenge 4 - Service (necessite admin)
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 "Service cree" -ForegroundColor Green
}

# Challenge 5 - Processus
Start-Process powershell -ArgumentList "-WindowStyle Hidden -NoExit -Command `"`$flag='FLAG{process_forensics_win}'; while(`$true){Start-Sleep 60}`""

# Challenge 7 - Tache planifiee
$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 "Configuration terminee!" -ForegroundColor Green
Write-Host "N'oubliez pas de lancer le serveur reseau (Challenge 6) separement."

Lancement du serveur reseau (Challenge 6)​

# A executer dans une fenetre separee
$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()
Write-Host "Client servi."
}

Nettoyage apres le CTF​

# Script de nettoyage
[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 "Nettoyage termine." -ForegroundColor Green

Conclusion​

Ce Mini-CTF teste votre maitrise des concepts fondamentaux:

  • Exploration du systeme Windows
  • Utilisation de PowerShell
  • Analyse forensique basique
  • Securite et detection

Bonne chance! 🎯


Mini-CTF developpe dans le cadre du cours Systemes d'Exploitation - MODULE 11