Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
LDAPPER — 面倒な要素を排除したLDAPクエリ | Kitploit
ツール/GitHubGitHub/shellster/ldapper
特権昇格偵察パスワード攻撃情報収集ペネトレーションテスト認証
GitHubshellster/ldapper

LDAPPER

面倒な要素を排除したLDAPクエリ

リポジトリを見る
114171年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

はじめに

このツールは、ldapsearchやADとのインタラクション全般で私が経験した多くの問題を解決するために作成されました。特に、以下の問題に対処しています。

  1. ADから1000件以上の結果を返せない。このツールはLDAPレコードのページングをサポートし、他のADのバグを回避して、任意の数のレコードを取得できるようにします。

  2. NTLM資格情報を直感的な方法で認証に使用できない。NETBIOSドメイン名、ユーザー名、パスワードを指定してWindows DCに認証できます。

  3. 返されるレコード数、返される速度、一度に取得するレコード数を正確に制御できない。このツールでは、これらすべての項目を制御でき、ページング呼び出しごとに遅延を追加することもできます。さらに、ラウンドロビンクエリのために複数のDCを指定できます。

  4. 結果を読みやすい形式で返せない。このツールは現在、以下の3つの形式をサポートしています。

  • plain: サブアイテムがタブでインデントされた、読みやすいテキストバージョン。
  • json: JSON出力。読みやすくするために余分な空白を含みます。
  • json_tiny: すべての余分な空白を削除したJSON出力。
  1. 必要な属性のみを返せない。このツールでは、すべての属性を返すか、必要な属性のみを返すかを選択できます。

  2. よく使うクエリのプリセットリストを保存できない。

インストール

root@kitploit:~
git clone ...
pip install -r requirements.txt

使用方法

root@kitploit:~
# python3 ldapper.py
    usage: ldapper.py [-h] --domain DOMAIN --user USER --password PASSWORD
                      --server SERVER [--basedn BASEDN] --search SEARCH
                      [--maxrecords MAXRECORDS] [--pagesize PAGESIZE]
                      [--delay DELAY] [--format {plain,json,json_tiny}]
                      [--encryption {1,2,3}]
                      [--advanced [ADVANCED [ADVANCED ...]]] [--outfile OUTFILE]
                      [--engine {ldap3,impacket}]
                      [attribute [attribute ...]]

    AD LDAPコマンドライン検索ツール(使いやすいもの)。

    位置引数:
      attribute             返す属性(カスタムクエリの場合はデフォルトですべて。定型クエリの場合は、"*" を渡すとデフォルトの代わりにすべての属性を取得)

    オプション引数:
      -h, --help            このヘルプメッセージを表示して終了
      --domain DOMAIN, -D DOMAIN
                            ドメイン
      --user USER, -U USER  ユーザー名
      --password PASSWORD, -P PASSWORD
                            パスワード、または LM:NTLM 形式のハッシュ
      --server SERVER, -S SERVER
                            DCのIPまたは解決可能な名前
      --basedn BASEDN, -b BASEDN
                            ベースDN。通常は "dc=" で始まり、長いドメイン名のピリオドを ",dc=" に置き換えたもの。指定されない場合はLDAPサーバーから推測を試みる。
      --search SEARCH, -s SEARCH
                            LDAP検索文字列、または「カスタム検索」リストの番号(カスタム検索を示す)。stdinから読み込む場合は "-" を使用。
      --maxrecords MAXRECORDS, -m MAXRECORDS
                            返す最大レコード数(デフォルトは100)、0はすべて。
      --pagesize PAGESIZE, -p PAGESIZE
                            1回のプルで返すレコード数(デフォルトは10)。maxrecords以下である必要があります。
      --delay DELAY, -d DELAY
                            ページング要求間の遅延(ミリ秒)(デフォルトは0)。
      --format {plain,json,json_tiny}, -f {plain,json,json_tiny}
                            出力形式(デフォルトは "plain")。指定可能: plain, json, json_tiny
      --encryption {1,2,3}, -n {1,2,3}
                            3) ポート636 TLS接続(デフォルト); 2) ポート389 非TLS接続、ただしSTARTTLSを試行し、必要に応じてフォールバック(impacketでは使用不可); 1) ポート389接続、強制的に平文
      --advanced [ADVANCED [ADVANCED ...]], -a [ADVANCED [ADVANCED ...]]
                            追加入力を促す定型検索にオプションを渡す高度な方法(複数のプロンプトがある場合は、プロンプトの順に引数を渡す)
      --outfile OUTFILE, -o OUTFILE
                            出力ファイル(指定すると、出力はstdoutではなくここに送られます。[Windowsでのエンコードエラーを防げます])
      --engine {ldap3,impacket}, -e {ldap3,impacket}
                            使用するエンジンを選択(デフォルトは "ldap3")。OPSEC注意事項を参照!

    カスタム検索:
              1) 全ユーザー取得
                      1.1) 特定のユーザー取得(ユーザー名の入力を求められます)
              2) 全グループ(およびメンバー)取得
                      2.1) 特定のグループ取得(グループ名の入力を求められます)
              3) 全プリンター取得
              4) 全コンピューター取得
                      4.1) 特定のコンピューター取得(コンピューター名の入力を求められます)
              5) ドメイン/エンタープライズ管理者の取得
              6) ドメイン信頼の取得
              7) 制約なしSPN委任の検索(権限昇格の可能性)
              8) PreAuthが不要なアカウントの検索(ASREPROAST)
              9) ユーザーSPNの検索(KERBEROAST)
                      9.1) 特定のユーザーSPNの検索(ユーザープリンシパル名の入力を求められます)
             10) 表示可能な全LAPS LAパスワードを表示
                     10.1) 特定のワークステーションのLAPSパスワードを検索(ワークステーション名の入力を求められます)
            *11) よくある平文パスワード属性の検索(UserPassword、UnixUserPassword、unicodePwd、msSFU30Password)
             12) Quest Two-Factorシードをすべて表示(アクセス権がある場合)
             13) Oracle "orclCommonAttribute" SSOパスワードハッシュ
            *14) Oracle "userPassword" SSOパスワードハッシュ
             15) SCCMサーバー取得
             16) パスワードが不要なアカウントの検索(PasswordNotRequired)

    アスタリスクの付いた項目は、検証可能な環境でテストされたことがないため、動作するかどうかお知らせください。

