Wapiti — verificação de vulnerabilidades em sites por conta própria

Wapiti — verificação de vulnerabilidades em sites por conta própria
Na parte anterior artigo falamos sobre Nemesida WAF Free — uma ferramenta gratuita para proteger sites e APIs contra ataques de hackers, e nesta decidimos fazer uma análise de um popular scanner de vulnerabilidades Wapiti.

A varredura de sites para vulnerabilidades é uma medida necessária que, junto com a análise do código-fonte, permite avaliar o nível de proteção contra ameaças de comprometimento. A varredura de um recurso web pode ser realizada com a ajuda de ferramentas especializadas.

Nikto, W3af (escrito em Python 2.7, cujo suporte foi encerrado) ou Arachni (não é mais suportado desde fevereiro) — são as soluções mais populares oferecidas no segmento gratuito. Claro, existem outras, como o Wapiti, sobre o qual decidimos nos concentrar.

Wapiti trabalha com os seguintes tipos de vulnerabilidades:

  • exposição de arquivo (locais e remotas, fopen, readfile);
  • injeções (injeções PHP / JSP / ASP / SQL e injeções XPath);
  • XSS (cross-site scripting) (refletido e persistente);
  • detecção e execução de comandos (eval(), system(), passtru());
  • injeções CRLF (divisão de respostas HTTP, fixação de sessão);
  • inserção XXE (entidade externa XML);
  • SSRF (falsificação de solicitação do lado do servidor);
  • uso de arquivos potencialmente perigosos conhecidos (graças ao banco de dados Nikto);
  • configurações fracas do .htaccess que podem ser contornadas;
  • presença de arquivos de backup que revelam informações confidenciais (exposição de código-fonte);
  • Shellshock;
  • redirecionamentos abertos;
  • métodos HTTP não padrão que podem ser permitidos (PUT).

Características:

  • suporte para proxy HTTP, HTTPS e SOCKS5;
  • autenticação por meio de vários métodos: Basic, Digest, Kerberos ou NTLM;
  • possibilidade de restringir o escopo da varredura (domínio, pasta, página, URL);
  • remoção automática de um dos parâmetros na URL;
  • múltiplas precauções contra ciclos de varredura infinitos (exemplo: ifor, restrição de valores para o parâmetro);
  • possibilidade de definir prioridade para a exploração de URLs (mesmo que não estejam na área de varredura);
  • possibilidade de excluir algumas URLs da varredura e ataques (por exemplo: URL de logout);
  • importação de arquivos de cookie (obtendo-os com a ferramenta wapiti-getcookie);
  • possibilidade de ativar/desativar a verificação de certificados SSL;
  • possibilidade de extrair URLs de JavaScript (um intérprete JS muito simples);
  • interação com HTML5;
  • várias opções para gerenciar o comportamento e as restrições do crawler;
  • definição de um tempo máximo para o processo de varredura;
  • adição de alguns cabeçalhos HTTP personalizáveis ou configuração de um User-Agent personalizado.

Recursos adicionais:

  • geração de relatórios de vulnerabilidade em vários formatos (HTML, XML, JSON, TXT);
  • suspensão e retomada da varredura ou ataque (mecanismo de sessão usando bancos de dados SQLite3);
  • destaque no terminal para realçar vulnerabilidades;
  • diferentes níveis de registro;
  • uma maneira rápida e fácil de ativar/desativar módulos de ataque.

Instalação

A versão mais recente do Wapiti pode ser instalada de 2 maneiras:

  • baixando o código-fonte do site oficial do site e executando o script de instalação, tendo previamente instalado o Python3;
  • usando o comando pip3 install wapiti3.

Após isso, o Wapiti estará pronto para uso.

Trabalhando com a ferramenta

Para demonstrar o funcionamento do Wapiti, usaremos um ambiente especialmente preparado sites.vulns.pentestit.ru (recurso interno), que contém várias vulnerabilidades (Injection, XSS, LFI/RFI) e outras falhas de aplicações web.

