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
- Travail individuel - Pas de collaboration pendant le CTF
- Ressources autorisees:
- Notes de cours
- Documentation Microsoft
- Outils Sysinternals
- Ressources interdites:
- Communication avec d'autres etudiants
- Solutions en ligne
- 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:
- Un flag est cache dans les variables d'environnement utilisateur
- 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:
- Un flag est cache dans une cle de registre
- 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:
- Un fichier cache contient le flag
- Il se trouve dans le dossier Documents de l'utilisateur
- 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:
- Un service a ete cree avec une description contenant un flag
- Le service n'est pas demarre
- 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:
- Un script PowerShell tourne en arriere-plan
- Il contient le flag dans ses arguments de ligne de commande
- 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:
- Un serveur ecoute sur un port inhabituel
- Connectez-vous au serveur pour obtenir le flag
- 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
| Challenge | Points | Difficulte |
|---|---|---|
| 1. Variables env | 15 | Facile |
| 2. Registre | 15 | Facile |
| 3. ADS | 15 | Moyen |
| 4. Services | 20 | Moyen |
| 5. Processus | 20 | Difficile |
| 6. Reseau | 15 | Moyen |
| 7. Bonus | 10 | Difficile |
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