Teste de penetração em aplicações web é o mais próximo de um ataque real que sua aplicação vai enfrentar antes de um adversário de verdade aparecer. Você tem um documento de escopo assinado, uma URL alvo e um prazo. A questão é: por onde começar, e como encontrar as vulnerabilidades que scanners automatizados não detectam? Este guia cobre a metodologia, ferramentas e técnicas que pentesters profissionais usam em engajamentos reais com aplicações web. Pratique cada técnica de forma hands-on no curso de Web Attacks da HackerDNA enquanto lê.
Se você está construindo suas habilidades de teste de penetração, aplicações web são o alvo de maior valor para focar. Elas armazenam dados sensíveis, estão expostas na internet, e a maioria das organizações tem pelo menos uma que nunca foi testada adequadamente. Este guia detalha a metodologia de cinco fases usada em avaliações profissionais, as três ferramentas que você realmente precisa, e as classes de vulnerabilidade que aparecem em praticamente todo engajamento.
TL;DR: Teste de penetração em aplicações web segue uma metodologia de cinco fases: reconhecimento, mapeamento da aplicação, descoberta de vulnerabilidades, exploração e relatório. Metodologia importa mais que ferramentas. Burp Suite, SQLMap e uma boa ferramenta de descoberta de conteúdo cobrem 90% das avaliações de aplicações web. Controle de acesso quebrado e falhas de injeção dominam os achados reais.
O Que É Teste de Penetração em Aplicações Web?
Teste de penetração em aplicações web é uma avaliação de segurança estruturada onde um testador investiga manualmente uma aplicação web em busca de vulnerabilidades, simulando as técnicas que um atacante real usaria. Vai além do scanning automatizado ao testar lógica de negócio, fluxos de autenticação e mecanismos de controle de acesso que ferramentas não conseguem avaliar sozinhas.
A distinção entre uma avaliação de vulnerabilidades e um teste de penetração importa. Uma avaliação de vulnerabilidades executa ferramentas automatizadas e reporta o que encontra. Um teste de penetração em aplicações web leva esses achados adiante: o testador verifica manualmente cada problema, tenta a exploração, encadeia vulnerabilidades e demonstra o impacto real. Um scanner pode sinalizar um XSS refletido. Um pentester encadeia esse XSS em sequestro de sessão e prova que pode tomar controle de uma conta de administrador.
De acordo com o OWASP Web Security Testing Guide v4.2, testes de aplicações web cobrem 12 categorias principais, desde coleta de informações até teste de API. Na prática, a maioria dos achados críticos se concentra em três áreas: falhas de injeção, controle de acesso quebrado e fraquezas de autenticação. O Verizon DBIR de 2024 constatou que aplicações web foram o vetor inicial em 26% das violações confirmadas, tornando-as a maior superfície de ataque para a maioria das organizações.
O cronograma padrão de um engajamento de pentest em aplicações web varia de 5 a 15 dias úteis, dependendo da complexidade da aplicação. Um site de marketing simples com formulário de login leva uma semana. Uma plataforma SaaS empresarial com isolamento multi-tenant, integrações de API e controle de acesso baseado em papéis leva duas a três semanas para ser testada adequadamente.
Metodologia de Teste de Penetração em Aplicações Web
Todo testador experiente segue uma metodologia, não um checklist. Checklists dão uma falsa confiança de que você cobriu tudo. Uma metodologia dá um processo repetível que se adapta à arquitetura de cada aplicação. A metodologia de teste de penetração em aplicações web abaixo é baseada no OWASP Testing Guide e no PTES, refinada pela experiência em engajamentos reais.
Reconhecimento e Validação de Escopo
Antes de tocar na aplicação, valide seu escopo. Isso parece óbvio, mas violações de escopo encerram engajamentos e carreiras. Leia o documento de regras de engajamento duas vezes. Confirme quais domínios, subdomínios e faixas de IP estão no escopo. Se o escopo diz app.example.com, não investigue api.example.com a menos que esteja explicitamente listado.
Comece com reconhecimento passivo. Registros WHOIS revelam provedores de hospedagem e detalhes do registrante. Enumeração de DNS com ferramentas como dig e amass descobre subdomínios que o cliente pode ter esquecido. Verifique logs de transparência de certificados via crt.sh para subdomínios com certificados SSL emitidos. Google dorking com site:target.com filetype:pdf revela documentos expostos.
Reconhecimento ativo vem em seguida. Port scanning com Nmap identifica serviços abertos. Para aplicações web especificamente, você se preocupa com as portas 80, 443, 8080, 8443 e quaisquer portas não padrão rodando HTTP. Um rápido nmap -sV -p 80,443,8080,8443 target.com confirma com o que você está trabalhando.
Mapeamento da Aplicação
O mapeamento da aplicação constrói seu modelo mental de como o alvo funciona. Você precisa entender cada endpoint, parâmetro, mecanismo de autenticação e papel de usuário antes de começar a testar.
Configure o Burp Suite como proxy do seu navegador e navegue por toda a aplicação. Crie uma conta em cada nível de permissão que o cliente fornecer (usuário, moderador, admin). Navegue por cada página, envie cada formulário, dispare cada chamada AJAX. O site map do Burp se preenche conforme você navega, dando uma representação visual da superfície de ataque da aplicação.
Preste atenção em:
- Mecanismos de autenticação (cookies de sessão, JWTs, API keys, fluxos OAuth)
- Campos de entrada e parâmetros de URL que aceitam dados controlados pelo usuário
- Endpoints de API visíveis em arquivos JavaScript ou tráfego de rede
- Funcionalidade de upload de arquivos e tratamento de content type
- Diferenças de acesso baseado em papéis entre níveis de usuário
Execute descoberta de conteúdo em paralelo. Gobuster com uma wordlist como raft-medium-directories.txt encontra endpoints ocultos, painéis de admin e arquivos de backup que não estão linkados na interface. Um único gobuster dir -u https://target.com -w raft-medium-directories.txt -t 50 frequentemente revela mais superfície de ataque do que uma hora de navegação manual.
Descoberta de Vulnerabilidades
Este é o núcleo da avaliação. Você testa sistematicamente cada ponto de entrada e funcionalidade em busca de fraquezas. As três classes de vulnerabilidade que dominam os achados reais em aplicações web são falhas de injeção, controle de acesso quebrado e problemas de autenticação.
Para teste de injeção, comece com payloads manuais antes de recorrer a ferramentas automatizadas. Insira uma aspa simples em cada parâmetro e observe a resposta. Um erro 500 ou uma mensagem de erro do banco de dados confirma potencial de SQL injection. Teste com 1' OR '1'='1 em formulários de login. Tente <script>alert(1)</script> em campos de busca e saídas controladas pelo usuário para XSS. Teste injeção de comando com ; id ou | whoami em parâmetros que possam interagir com o sistema operacional.
Para teste de controle de acesso, faça login como um usuário de baixo privilégio e tente acessar recursos pertencentes a outros usuários. Mude um parâmetro id=123 para id=124 e veja se obtém dados de outro usuário. Acesse endpoints de admin diretamente sem credenciais de administrador. Na prática, controle de acesso quebrado aparece em cerca de 80% das avaliações de aplicações web. É o achado mais comum porque desenvolvedores focam em construir funcionalidades, não em restringir o acesso a elas.
Teste de autenticação cobre políticas de senha, mecanismos de bloqueio de conta, gerenciamento de sessão e bypasses de autenticação multifator. Verifique se sessões expiram após logout. Confirme que tokens de reset de senha são de uso único e têm tempo limitado. Teste se a aplicação aceita credenciais via HTTP não criptografado.
Exploração e Prova de Conceito
Encontrar uma vulnerabilidade não é suficiente. Você precisa de uma prova de conceito funcional que demonstre impacto real. Um cliente não vai priorizar a correção de um XSS se você apenas disser "este parâmetro é refletido." Mostre um payload que rouba o cookie de sessão do admin e redireciona para um servidor controlado pelo atacante.
Encadeamento de vulnerabilidades separa bons pentesters dos ótimos. Um IDOR que vaza endereços de email é de severidade média por si só. Encadeie com um fluxo de reset de senha que envia tokens para esses endereços de email, e você tem takeover de conta. Um SSRF que lê metadados internos pode parecer limitado até você extrair credenciais AWS de http://169.254.169.254 e pivotar para a infraestrutura cloud.
Documente tudo conforme avança. Tire screenshots de cada passo, salve requisições e respostas HTTP do Burp, e anote os passos exatos de reprodução. O relatório é onde você entrega valor, e documentação desleixada durante os testes significa horas de reconstrução dolorosa depois.
Relatório e Orientação de Remediação
Um relatório de pentest é o único entregável que seu cliente guarda. O teste em si é efêmero; o relatório é permanente. Escreva para dois públicos: executivos que precisam entender o risco, e desenvolvedores que precisam corrigir os problemas.
Cada achado deve incluir:
- Um título claro e pontuação CVSS 3.1
- URL afetada, parâmetro e método HTTP
- Instruções de reprodução passo a passo
- Screenshots ou pares de requisição/resposta HTTP como evidência
- Explicação de impacto no negócio (não apenas impacto técnico)
- Orientação específica de remediação com exemplos de código quando possível
Pule o conselho genérico "sanitize todas as entradas." Diga ao desenvolvedor exatamente qual função usar: "Use consultas parametrizadas com PreparedStatement em Java" ou "Aplique DOMPurify.sanitize() antes de renderizar conteúdo do usuário." Remediação acionável é corrigida. Conselho vago é ignorado.
Ferramentas Essenciais para Teste de Penetração em Aplicações Web
Você não precisa de 15 ferramentas para testar uma aplicação web. Precisa de três boas e conhecimento profundo de como usá-las. Aqui estão as ferramentas de teste de penetração em aplicações web que profissionais realmente usam.
Burp Suite
Burp Suite é o centro de todo engajamento com aplicações web. Ele fica entre seu navegador e o alvo como um proxy interceptador, permitindo visualizar, modificar e reenviar cada requisição HTTP. A Community Edition é gratuita e dá conta da maioria das tarefas. A Pro Edition adiciona um scanner automatizado, velocidade total do Intruder e Collaborator para testes out-of-band.
As funcionalidades que você vai usar diariamente: Proxy para interceptar requisições, Repeater para modificar e reenviar requisições individuais, Intruder para fuzzing de parâmetros, e o site map para entender a estrutura da aplicação. Se você é novo no Burp, trabalhe no nosso tutorial de Burp Suite antes do seu primeiro engajamento.
Na prática, eu mantenho o Burp rodando durante toda a avaliação. Cada requisição interessante vai para o Repeater. Cada parâmetro que vale a pena fazer fuzzing passa pelo Intruder. O histórico do Proxy se torna minha trilha de auditoria.
SQLMap
Uma vez que você confirmou manualmente que um parâmetro é vulnerável a SQL injection, SQLMap automatiza a extração. Ele lida com blind injection, time-based injection, UNION queries e stacked queries em dezenas de backends de banco de dados.
O fluxo profissional: encontre o ponto de injeção manualmente, salve a requisição do Burp como arquivo de texto, depois aponte o SQLMap para ele:
sqlmap -r request.txt --batch --level=3 --risk=2
Nunca execute SQLMap contra uma aplicação em produção sem autorização explícita por escrito e escopo confirmado. A ferramenta gera centenas de requisições e pode disparar alertas de WAF, derrubar aplicações instáveis ou modificar dados com stacked queries. Manual primeiro, automatizado depois é a abordagem profissional.
Para um passo a passo detalhado de técnicas de SQL injection antes de automatizar, leia nosso tutorial de SQL injection.
Gobuster e ffuf
Descoberta de conteúdo é inegociável. Diretórios ocultos, arquivos de backup e endpoints de API não documentados são frequentemente o ponto de entrada para achados críticos.
Gobuster lida com brute-forcing de diretórios direto ao ponto com configuração mínima. É rápido, simples e resolve 80% dos casos de uso. Confira nosso guia de wordlists do Gobuster para wordlists recomendadas por cenário.
ffuf é mais flexível. Suporta filtragem por código de resposta, tamanho, contagem de palavras e contagem de linhas, o que importa quando o alvo retorna páginas 404 customizadas. Para APIs, a capacidade do ffuf de fazer fuzzing em parâmetros JSON e headers é valiosa.
Pule o DirBuster. Funciona, mas a GUI Java é dolorosamente lenta comparada às alternativas de linha de comando. Gobuster ou ffuf terminam em uma fração do tempo com saída mais limpa. Se você quer entender o conceito por trás de brute-forcing de diretórios, nosso guia do DirBuster cobre os fundamentos.
Vulnerabilidades Comuns Que Você Vai Encontrar
Depois de conduzir dezenas de avaliações de aplicações web, padrões emergem. As mesmas classes de vulnerabilidade aparecem repetidamente. Aqui estão as três que aparecem em praticamente todo relatório.
SQL Injection
SQL injection continua sendo um dos achados de maior impacto em testes de aplicações web. Apesar de ser bem documentado desde o final dos anos 1990, persiste porque desenvolvedores usam ORMs incorretamente, escrevem queries diretas por "performance," ou herdam codebases legados que nunca foram corrigidos.
Os pontos de injeção mais comuns: formulários de login, funcionalidade de busca, parâmetros de URL usados em queries de banco de dados e endpoints de API que aceitam filtros fornecidos pelo usuário. Um teste simples: insira uma aspa simples (') em um parâmetro e observe se a resposta muda. Um erro de banco de dados, uma página diferente ou uma resposta atrasada indicam potencial de injeção.
O impacto varia desde exfiltração de dados (dump do banco inteiro) até execução remota de código via xp_cmdshell no MSSQL ou INTO OUTFILE no MySQL. Em um engajamento, um único blind SQL injection em um parâmetro de busca levou à extração de 2 milhões de registros de clientes incluindo senhas em hash.
XSS e CSRF
Cross-site scripting e cross-site request forgery são classes de ataque client-side que visam o navegador do usuário ao invés do servidor. São vulnerabilidades distintas com mecânicas diferentes, mas frequentemente coexistem na mesma aplicação. Para uma análise detalhada de como diferem, veja nossa comparação XSS vs CSRF.
XSS refletido aparece quando entrada do usuário é incluída na resposta HTTP sem encoding. XSS armazenado é mais perigoso porque o payload persiste no banco de dados e dispara para cada usuário que visualiza a página afetada. Um XSS armazenado em um campo de comentário, por exemplo, pode roubar cookies de sessão de cada usuário que lê aquele comentário.
CSRF explora a inclusão automática de cookies pelo navegador em requisições same-site. Se uma aplicação processa uma requisição que altera estado (mudança de senha, atualização de email, transferência de fundos) sem verificar a origem da requisição, um atacante pode criar uma página maliciosa que dispara essa ação quando um usuário logado a visita.
Controle de Acesso Quebrado
Controle de acesso quebrado é o achado número um no OWASP Top 10 (2021), e com razão. Apareceu em 94% das aplicações testadas no dataset da OWASP. Esta categoria cobre tudo, desde IDOR (Insecure Direct Object Reference) até controle de acesso em nível de função ausente.
O teste típico: faça login como Usuário A, encontre uma requisição que acessa dados do Usuário A (como GET /api/users/42/profile), mude o ID para outro usuário (43), e verifique se obtém os dados dele. Se obtiver, isso é um IDOR. Agora tente acessar endpoints exclusivos de admin como um usuário comum. Se /admin/users retorna dados para uma sessão não-admin, isso é controle de acesso em nível de função ausente.
Essas vulnerabilidades estão em todo lugar porque a maioria dos frameworks web não aplica autorização por padrão. O framework cuida da autenticação (quem é você?), mas a autorização (o que você pode fazer?) fica por conta do desenvolvedor. E desenvolvedores, sob pressão de prazo, frequentemente esquecem de adicionar essas verificações em cada endpoint.
Certificações de Teste de Penetração em Aplicações Web
Se você quer se especializar em teste de aplicações web, três certificações se destacam. Cada uma valida diferentes níveis de profundidade.
BSCP (Burp Suite Certified Practitioner) da PortSwigger é a opção mais focada em web. O exame é inteiramente prático, conduzido dentro do Burp Suite contra aplicações ao vivo. Se seu objetivo é especificamente teste de aplicações web, o BSCP prova habilidades mais relevantes que certificações mais amplas. Custa $99 e você pode refazer no mesmo dia se reprovar.
OSCP (Offensive Security Certified Professional) é a certificação de pentest mais reconhecida do mercado. Cobre aplicações web como parte de um currículo mais amplo de segurança ofensiva que inclui teste de penetração de rede, ataques em Active Directory e escalação de privilégios. O componente de aplicações web é significativo mas não é o foco único.
eWPT (eLearnSecurity Web Application Penetration Tester) da INE fica entre os dois. É focado em web com um exame prático que exige que você encontre e explore vulnerabilidades em uma aplicação alvo e entregue um relatório profissional. O material de treinamento é mais estruturado que a abordagem aprenda-fazendo da OSCP.
Minha recomendação: comece com o BSCP para habilidades web focadas, depois busque o OSCP quando estiver pronto para expandir para rede e teste de AD. O eWPT é uma alternativa sólida se o estilo de treinamento da INE se encaixar melhor para você.
Considerações Legais e Éticas
Lembrete crítico: Sempre obtenha autorização explícita por escrito antes de testar qualquer sistema. Testes não autorizados são crime sob o Computer Fraud and Abuse Act (EUA), o Computer Misuse Act (Reino Unido), e leis equivalentes na maioria dos países, incluindo o Marco Civil da Internet e a LGPD no Brasil. Um acordo verbal não é suficiente. Obtenha um documento de escopo assinado que especifique exatamente quais sistemas você está autorizado a testar, quais técnicas são permitidas e a janela de testes.
Além da legalidade, permaneça dentro do escopo o tempo todo. Se você descobrir uma vulnerabilidade que pode afetar sistemas fora do seu escopo, documente e notifique o cliente. Não explore. Se você acidentalmente acessar dados sensíveis além do necessário para sua prova de conceito, pare, documente a evidência mínima necessária e reporte imediatamente.
Divulgação responsável se aplica quando você encontra vulnerabilidades no mundo real (fora de um engajamento formal). A maioria das organizações tem uma política de divulgação de vulnerabilidades ou um programa de bug bounty. Em caso de dúvida, verifique um arquivo /.well-known/security.txt no domínio alvo.
Para prática segura e legal, os labs da HackerDNA oferecem aplicações web deliberadamente vulneráveis para testar em um ambiente sandboxed. Você ganha toda a experiência de um engajamento real sem nenhum risco legal.
Seus Próximos Passos
Teste de penetração em aplicações web é uma habilidade construída através da repetição. A metodologia permanece consistente entre engajamentos, mas cada aplicação apresenta desafios únicos que afinaram seus instintos. Ferramentas mudam, frameworks evoluem e novas classes de vulnerabilidade surgem. O que não muda: a abordagem sistemática de mapear uma aplicação, entender sua lógica e testar cada suposição que os desenvolvedores fizeram.
Comece com o lab de SQL Injection para praticar teste de injeção contra uma aplicação web real. Depois trabalhe no curso completo de Web Attacks para lições guiadas cobrindo XSS, CSRF, SSRF, SSTI e mais nove classes de ataque do OWASP Top 10. Cada lição combina teoria com um lab hands-on onde você mesmo explora a vulnerabilidade.
O plano gratuito da HackerDNA dá acesso a labs no navegador sem cartão de crédito e sem configuração local. Abra um navegador, escolha um lab e comece a testar.
Parte da série Teste de Penetração
Artigos relacionados:
- Teste de Penetração em Aplicações Web
- Nmap Cheat Sheet
- Msfvenom Cheat Sheet
- Tutorial de Burp Suite
- Guia de Wordlists do Gobuster
- Como Usar o DirBuster
- Tutorial de Hash Cracking