As informações são fornecidas apenas para fins de conhecimento. Não viole a legislação!

O comando básico para iniciar o scanner:

# wapiti -u <target> <options>

Neste caso, há uma ajuda bastante detalhada com uma enorme quantidade de opções de execução, por exemplo:

—scope — área de aplicação
Se, juntamente com a URL a ser escaneada, o parâmetro scope for especificado, é possível regular a área de varredura do site, indicando tanto uma página específica quanto todas as páginas que puderem ser encontradas no site.

-s e -x — parâmetros para adicionar ou remover URLs específicas. Esses parâmetros são úteis quando é necessário adicionar ou remover um URL específico no processo de varredura.

—skip — o parâmetro especificado com esta chave será escaneado, mas não será atacado. Útil se houver alguns parâmetros perigosos que é melhor excluir durante a varredura.

—verify-ssl — habilitar ou desabilitar a verificação do certificado.
O scanner Wapiti é modular. No entanto, para executar módulos específicos, entre aqueles que são conectados automaticamente durante a operação do scanner, é necessário usar a chave -m e listar os desejados separados por vírgulas. Se a chave não for utilizada, todos os módulos funcionarão por padrão. No formato mais simples, isso se parecerá com o seguinte:

# wapiti -u http://sites.vulns.pentestit.ru/ -m sql,xss,xxe

Este exemplo de uso significa que utilizaremos apenas os módulos SQL, XSS e XXE ao escanear o alvo. Além disso, é possível filtrar o funcionamento dos módulos de acordo com o método desejado. Por exemplo -m “xss: get, blindsql: post, xxe: post”. Nesse caso, o módulo xss será aplicado às requisições enviadas pelo método GET, enquanto o módulo blibdsql será aplicado às requisições POST, etc. A propósito, se algum módulo que foi incluído na lista não for necessário durante a varredura ou demorar muito, pressionando Ctrl+C é possível pular o uso do módulo atual, selecionando a opção correspondente no menu interativo.

Wapiti suporta o envio de requisições através de um proxy usando a chave -p e a autenticação no site alvo através do parâmetro -a. Também é possível especificar o tipo de autenticação: Basiс, Digest, Kerberos e NTLM. Para os dois últimos, pode ser necessário instalar módulos adicionais. Além disso, podemos inserir quaisquer cabeçalhos nas requisições (incluindo um User-Agent) e muito mais.

Para usar a autenticação, podemos usar a ferramenta wapiti-getcookie. Com ela, formamos cookie, que o Wapiti usará durante a varredura. A formação cookie é realizada com o comando:

# wapiti-getcookie -u http://sites.vulns.pentestit.ru/login.php -c cookie.json

Durante o funcionamento no modo interativo, respondemos às perguntas e fornecemos as informações necessárias, como: login, senha e outros:

Wapiti — verificação de vulnerabilidades em sites por conta própria

No final, recebemos um arquivo no formato JSON. Outra opção é adicionar todas as informações necessárias através do parâmetro -d:

# wapiti-getcookie - http://sites.vulns.pentestit.ru/login.php -c cookie.json -d "username=admin&password=admin&enter=submit"

O resultado será semelhante:

Wapiti — verificação de vulnerabilidades em sites por conta própria

Ao considerar a funcionalidade principal do scanner, a requisição final para realizar os testes no aplicativo web, neste caso, foi:

# wapiti --level 1 -u http://sites.vulns.pentestit.ru/ -f html -o /tmp/vulns.html -m all --color -с cookie.json --scope folder --flush-session -A 'Pentestit Scans' -p http://proxy.office.pentestit.ru:3128

onde, entre outros parâmetros:

--follow e -o — formato e caminho para salvar o relatório;

-m — ativação de todos os módulos — não recomendado, pois afetará o tempo de teste e o tamanho do relatório;

