enum4linuxの後継として開発された次世代のSMB情報収集ツール
- enum4linux-ng -
本記事では、enum4linux-ngの使い方について、インストール手順からコマンドの実行方法、オプション一覧を徹底解説!Kali LinuxだけでなくUbuntu(Docker環境)での構築手順も掲載しているため、幅広い環境に対応しています。
また、旧ツール(enum4linux)との違いや比較実演も掲載しているため、ツール選定の参考にもなります。
enum4linux-ngとは
enum4linux-ngは、WindowsおよびSambaホストに対してSMB(Server Message Block)プロトコルを通じた情報収集を行うオープンソースツールです。主に脆弱性診断やペネトレーションテストにおいて、対象ホストの構成情報を把握する目的で使用されます。
内部的にはsmbclient、rpcclient、nmblookupなど複数のコマンドを統合的に利用し、それらの結果を整理・可視化する役割を担います。
enum4linux-ngは、enum4linuxの後継としてcddmp氏によって開発され、ソースコードはGitHubにて公開されています。
主な用途
診断対象のWindowsサーバやSambaが稼働しているホストに対して、取得可能な情報を列挙することが主な目的です。
- ユーザー・グループ情報:対象ホストに存在するローカルユーザーやグループの一覧取得
- 共有フォルダ:SMB共有フォルダの名前やアクセス権限の確認
- OSおよびドメイン情報:OSバージョン、ドメイン名、ワークグループ名などの基本情報の把握
- パスワードポリシー:最小パスワード長やアカウントロックアウトのしきい値など
- RID Brute Force:RID(Relative Identifier)を総当たりしてユーザーを特定
- LDAP情報:Active Directory環境においてLDAPを通じた追加情報の収集
- NetBIOS情報:NetBIOS名やMACアドレスなどの収集
主な特徴
| 特徴 | 説明 |
|---|---|
| Python3による実装 | Pythonベースで動作し、依存ライブラリも明確に管理されている |
| YAML / JSONでの出力対応 | スキャン結果をYAMLまたはJSON形式で出力できるため、他ツールとの連携や自動化に適している |
| LDAP対応 | LDAPおよびLDAPS(LDAP over SSL)による情報収集に対応 |
| Kerberos対応 | Kerberos認証を使用した接続が可能 |
| カラー出力 | ターミナル上での視認性を高めるカラー出力に対応 |
特に、YAML/JSON出力への対応は実務上のメリットが大きく、CI/CDパイプラインへの組み込みや、診断レポートの自動生成に活用できます。
旧ツール(enum4linux)との違い
| 比較項目 | enum4linux(旧) | enum4linux-ng(新) |
|---|---|---|
| 実装言語 | Perl | Python 3 |
| 出力形式 | テキスト形式のみ | テキスト / YAML / JSON |
| Kerberos対応 | 非対応 | 対応 |
| メンテナンス状況 | 停止 | 現在も継続中 |
| Kali Linuxの対応状況 | プリインストール | 公式リポジトリに収録 |
enum4linuxは、Windows向けツールであるenum.exeの思想をベースに、Mark Lowe氏によって開発されました。Kali Linuxにプリインストールされ、セキュリティ診断における標準的なツールとして広く利用されてきましたが、現在は開発が停止しています。
注意事項
enum4linux-ngを使用する際は、以下の点に十分注意してください。
許可を得ていない環境では使用しない
必ず許可を得た環境に対してのみ使用してください。許可のないシステムに対して実行することは、不正アクセス禁止法をはじめとする関連法規に抵触する可能性があります。
出力情報の適切な管理
スキャン結果には、ユーザー名・グループ名・パスワードポリシーなどの機密性の高い情報が含まれる場合があります。YAML/JSON形式で出力したファイルについては、アクセス権限の設定や暗号化など、適切な情報管理を徹底してください。
enum4linux-ngのインストール
enum4linux-ngは、主要なLinuxディストリビューションで利用可能です。本記事では、Kali Linux(APTパッケージ)とUbuntu(Docker)のインストール手順を解説します。
Kali Linuxの場合
Kali Linuxでは、公式のAPTリポジトリにenum4linux-ngパッケージが収録されているため、パッケージマネージャーを使って簡単にインストールできます。
パッケージリストの更新
$ sudo apt updateまず、ローカルのパッケージリストを最新の状態に更新します。これにより、最新バージョンのenum4linux-ngパッケージを取得できるようになります。
パッケージ情報の確認
$ apt show enum4linux-ng
Package: enum4linux-ng
Version: 1.3.10-0kali1
Priority: optional
Section: utils
Maintainer: Kali Developers <devel@kali.org>
Installed-Size: 198 kB
Depends: python3, python3-impacket, python3-ldap3, python3-yaml, smbclient, samba-common-bin
Homepage: https://github.com/cddmp/enum4linux-ng
Download-Size: 35.8 kB
APT-Sources: http://http.kali.org/kali kali-rolling/main amd64 Packages
Description: Next generation version of enum4linux
Next generation version of enum4linux (a Windows/Samba enumeration tool) with
additional features like JSON/YAML export. Aimed for security professionals and
CTF players.インストールの前に、パッケージの詳細情報を確認します。
Version:使用バージョンDepends:依存パッケージ(例:Python3、Samba関連ツール)Description:ツールの概要
Dependsフィールドに記載されている依存パッケージは、apt install実行時に自動的にインストールされます。
インストール状況の確認
$ apt list --installed | grep enum4linux-ng
〜 出力なし 〜
# インストール済みの場合の実行結果
enum4linux-ng/kali-rolling,now 1.3.10-0kali1 all [インストール済み]enum4linux-ngパッケージがインストールされていないことを確認します。
enum4linux-ngのインストール
$ sudo apt install enum4linux-ngインストールを実行します。依存パッケージも含めて自動的にインストールされます。(当サイトの検証環境では、10秒程度でインストールを完了しました。)
実行ファイルのパス確認
$ which enum4linux-ng
/usr/bin/enum4linux-ng実行ファイルの配置場所を確認します。
アプリケーションメニューにも配置されます。
09-Discovery>Network Share Discovery>enum4linux-ng

