
Na parte anterior 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 .
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 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,xxeEste 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.jsonDurante o funcionamento no modo interativo, respondemos às perguntas e fornecemos as informações necessárias, como: login, senha e outros:

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:

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:3128onde, 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:

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:

É 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:

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:

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:

LFI/RFI
O scanner encontrou todas as vulnerabilidades embutidas:

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