例

これらの例では、以下を想定しています。

root@kitploit:~
NETBIOS NAME: EMP
FULL DOMAIN NAME: EXAMPLE.LOCAL
DC IPs: 10.0.0.2, 10.0.0.3
USERNAME: bob
PASSWORD: password

すべてのレコードを取得し、cn属性のみを返す:

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '(cn=*)' cn

特定のユーザーの詳細を取得(ユーザー名の入力を求められます):

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '1.1'

特定のユーザーの詳細を取得(ユーザー名を指定してプロンプトを回避):

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '1.1' -a 'alice'

上位100件のユーザーKerberos SPNを、一度に最大5件、各ページ要求の間に2秒の遅延を入れ、コンパクトなJSON形式で取得:

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 100 -p 5 -d 2000 -f json_tiny -s '(&(objectcategory=user)(serviceprincipalname=*))' serviceprincipalname userprincipalname

すべてのプリンターレコードを手動で取得し、すべての関連属性を表示:

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s '(objectClass=printQueue)'

制約なしSPN委任を簡単に検索:

root@kitploit:~
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0  -s 4

OPSEC警告

  1. Impacketエンジンを使用し、baseDNを指定しない場合、ツールはドメインコントローラーへのSMB認証と接続を試行し、ドメインのNETBIOS名を取得してbaseDNを導出します。この動作は、高度に監視された環境では検出される可能性があります。そのような環境ではImpacketを使用しないか、常にbaseDNを指定してください。

  2. Impacketは、完全なLDAPS接続または完全に暗号化されていない接続のいずれかを行います。現時点ではSTARTTLSを使用できないため、平文のLDAP接続が検出される可能性がある場合は、完全なTLS接続のみを試行するか、Impacketエンジンを使用しないでください。

  3. Impacketは、レコードの取得速度を細かく制御することはできません。そのため、"--delay"オプションは部分的にしか実装されていません。レコード取得の遅延が重要な場合は、Impacketエンジンを使用しないでください。

参考文献

Kerberoast: https://adsecurity.org/?p=2293

ASREPRoast: http://www.harmj0y.net/blog/activedirectory/roasting-as-reps/

Unconstrained Delegation Abuse: http://www.harmj0y.net/blog/activedirectory/the-most-dangerous-user-right-you-probably-have-never-heard-of/

Oracle nonsense: https://blogs.oracle.com/mwilcox/entry/clarifying_ovd-ad_eus_password and http://onlineappsdba.com/index.php/2014/03/03/what-hashing-algorithm-oid-uses-to-store-user-password-ssha-or-md5/

Qwest/Defender/Oneidentity 2nd Factor Token Data: http://support-public.cfm.quest.com/43565_Defender_5.9_AdminGuide.pdf

Common plaintext passwords: https://www.blackhillsinfosec.com/domain-goodness-learned-love-ad-explorer/

変更履歴

バージョン1.7

  1. @nyxgeek 提供の、パスワードが不要なアカウントのチェックを追加。

バージョン1.6

  1. LDAP3が常に機能するとは限らないため(Impacketも同様)、LDAP3の代替としてImpacketを追加。

  2. 複数LDAPサーバー選択機能を削除。この機能はあまり必要なく、Impacketにも実質存在しないため。

  3. すべてをリファクタリング。

バージョン1.5

  1. 一部のレコードが返されない可能性があるマイナーなページングバグを修正。

バージョン1.4

  1. SCCM検索機能を追加。

  2. 出力ファイルオプションを追加。

  3. いくつかの出力形式の問題を修正。

バージョン1.3

  1. LDAPクエリをstdinから受け取る機能を追加。

  2. ユーザーが括弧を付けていない場合、自動的にクエリを括弧で囲む。

  3. Python 2サポートのバグを修正。

今後の計画

よく使う列挙検索があれば、リストに追加できるようお知らせください。

  1. 以前取得したデータのオフライン検索/パーサーを作成する?

...

謝辞と連絡先

Shelby Spencer (shellster) 作成。バグや機能リクエストは連絡先まで。

ツールをダウンロード