Pular para o conteúdo principal

Lab 11.3: Mini-CTF de Síntese

Introdução​

Bem-vindo ao Mini-CTF de síntese do curso de Sistemas Operacionais!

Este desafio integra as competências adquiridas ao longo do semestre:

  • Configuração de sistema
  • Análise de processos e memória
  • Segurança no Windows
  • PowerShell e scripting
  • Comunicação entre processos
  • Detecção de ameaças

Formato​

  • Tipo: Capture The Flag (CTF)
  • Duração: 90 minutos
  • Pontos: 100 pontos no total
  • Flags: Formato FLAG{texto_do_flag}

Regras​

  1. Trabalho individual - Não é permitida colaboração durante o CTF
  2. Recursos permitidos:
    • Anotações do curso
    • Documentação da Microsoft
    • Ferramentas Sysinternals
  3. Recursos proibidos:
    • Comunicação com outros estudantes
    • Soluções online
  4. Submissão: Copie os flags no documento de resposta

Ambiente​

Você dispõe de uma VM Windows preparada com:

  • Ferramentas Sysinternals instaladas
  • PowerShell disponível
  • Dicas escondidas no sistema

Certifique-se de criar um snapshot antes de começar!


Desafios​

Desafio 1: Reconhecimento do Sistema (15 pontos)​

Objetivo: Encontrar informações escondidas na configuração do sistema.

Instruções:

  1. Um flag está escondido nas variáveis de ambiente do usuário
  2. Encontre a variável que contém o flag

Dica: O nome da variável começa com "SECRET_"

Configuração para o professor (a ser feita antes do CTF):

# Adicionar a variável de ambiente
[Environment]::SetEnvironmentVariable("SECRET_CTF", "FLAG{env_vars_reveal_secrets}", "User")

Solução esperada: FLAG{env_vars_reveal_secrets}


Desafio 2: Registro do Windows (15 pontos)​

Objetivo: Explorar o registro para encontrar um flag escondido.

Instruções:

  1. Um flag está escondido em uma chave do registro
  2. Procure em HKCU:\Software\

Dica: A chave se chama "CoursSE"

Configuração:

# Criar a chave do registro
New-Item -Path "HKCU:\Software\CoursSE" -Force
Set-ItemProperty -Path "HKCU:\Software\CoursSE" -Name "Flag" -Value "FLAG{registry_hunter_pro}"

Comando útil:

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

Desafio 3: Arquivos Ocultos (15 pontos)​

Objetivo: Encontrar um arquivo escondido no sistema.

Instruções:

  1. Um arquivo oculto contém o flag
  2. Ele está na pasta Documentos do usuário
  3. O arquivo utiliza um Alternate Data Stream (ADS)

Configuração:

# Criar o arquivo com 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"

Comando útil:

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

Desafio 4: Serviço Suspeito (20 pontos)​

Objetivo: Identificar um serviço suspeito e encontrar seu flag.

Instruções:

  1. Um serviço foi criado com uma descrição contendo um flag
  2. O serviço não está iniciado
  3. Encontre-o entre os serviços instalados

Configuração:

# Criar um serviço falso (necessita admin)
New-Service -Name "SvcCTF" -BinaryPathName "C:\Windows\System32\cmd.exe" `
-DisplayName "Windows CTF Helper" `
-Description "FLAG{service_enumeration_master}" `
-StartupType Manual

Comandos úteis:

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

Desafio 5: Processos e Memória (20 pontos)​

Objetivo: Analisar um processo para encontrar um flag.

Instruções:

  1. Um script PowerShell está rodando em segundo plano
  2. Ele contém o flag em seus argumentos de linha de comando
  3. Use ferramentas de análise para encontrá-lo

Configuração:

# Iniciar um processo com o flag no argumento
Start-Process powershell -ArgumentList "-NoExit -Command `"Write-Host 'Background process'; while(`$true){Start-Sleep 60}`"" -WindowStyle Hidden
# O flag real estaria nos argumentos
Start-Process powershell -ArgumentList "-NoExit -Command `"`$flag='FLAG{process_forensics_win}'; while(`$true){Start-Sleep 60}`"" -WindowStyle Hidden

Comandos úteis:

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

Desafio 6: Rede e Conexões (15 pontos)​

Objetivo: Analisar as conexões de rede para encontrar uma pista.

Instruções:

  1. Um servidor está ouvindo em uma porta incomum
  2. Conecte-se ao servidor para obter o flag
  3. A porta está entre 8000 e 9000

Configuração:

# Script do servidor a ser executado antes do CTF
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, 8888)
$listener.Start()
Write-Host "Servidor CTF ouvindo na porta 8888"
while ($true) {
$client = $listener.AcceptTcpClient()
$stream = $client.GetStream()
$writer = [System.IO.StreamWriter]::new($stream)
$writer.WriteLine("FLAG{network_detective}")
$writer.Flush()
$client.Close()
}

Comandos úteis:

# Encontrar portas em escuta
Get-NetTCPConnection -State Listen | Where-Object { $_.LocalPort -gt 8000 -and $_.LocalPort -lt 9000 }

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

Desafio Bônus (10 pontos)​

Desafio 7: Tarefa Agendada​

Objetivo: Encontrar um flag escondido em uma tarefa agendada.

Configuração:

# Criar uma tarefa agendada com o 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"

Comando útil:

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

Folha de Respostas​

Nome: ______________________
Data: ______________________

Desafio 1 (15 pts): FLAG{_____________________}
Desafio 2 (15 pts): FLAG{_____________________}
Desafio 3 (15 pts): FLAG{_____________________}
Desafio 4 (20 pts): FLAG{_____________________}
Desafio 5 (20 pts): FLAG{_____________________}
Desafio 6 (15 pts): FLAG{_____________________}
Bônus (10 pts): FLAG{_____________________}

Total: _____ / 110 pontos

Critérios de Avaliação​

DesafioPontosDificuldade
1. Variáveis env15Fácil
2. Registro15Fácil
3. ADS15Médio
4. Serviços20Médio
5. Processos20Difícil
6. Rede15Médio
7. Bônus10Difícil

Guia para o Professor​

Preparação da VM​

# Script de configuração completa do CTF
# Executar como administrador antes do início

Write-Host "Configuração do Mini-CTF..." -ForegroundColor Cyan

# Desafio 1 - Variável de ambiente
[Environment]::SetEnvironmentVariable("SECRET_CTF", "FLAG{env_vars_reveal_secrets}", "User")

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

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

# Desafio 4 - Serviço (necessita 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 "Serviço criado" -ForegroundColor Green
}

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

# Desafio 7 - Tarefa agendada
$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 "Configuração finalizada!" -ForegroundColor Green
Write-Host "Não se esqueça de iniciar o servidor de rede (Desafio 6) separadamente."

Iniciando o servidor de rede (Desafio 6)​

# Executar em uma janela separada
$listener = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, 8888)
$listener.Start()
Write-Host "Servidor CTF ouvindo na porta 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 "Cliente atendido."
}

Limpeza após o CTF​

# Script de limpeza
[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 "Limpeza finalizada." -ForegroundColor Green

Conclusão​

Este Mini-CTF testa seu domínio dos conceitos fundamentais:

  • Exploração do sistema Windows
  • Uso do PowerShell
  • Análise forense básica
  • Segurança e detecção

Boa sorte! 🎯


Mini-CTF desenvolvido no âmbito do curso de Sistemas Operacionais - MÓDULO 11