
Packer Fuzzer é um scanner rápido e eficiente para detecção de segurança de sites construídos por empacotadores de módulos JavaScript como Webpack.
Devido à disseminação ou utilização das capacidades de detecção fornecidas pela ferramenta Packer Fuzzer (doravante referida como "esta ferramenta"), quaisquer consequências ou perdas diretas ou indiretas são de responsabilidade exclusiva do usuário. A equipe de desenvolvimento do Packer Fuzzer (doravante referida como "esta equipe") não assume qualquer responsabilidade por isso.
Esta ferramenta gerará automaticamente um relatório de resultados de varredura com base nos resultados do usuário. O conteúdo deste relatório e outros derivados não representam a posição ou opinião desta equipe.
Ao usar esta ferramenta, siga as leis e regulamentos relevantes do país onde o usuário e o sistema alvo estão localizados. Testes não autorizados não são permitidos. Se ocorrerem violações legais, reservamo-nos o direito de buscar responsabilidade legal e cooperar plenamente com as autoridades competentes nas investigações.
Com a popularidade dos empacotadores front-end WEB, você já encontrou cada vez mais sites baseados em Webpack bundler durante seus testes de penetração ou serviços de segurança? Esse tipo de empacotador agrupa todas as APIs e parâmetros de API do site para chamadas centralizadas pela web, o que facilita a rápida descoberta das funcionalidades e da lista de APIs do site. No entanto, esses empacotadores geralmente geram uma quantidade enorme de arquivos JS e uma quantidade extremamente grande de código JS total (dezenas de milhares de linhas), o que torna o teste manual muito inconveniente. Foi assim que o software Packer Fuzzer surgiu.
Esta ferramenta suporta a extração automática e difusa das APIs correspondentes do site alvo e dos parâmetros das APIs, além de realizar uma detecção rápida e eficiente para sete tipos de vulnerabilidades: Acesso não autorizado, Exposição de informações sensíveis, CORS, Injeção SQL, Escalada horizontal de privilégios, Senhas fracas e Upload arbitrário de arquivos. Após a varredura, a ferramenta também gera automaticamente um relatório de varredura. Você pode escolher a versão HTML para análise, bem como as versões mais formais em doc, pdf e txt.
E você não precisa se preocupar com problemas de idioma devido à internacionalização. A ferramenta vem com pacotes de idiomas para cinco idiomas principais (incluindo modelos de relatório): Chinês Simplificado, Francês, Espanhol, Inglês e Japonês (ordenados por precisão de tradução), traduzidos por nossa equipe muito não profissional.
Nota: A primeira versão da ferramenta foi otimizada apenas para regras do empacotador Webpack. Regras para outros empacotadores estão por vir.
Esta ferramenta é desenvolvida em Python3. Antes de executá-la, certifique-se de ter o software Python3.X e pip3 instalados. Se não tiver o ambiente, você pode instalá-lo seguindo este guia: https://www.runoob.com/python3/python3-install.html
Usuários MacOS podem instalar rapidamente com o comando:
brew install python3 # instalará pip3 automaticamente
Usuários Ubuntu podem instalar rapidamente com:
sudo apt-get install -y python3 && sudo apt install -y python3-pip
Usuários CentOS podem instalar rapidamente com:
sudo yum -y install epel-release && sudo yum install python3 && yum install -y python3-setuptools && easy_install pip
Esta ferramenta executará código NodeJS nativo através do node_vm2. Portanto, recomendamos a instalação do ambiente NodeJS (não recomendamos outros ambientes de execução JS, pois podem causar falhas de análise). Se não tiver o ambiente, instale seguindo este guia: https://www.runoob.com/nodejs/nodejs-install-setup.html
Usuários MacOS podem instalar rapidamente com:
Você pode executar a ferramenta com o comando python3 PackerFuzzer.py [options]. Os options são descritos abaixo:
-h (--help)
Comando de ajuda, não requer argumentos adicionais. Exibe todos os parâmetros suportados e suas descrições;
-u (--url)
Caminho da URL do site a ser varrido, obrigatório. Exemplo: -u https://demo.poc-sir.com;
-c (--cookie)
Conteúdo de cookies adicionais, opcional. Se preenchido, será transmitido globalmente. Exemplo: -c "POC=666;SIR=233";
-d (--head)
Cabeçalho HTTP adicional, opcional. Se preenchido, será transmitido globalmente. O padrão é Cache-Control:no-cache. Exemplo: -d "Token:3VHJ32HF0";
-l (--lang)
Opção de idioma. Quando vazio, seleciona automaticamente o idioma do sistema. Se não houver pacote de idiomas correspondente, muda para inglês. Pacotes disponíveis: Chinês Simplificado (zh), Francês (fr), Espanhol (es), Inglês (en), Japonês (ja). Exemplo: -l zh;
-t (--type)
Divide-se em versão básica e avançada. Quando vazio, usa a versão básica por padrão. A versão avançada reescaneia todas as APIs e extrai difusamente os parâmetros correspondentes, detectando: Injeção SQL, Escalada horizontal de privilégios, Senhas fracas, Upload arbitrário de arquivos. Use a opção adv para entrar na versão avançada. Exemplo: -t adv;
-p (--proxy)
Proxy global, opcional. Se preenchido, usa IP proxy globalmente. Exemplo: -p https://hack.cool:8080;
.db na pasta de cache correspondente dentro do diretório tmp. Ao abri-lo, você verá que todos os resultados em tempo real do projeto estão salvos nesse banco de dados. Você pode analisar os resultados atuais da varredura diretamente através do banco de dados em cache.baseurl para melhorar a taxa de sucesso da montagem da API e reduzir o número de requisições. Encontrar o baseurl não é difícil: basta acionar qualquer API no site alvo e observar a parte que falta rapidamente.--ah (--apihost) da ferramenta para personalizar o endereço do servidor da API.sudo.Você pode enviar uma ISSUE diretamente no repositório do Github: https://github.com/rtcatc/Packer-Fuzzer/issues
Se você acredita que o alvo específico não deve ser divulgado publicamente, pode nos enviar um e-mail: admin[at]hackinn.com
Ao enviar, para facilitar nossa análise, anexe o arquivo de log correspondente no diretório logs. Obrigado pela sua cooperação!
Enquanto isso, você pode escanear o código QR do grupo de bate-papo à esquerda para entrar no nosso grupo de discussão do WeChat (limitado pelo WeChat, este método está temporariamente indisponível). Ou você pode escanear o código QR pessoal de "天下大木头 (KpLi0rn)" à direita, adicionar a nota "Packer Fuzzer" e ele o convidará para o grupo:
Poc Sir
KpLi0rn
Liucy
RachesseHS
v1.0 2020/09/30
v1.1 2020/11/21
Corrigido alguns problemas de compatibilidade no Windows;
Melhorada a parte de validação global de certificados;
Corrigido vários bugs que poderiam causar erros graves no scanner.
v1.2 2021/01/21
Adicionada funcionalidade de identificação de empacotadores front-end e exibição da árvore de ativos;
Otimizadas as regras de extração assíncrona e adicionadas duas novas regras de identificação de API;
Corrigido bug que impedia a geração correta de relatórios e banco de dados;
Adicionado modo silencioso para facilitar testes em lote ou integração multiplataforma;
Correção urgente de uma vulnerabilidade que poderia permitir execução arbitrária de comandos.
v1.3 2021/04/23
Corrigido vários bugs que poderiam causar anomalias na detecção;
Substituído PyExecJS pelo node_vm2, relativamente mais seguro;
Otimizada a interface do terminal, adicionados novos prompts interativos;
Otimizado o modo de processamento do BaseDir, tornando-o mais amigável.
v1.4 2022/06/19
Corrigido vários bugs que poderiam causar operação anormal do scanner;
Removido conteúdo de extensão Python obsoleto;
Otimizado o relatório HTML, agora exibe o comprimento do conteúdo retornado pela API e permite ordenação;
Adicionado mecanismo de alternância entre requisições POST e GET;
Adicionada funcionalidade de personalização do cabeçalho Content-Type;
Adicionada funcionalidade de personalização do conteúdo de dados em requisições POST;
Adicionada funcionalidade de personalização do endereço do servidor da API.
brew install node
Usuários Ubuntu podem instalar rapidamente com:
sudo apt-get install nodejs && sudo apt-get install npm
Usuários CentOS podem instalar rapidamente com:
sudo yum -y install nodejs
Use o seguinte comando para instalar todas as bibliotecas Python necessárias de uma vez:
pip3 install -r requirements.txt
-j (--js)
Arquivos JS adicionais, opcional. Quando você acha que há outros arquivos JS que a ferramenta deve analisar, use esta opção. Exemplo: -j https://demo.poc-sir.com/js/index.js,https://demo.poc-sir.com/js/vue.js;
-b (--base)
Especifica a parte intermediária da API (por exemplo, para uma API como https://demo.poc-sir.com/v1_api/login, o basedir é v1_api), opcional. Quando você acha que o basedir extraído automaticamente está incorreto, use esta opção. Exemplo: -b v1_api;
-r (--report)
Especifica o formato do relatório gerado. Quando vazio, gera relatórios nos formatos HTML e DOC por padrão. Formatos disponíveis: html, doc, pdf, txt. Exemplo: -r html,pdf;
-e (--ext)
Opção para ativar plugins de extensão. A ferramenta suporta plugins escritos pelo usuário, armazenados no diretório ext (consulte o arquivo demo.py no diretório para instruções). Desligado por padrão. Quando o usuário ativa com o comando on, a ferramenta executará automaticamente os plugins no diretório. Exemplo: -e on;
-f (--flag)
Opção de segurança SSL. Quando vazio, desligado por padrão. Nesse estado, todas as conexões inseguras são bloqueadas. Se você deseja ignorar o estado de segurança SSL, use o comando 1 para ativar, ignorando todos os erros de certificado. Exemplo: -f 1;
-s (--silent)
Modo silencioso. Uma vez ativado, todas as perguntas YES/NO serão automaticamente definidas como YES, e o conteúdo após o parâmetro será o nome do relatório de varredura (nome personalizado). Útil para modos autônomos, operações em lote, chamadas de plugins, etc. Exemplo: -s Scan_Task_777.
--st (--sendtype)
Opção de método de requisição. Atualmente suporta os parâmetros POST e GET. Uma vez ativado, usará o método correspondente para escanear todas as APIs. Se não ativado, fará requisições inteligentes baseadas no código de status HTTP.
--ct (--contenttype)
Opção Content-Type. Permite personalizar o parâmetro Content-Type no cabeçalho HTTP durante a varredura. Se não ativado, fará requisições inteligentes baseadas no código de status HTTP.
--pd (--postdata)
Opção de conteúdo POST. Permite personalizar o conteúdo da requisição POST durante a varredura (todo o escaneamento usará este conteúdo, válido apenas para cenários POST). Se não ativado, fará requisições inteligentes baseadas no código de status HTTP.
--ah (--apihost)
Opção de domínio da API. Permite personalizar o domínio das requisições de API durante a varredura. Por exemplo: a parte da API (caminho da API extraído do JS) é /v1/info, e a URL escaneada (-u --url) é http://exp.com/. Se o parâmetro apihost for https://pocsir.com:777/, então a API será https://pocsir.com:777/v1/info em vez de http://exp.com/v1/info. Útil para cenários onde a API está em um domínio ou servidor diferente do frontend.
--fe (--fileext)
Opção de extensão de API. Permite adicionar uma extensão específica a todas as APIs, para lidar com situações em que a extensão não foi extraída corretamente. Por exemplo: se a API extraída é https://pocsir.com:777/v1/info, e você passa --fe .json, a ferramenta converterá automaticamente a API para https://pocsir.com:777/v1/info.json para varredura e detecção.