enum4linux-ng

Reconnaissance v1.3.10 · 20.02.2026 активный

Современная переработка enum4linux на Python — инструмент для перечисления информации с хостов Windows и Samba через протоколы SMB, RPC и LDAP. Незаменим при разведке Active Directory и внутренних сетей. Возможности: - Перечисление пользователей, групп, шар (shares) через SMB/RPC - LDAP-запросы к Domain Controller: объекты, атрибуты, политики - Определение OS, доменного имени, SID машины - Брутфорс RID для получения полного списка пользователей - Вывод в JSON/YAML для интеграции в пайплайны - Поддержка аутентификации (Kerberos, NTLM) и анонимного доступа - Значительно быстрее и надёжнее оригинального enum4linux

v1.3.10
20.02.2026 current
Добавлен 22.06.2026 · Обновлён 07.07.2026 · Reconnaissance
Установка
# pip:
pip install enum4linux-ng

# или из репозитория:
git clone https://github.com/cddmp/enum4linux-ng
cd enum4linux-ng
pip install -r requirements.txt

# Зависимости (для полного функционала):
sudo apt install samba-common-bin ldap-utils

# Примеры:
# Базовое перечисление:
enum4linux-ng 192.168.1.10

# С аутентификацией:
enum4linux-ng -u administrator -p Password123 192.168.1.10

# Только пользователи и группы:
enum4linux-ng -U -G 192.168.1.10

# LDAP + вывод в JSON:
enum4linux-ng -oJ result.json -l 192.168.1.10
переведено ИИ

enum4linux-ng

Следующее поколение 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. Идея заключается в том, чтобы другие инструменты могли импортировать результаты и обрабатывать их. Планируется добавление новых функций в будущем.

Возможности

  • поддержка экспорта в YAML и JSON
  • цветной вывод в консоль (может быть отключен через NO_COLOR)
  • нативная реализация ldapsearch и polenum
  • поддержка множества методов аутентификации
  • поддержка устаревших подключений SMBv1
  • автоматическое обнаружение поддержки подписи IPC
  • 'интеллектуальное' перечисление будет автоматически отключать тесты, которые в противном случае завершились бы ошибкой
  • поддержка тайм-аутов
  • проверка диалектов SMB
  • поддержка IPv6 (экспериментальная)

Отличия

Некоторые вещи реализованы иначе по сравнению с оригинальным enum4linux. Вот основные отличия: - участники групп по умолчанию не перечисляются, эту опцию можно включить с помощью -Gm - перебор RID не является частью перечисления по умолчанию (-A), но может быть включен с помощью -R - перебор RID может выполняться быстрее за счет группировки нескольких поисков SID в одном вызове rpcclient - имена параметров немного отличаются (например, -A вместо -a)

Благодарности

Я хотел бы поблагодарить и выразить признательность сотрудникам бывшей компании Portcullis Labs (ныне Cisco CX Security Labs), в частности: - Марку Лоу за создание оригинального 'enum4linux.pl' (https://github.com/CiscoCXSecurity/enum4linux) - Ричарду 'deanx' Дину за создание оригинального 'polenum' (https://labs.portcullis.co.uk/tools/polenum/)

Кроме того, я хотел бы поблагодарить и выразить признательность: - Крейгу 'Wh1t3Fox' Весту за его форк 'polenum' (https://github.com/Wh1t3Fox/polenum)

Чтение вашего кода доставило мне массу удовольствия! :)

И последнее, но не менее важное: я хотел бы поблагодарить всех, кто внёс свой вклад в код, сообщал об ошибках и давал полезные рекомендации по улучшению инструмента.

Юридическое примечание

Если вы используете этот инструмент: не используйте его в незаконных целях.

Запуск

Пример запуска может выглядеть так:

enum4linux-ng.py -As <target> -oY out

Демо

Windows Server 2012 R2

Это демонстрация запуска на стандартной установке 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, которые обычно входят в перечисление по умолчанию.

Demo

Metasploitable 2

Во втором примере показан запуск на Metasploitable 2. Используется следующая команда:

enum4linux-ng.py 192.168.125.145 -A -C

На этот раз используются опции -A и -C. Первая работает аналогично опции -a в enum4linux, вторая включает перечисление служб. Учетные данные не предоставлялись. Инструмент автоматически определяет, что необходимо использовать SMBv1. Файлы YAML или JSON не создаются. Снова я прокручиваю вверх для наглядности результатов.

Demo

Использование

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, либо его необходимо устанавливать вручную.

Kali Linux

apt install enum4linux-ng 

Archstrike

pacman -S enum4linux-ng

NixOS

(проверено на NixOS 20.9)

nix-env -iA nixos.enum4linux-ng

Ручная установка

Если ваш дистрибутив Linux не предлагает пакет, можно использовать следующие методы ручной установки.

Зависимости

Инструмент использует клиентские утилиты Samba, а именно: - nmblookup - net - rpcclient - smbclient

Они должны быть доступны для всех дистрибутивов Linux. Пакет обычно называется smbclient, samba-client или что-то подобное.

Кроме того, вам понадобятся следующие Python-пакеты: - ldap3 - PyYaml - impacket

Для более быстрой обработки YAML (по желанию!) также установите (обычно является зависимостью для PyYaml в большинстве дистрибутивов Linux): - LibYAML

Ниже приведены примеры установки для конкретных дистрибутивов Linux. Альтернативно возможны способы, не зависящие от дистрибутива (python pip, виртуальная среда python и Docker).

Специфичные для дистрибутива Linux

Для всех приведенных ниже примеров дистрибутивов LibYAML уже является зависимостью соответствующего пакета PyYaml и поэтому будет установлен автоматически.

ArchLinux

pacman -S smbclient python-ldap3 python-yaml impacket

Fedora/CentOS/RHEL

(проверено на Fedora Workstation 31)

dnf install samba-common-tools samba-client python3-ldap3 python3-pyyaml python3-impacket

Debian/Ubuntu/Linux Mint

(Для Ubuntu 18.04 или ниже используйте вариант Docker или виртуальную среду Python)

apt install smbclient python3-ldap3 python3-yaml python3-impacket

Независимые от дистрибутива Linux

Python pip

В зависимости от дистрибутива Linux может понадобиться pip3 или pip:

pip install pyyaml ldap3 impacket

Альтернатива:

pip install -r requirements.txt

Помните, что инструменты Samba, упомянутые выше, все еще необходимо установить отдельно.

Виртуальная среда Python

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 с неправильными библиотеками (системный, а не из виртуальной среды).

Docker

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.

Если инструмент оказался для вас полезным, я буду рад, если вы поставите звездочку!

Комментарии
Войдите, чтобы оставить комментарий