
Следующее поколение версии enum4linux (инструмент для перечисления Windows/Samba) с дополнительными функциями, такими как экспорт в JSON/YAML. Предназначен для специалистов по безопасности и участников CTF.
Версия enum4linux нового поколения
enum4linux-ng.py — это переработка enum4linux.pl, созданной Марком Лоу (ранее Portcullis Labs, теперь Cisco CX Security Labs). Инструмент предназначен для сбора информации о системах Windows и Samba и ориентирован на специалистов по безопасности и участников CTF. Он является в первую очередь обёрткой вокруг утилит Samba: nmblookup, net, rpcclient и smbclient.
Я создал его в образовательных целях для себя и чтобы обойти проблемы enum4linux.pl. Он обладает той же функциональностью, что и оригинальный инструмент (хотя некоторые вещи реализованы иначе). В отличие от оригинала, он анализирует весь вывод утилит Samba и позволяет экспортировать все результаты в файл YAML или JSON. Идея в том, чтобы другие инструменты могли импортировать результаты и обрабатывать их дальше. В будущем планируется добавить новые функции.
Некоторые вещи реализованы иначе по сравнению с оригинальным enum4linux. Вот основные отличия:
-Gm-A), но может быть включено с помощью -R-A вместо -a)Я хотел бы поблагодарить и выразить признательность сотрудникам бывшего Portcullis Labs (теперь Cisco CX Security Labs), а именно:
Кроме того, хочу поблагодарить:
Было очень интересно читать ваш код! :)
И наконец, я благодарю всех, кто внёс свой вклад в код, сообщал о проблемах и давал полезные советы по улучшению инструмента.
Если вы используете этот инструмент: не применяйте его в нелегальных целях.
Пример запуска может выглядеть так:
enum4linux-ng.py -As <target> -oY out
На этой демонстрации показан запуск против стандартной установки Windows Server 2012 R2. Используется следующая команда:
enum4linux-ng.py 192.168.125.131 -u Tester -p 'Start123!' -oY out
Был создан пользователь 'Tester' с паролем 'Start123!'. Доступ через брандмауэр разрешён. После завершения перечисления я прокручиваю вверх, чтобы результаты стали более наглядными. Поскольку не указана другая опция перечисления, инструмент предполагает -A, что аналогично опции -a enum4linux. Переданы имя пользователя и пароль. Опция -oY экспортирует все собранные данные в файл YAML для дальнейшей обработки в out.yaml. В начале инструмент автоматически определяет, что LDAP не запущен на удалённом хосте, поэтому он пропускает все дальнейшие проверки LDAP, которые обычно входят в стандартное перечисление.

Вторая демонстрация показывает запуск против Metasploitable 2. Используется следующая команда:
enum4linux-ng.py 192.168.125.145 -A -C
На этот раз используются опции -A и -C. Первая ведёт себя аналогично опции -a enum4linux, а вторая включает перечисление служб. На этот раз учётные данные не предоставлялись. Инструмент автоматически определяет, что нужно использовать SMBv1. Файлы YAML или JSON не записываются. Я снова прокручиваю вверх, чтобы результаты стали более наглядными.

usage: enum4linux-ng.py [-h] [-A] [-As] [-U] [-G] [-Gm] [-S] [-C] [-P] [-O] [-L] [-I] [-R [BULK_SIZE]] [-N] [-w DOMAIN] [-u USER]
[-p PW | -K TICKET_FILE | -H NTHASH] [--local-auth] [-d] [-k USERS] [-r RANGES] [-s SHARES_FILE] [-t TIMEOUT] [-v] [--keep]
[-oJ OUT_JSON_FILE | -oY OUT_YAML_FILE | -oA OUT_FILE]
host
This tool is a rewrite of Mark Lowe's enum4linux.pl, a tool for enumerating information from Windows and Samba systems. It is mainly a wrapper around the Samba
tools nmblookup, net, rpcclient and smbclient. Other than the original tool it allows to export enumeration results as YAML or JSON file, so that it can be
further processed with other tools. The tool tries to do a 'smart' enumeration. It first checks whether SMB or LDAP is accessible on the target. Depending on the
result of this check, it will dynamically skip checks (e.g. LDAP checks if LDAP is not running). If SMB is accessible, it will always check whether a session can
be set up or not. If no session can be set up, the tool will stop enumeration. The enumeration process can be interupted with CTRL+C. If the options -oJ or -oY
are provided, the tool will write out the current enumeration state to the JSON or YAML file, once it receives SIGINT triggered by CTRL+C. The tool was made for
security professionals and CTF players. Illegal use is prohibited.
positional arguments:
host
options:
-h, --help show this help message and exit
-A Do all simple enumeration including nmblookup (-U -G -S -P -O -N -I -L). This option is enabled if you don't provide any other option.
-As Do all simple short enumeration without NetBIOS names lookup (-U -G -S -P -O -I -L)
-U Get users via RPC
-G Get groups via RPC
-Gm Get groups with group members via RPC
-S Get shares via RPC
-C Get services via RPC
-P Get password policy information via RPC
-O Get OS information via RPC
-L Get additional domain info via LDAP/LDAPS (for DCs only)
-I Get printer information via RPC
-R [BULK_SIZE] Enumerate users via RID cycling. Optionally, specifies lookup request size.
-N Do an NetBIOS names lookup (similar to nbtstat) and try to retrieve workgroup from output
-w DOMAIN Specify workgroup/domain manually (usually found automatically)
-u USER Specify username to use (default "")
-p PW Specify password to use (default "")
-K TICKET_FILE Try to authenticate with Kerberos, only useful in Active Directory environment (Note: DNS must be setup correctly for this option to work)
-H NTHASH Try to authenticate with hash
--local-auth Authenticate locally to target
-d Get detailed information for users and groups, applies to -U, -G and -R
-k USERS User(s) that exists on remote system (default: administrator,guest,krbtgt,domain admins,root,bin,none). Used to get sid with "lookupsids"
-r RANGES RID ranges to enumerate (default: 500-550,1000-1050)
-s SHARES_FILE Brute force guessing for shares
-t TIMEOUT Sets connection timeout in seconds (default: 10s)
-v Verbose, show full samba tools commands being run (net, rpcclient, etc.)
--keep Don't delete the Samba configuration file created during tool run after enumeration (useful with -v)
-oJ OUT_JSON_FILE Writes output to JSON file (extension is added automatically)
-oY OUT_YAML_FILE Writes output to YAML file (extension is added automatically)
-oA OUT_FILE Writes output to YAML and JSON file (extensions are added automatically)
Есть несколько способов установки инструмента. Либо он поставляется в виде пакета в вашем дистрибутиве Linux, либо требуется ручная установка.
apt install enum4linux-ng
pacman -S enum4linux-ng
(проверено на NixOS 20.9)
nix-env -iA nixos.enum4linux-ng
Если ваш дистрибутив Linux не предоставляет пакета, можно использовать следующие методы ручной установки.
Инструмент использует клиентские утилиты Samba, а именно:
Они должны быть доступны во всех дистрибутивах Linux. Пакет обычно называется smbclient, samba-client или что-то подобное.
Кроме того, потребуются следующие пакеты Python:
Для более быстрой обработки YAML (опционально!) также установите (должна быть зависимостью PyYaml в большинстве дистрибутивов Linux):
Ниже приведены примеры установки для конкретных дистрибутивов Linux. Также возможны способы, не зависящие от дистрибутива (python pip, python virtual env и Docker).
Во всех приведённых ниже примерах LibYAML уже является зависимостью соответствующего пакета PyYaml и будет установлен автоматически.
pacman -S smbclient python-ldap3 python-yaml impacket
(проверено на Fedora Workstation 31)
dnf install samba-common-tools samba-client python3-ldap3 python3-pyyaml python3-impacket
(Для Ubuntu 18.04 и ниже используйте вариант с Docker или виртуальным окружением Python)
apt install smbclient python3-ldap3 python3-yaml python3-impacket
В зависимости от дистрибутива может потребоваться pip3 или pip:
pip install pyyaml ldap3 impacket
Альтернатива:
pip install -r requirements.txt
Не забудьте, что всё равно нужно установить утилиты Samba, как указано выше.
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
python3 -m venv venv
source venv/bin/activate
pip install wheel
pip install -r requirements.txt
Затем запуск:
python3 enum4linux-ng.py -As <target>
Не забудьте, что всё равно нужно установить утилиты Samba, как указано выше. Кроме того, каждый раз при открытии новой оболочки выполняйте source venv/bin/activate. Иначе будет использоваться интерпретатор Python системы с неправильными библиотеками, а не из виртуального окружения.
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
docker build . --tag enum4linux-ng
После завершения пример запуска может выглядеть так:
docker run -t enum4linux-ng -As <target>
Время от времени инструмент может выдавать сообщения об ошибках следующего вида:
Could not <some text here>, please open a GitHub issue
В таком случае перезапустите инструмент с опциями -v и --keep. Это позволит увидеть точную команду, вызвавшую ошибку. Скопируйте эту команду, выполните её в терминале и перенаправьте вывод в файл. Затем откройте issue на GitHub, вставив команду и приложив файл с выводом ошибки. Это поможет отладить проблему. Конечно, вы можете отладить её самостоятельно и отправить pull request.
Если инструмент оказался для вас полезным, буду рад, если вы поставите звёздочку!