Ubuntuの場合
UbuntuのAPTリポジトリには、enum4linux-ngパッケージが収録されていません。そのため、GitHubからソースコードを取得し、Dockerコンテナ上で実行します。
Dockerを用いた環境構築は依存関係の衝突を回避できるため、検証用途に適しています。
Ubuntu環境にDockerがインストール済みであること。
※まだインストールしていない場合は、UbuntuにDockerをインストールするを参照ください。
ソースコード取得
$ git clone https://github.com/cddmp/enum4linux-ngまず、enum4linux-ngの公式GitHubリポジトリからソースコードをクローンします。実行後、カレントディレクトリにenum4linux-ngというディレクトリが作成されます。
ディレクトリ移動
$ cd enum4linux-ngリポジトリのルートディレクトリに移動します。(ディレクトリ内にはDockerfileが含まれており、このファイルをもとにDockerイメージをビルドします。)
Dockerイメージのビルド
$ sudo docker build . --tag enum4linux-ngenum4linux-ngのDockerイメージをビルドします。(当サイトの検証環境では、4分程度でビルドを完了しました。)
作成したDockerイメージを確認
$ sudo docker image ls | grep enum4linux-ng
enum4linux-ng:latest 4edd73342159 1.54GB 404MBビルドが完了したら、イメージが正しく作成されたか確認します。
Docker環境に構築したenum4linux-ngを実行する場合、docker runコマンドを使用します。
$ sudo docker run -t enum4linux-ng -As <ターゲットホスト>基本的な使い方
コマンド構文
$ enum4linux-ng [オプション] <ターゲットホスト>最も基本的な実行方法
$ enum4linux-ng 192.0.2.1最もシンプルな実行方法は、オプションを指定せずに対象ホストだけを指定する方法です。列挙オプションを指定しない場合、自動的に-Aオプションが適用されます。
-Aオプションは、ユーザー、グループ、SMB共有、パスワードポリシー、OS情報、NetBIOS名、プリンタ情報、LDAP経由の追加ドメイン情報をまとめて列挙します。
匿名接続と認証接続
# 匿名接続(NULLセッション)
$ enum4linux-ng 192.0.2.1
# 認証情報を使った接続
$ enum4linux-ng -u <ユーザー名> -p <パスワード> 192.0.2.1enum4linux-ngはデフォルトで匿名接続(Nullセッション)を試みます。認証情報をお持ちの場合、-uおよび-pオプションを指定することにより、より多くの情報を取得できます。
ユーザー名・パスワードともに空の状態でSMB接続を試みる手法。
スキャン結果をファイルに出力する
-oJ:JSON形式-oY:YAML形式-oA:JSONとYAMLで両方を出力
旧版(enum4linux)とは異なり、enum4linux-ngではスキャン結果のファイル出力に対応しています。
# YAML形式で出力
$ enum4linux-ng -oY ./result 192.0.2.1
# JSON形式で出力
$ enum4linux-ng -oJ ./result 192.0.2.1
# JSONとYAMLで両方を出力
$ enum4linux-ng -oA ./result 192.0.2.1上記コマンドを実行すると、result.yamlやresult.jsonという名前のファイルがカレントディレクトリに生成されます。(拡張子は自動付与されます。)
当サイトの検証環境では、ファイル名(result)だけを指定すると以下のエラーになるため、出力先ディレクトリ(./result)を明示的に指定しました。
$ enum4linux-ng -A -oY result 192.0.2.1
[!] The given output directory does not existオプション一覧
$ enum4linux-ng -h
ENUM4LINUX - next generation (v1.3.10)
usage: enum4linux-ng [-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 specify the lookup request size (BULK_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)-h,--help:ヘルプメッセージを表示-A:すべてを対象に列挙(-U -G -S -P -O -N -I -L と同じ)-As:NetBIOS名前解決を除くすべての列挙(-U -G -S -P -O -I -L と同じ)-U:ユーザーを取得-G:グループを取得-Gm:グループとそのメンバーを取得-S:共有情報を取得-C:サービス情報を取得-P:パスワードポリシーを取得-O:OS情報を取得-L:LDAP/LDAPS経由で追加のドメイン情報を取得(DCのみ)-I:プリンター情報を取得-R BULK_SIZE(任意):RIDサイクリングによるユーザー列挙(リクエストサイズを指定可能)-N:NetBIOS名前解決を実行し、ワークグループを取得-w DOMAIN:ワークグループ/ドメインを指定(通常は自動検出)-u USER:ユーザー名を指定(デフォルト:空文字)-p PW:パスワードを指定(デフォルト:空文字)-K TICKET_FILE:Kerberos認証(Active Directory環境でのみ有効)-H NTHASH:ハッシュで認証--local-auth:ターゲットに対してローカル認証を行う-d:ユーザーとグループの詳細情報を取得(-U、-G、-Rと組み合わせて使用)-k USERS:リモートシステムに存在するユーザー名を指定(デフォルト:administrator,guest,krbtgt,domain admins,root,bin,none)-r RANGES:列挙するRIDの範囲(デフォルト:500-550、1000-1050)-s SHARES_FILE:共有名のブルートフォース用リストファイル-t TIMEOUT:接続タイムアウト(秒単位) ※デフォルト:10秒-v:冗長モード(実行中のコマンドを表示)--keep:実行中に生成されるSamba設定ファイルを削除せず保持-oJ OUT_JSON_FILE:実行結果をJSONファイルに出力(拡張子は自動付与)-oY OUT_YAML_FILE:実行結果をYAMLファイルに出力(拡張子は自動付与)-oA OUT_FILE:実行結果をYAMLとJSONの両方で出力(拡張子は自動付与)
【比較実演】同じターゲットにenum4linux-ngを実行する
このセクションでは、実際にKali LinuxからMetasploitable2に対してenum4linux-ngを実行し、SMB関連の情報収集を行います。Metasploitable2は学習・検証目的で設計された脆弱な仮想マシンで、本検証は外部ネットワークから隔離したローカル環境内で実施します。
- enum4linux-ng実行マシン
- Kali Linux 2026.1
- enum4linux-ng v1.3.10
- 診断対象マシン
- Metasploitable2
- 192.168.10.101
- ネットワークアダプター
- ホストオンリーアダプター
Kali Linux、およびMetasploitable2は、Windows環境のVirtualBox上で稼働しています。
Kali Linuxでenum4linux-ngコマンドを実行する
$ enum4linux-ng -S 192.168.10.101
ENUM4LINUX - next generation (v1.3.10)
==========================
| Target Information |
==========================
[*] Target ........... 192.168.10.101
[*] Username ......... ''
[*] Random Username .. 'ndstgwav'
[*] Password ......... ''
[*] Timeout .......... 10 second(s)
=======================================
| Listener Scan on 192.168.10.101 |
=======================================
[*] Checking SMB
[+] SMB is accessible on 445/tcp
[*] Checking SMB over NetBIOS
[+] SMB over NetBIOS is accessible on 139/tcp
===========================================
| SMB Dialect Check on 192.168.10.101 |
===========================================
[*] Trying on 445/tcp
[+] Supported dialects and settings:
Supported dialects:
SMB 1.0: true
SMB 2.0.2: false
SMB 2.1: false
SMB 3.0: false
SMB 3.1.1: false
Preferred dialect: SMB 1.0
SMB1 only: true
SMB signing required: false
[*] Enforcing legacy SMBv1 for further enumeration
=============================================================
| Domain Information via SMB session for 192.168.10.101 |
=============================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found domain information via SMB
NetBIOS computer name: METASPLOITABLE
NetBIOS domain name: ''
DNS domain: localdomain
FQDN: metasploitable.localdomain
Derived membership: workgroup member
Derived domain: unknown
===========================================
| RPC Session Check on 192.168.10.101 |
===========================================
[*] Check for anonymous access (null session)
[+] Server allows authentication via username '' and password ''
[*] Check for guest access
[-] Could not establish guest session: STATUS_LOGON_FAILURE
=====================================================
| Domain Information via RPC for 192.168.10.101 |
=====================================================
[+] Domain: WORKGROUP
[+] Domain SID: NULL SID
[+] Membership: workgroup member
========================================
| Shares via RPC on 192.168.10.101 |
========================================
[*] Enumerating shares
[+] Found 5 share(s):
ADMIN$:
comment: IPC Service (metasploitable server (Samba 3.0.20-Debian))
type: IPC
IPC$:
comment: IPC Service (metasploitable server (Samba 3.0.20-Debian))
type: IPC
opt:
comment: ''
type: Disk
print$:
comment: Printer Drivers
type: Disk
tmp:
comment: oh noes!
type: Disk
[*] Testing share ADMIN$
[+] Mapping: DENIED, Listing: N/A
[*] Testing share IPC$
[+] Mapping: OK, Listing: NOT SUPPORTED
[*] Testing share opt
[+] Mapping: DENIED, Listing: N/A
[*] Testing share print$
[+] Mapping: DENIED, Listing: N/A
[*] Testing share tmp
[+] Mapping: OK, Listing: OK
Completed after 0.51 seconds以下の記事では、同じターゲットに対して実施したenum4linuxコマンドの実行結果を掲載しています。あわせてご覧ください。