—color — destacar as vulnerabilidades encontradas de acordo com sua criticidade, segundo a versão do próprio Wapiti;

-c — utilização de um arquivo com cookie, gerado com wapiti-getcookie;

—scope — escolha do alvo para ataque. Escolhendo a opção folder cada URL começando com a base será escaneado e atacado. A URL base deve terminar com uma barra (sem nome de arquivo);

—flush-session — permite realizar um reescaneamento, que não levará em conta os resultados anteriores;

-A — próprio User-Agent;

-p — o endereço do servidor proxy, se necessário.

Um pouco sobre o relatório

O resultado da varredura é apresentado na forma de um relatório detalhado sobre todas as vulnerabilidades encontradas, em formato de página HTML, de maneira clara e fácil de entender. O relatório indicará as categorias e o número de vulnerabilidades encontradas, suas descrições, solicitações, comandos para curl e dicas sobre como corrigi-las. Para facilitar a navegação, os títulos das categorias terão links adicionados, que podem ser clicados para acessá-las:

Wapiti — verificação de vulnerabilidades em sites por conta própria

Uma desvantagem significativa do relatório é a ausência de um mapa do aplicativo web, sem o qual não será claro se todos os endereços e parâmetros foram analisados. Também existe a probabilidade de falsos positivos. No nosso caso, o relatório menciona "arquivos de backup" e "arquivos potencialmente perigosos". A quantidade não corresponde à realidade, pois tais arquivos não estavam presentes no servidor:

Wapiti — verificação de vulnerabilidades em sites por conta própria

É possível que módulos que não estão funcionando corretamente sejam corrigidos com o tempo. Outra desvantagem do relatório é a falta de coloração das vulnerabilidades encontradas (dependendo da sua criticidade), ou pelo menos a sua separação em categorias. A única forma de entendermos indiretamente a criticidade de uma vulnerabilidade encontrada é aplicando o parâmetro —color durante a varredura, e então as vulnerabilidades encontradas serão coloridas de diferentes maneiras:

Wapiti — verificação de vulnerabilidades em sites por conta própria

Mas no próprio relatório essa coloração não está prevista.

Vulnerabilidades

SQLi

O scanner conseguiu parcialmente encontrar SQLi. Durante a busca por vulnerabilidades SQL nas páginas onde a autenticação não é requerida, não surgiram problemas:

Wapiti — verificação de vulnerabilidades em sites por conta própria

Não foi possível encontrar vulnerabilidades nas páginas acessíveis apenas após autenticação, mesmo usando credenciais válidas cookie, pois provavelmente, após uma autenticação bem-sucedida, ocorrerá "logout da sessão" e cookie se tornarão inválidas. Se a função de logout fosse realizada como um script separado, responsável pelo processamento desse procedimento, poderia ser completamente excluída usando o parâmetro -x, evitando assim sua execução. Caso contrário, não será possível evitar seu processamento. Este é um problema não de um módulo específico, mas da ferramenta como um todo, mas devido a essa nuance, não foi possível detectar várias injeções na área restrita do recurso.

XSS

O scanner lidou bem com a tarefa e encontrou todas as vulnerabilidades preparadas:

Wapiti — verificação de vulnerabilidades em sites por conta própria

LFI/RFI

O scanner encontrou todas as vulnerabilidades embutidas:

Wapiti — verificação de vulnerabilidades em sites por conta própria

No geral, apesar de falsos positivos e falhas em detectar vulnerabilidades, o Wapiti, como uma ferramenta gratuita, apresenta resultados bastante razoáveis. De qualquer forma, é preciso reconhecer que o scanner é bastante poderoso, flexível e multifuncional, e o principal — é gratuito, portanto, merece ser utilizado, ajudando administradores e desenvolvedores a obter informações básicas sobre o estado de segurança de aplicações web.

Mantenha-se saudável e protegido!

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster