コンテンツにスキップ

Impacket addcomputer.py

カテゴリ目次へ戻る / コマンド全体目次へ戻る

ドメインの computer account を作成・削除・確認します。SAMR、LDAPS に加え、 SAMR で作成したアカウントや既存アカウントの LDAP 属性を設定できます。

項目内容
実装examples/addcomputer.py
カテゴリActive Directory / LDAP / アカウント管理
規模498 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

オプションの最新の定義は python examples/addcomputer.py -h で確認できます。

引数説明
-domain-netbiosドメインの NetBIOS 名。DC が複数のドメインを扱う場合に指定します。
-computer-name追加する computer account の名前。省略時はランダムに生成します。
-computer-pass設定するパスワード。省略時はランダムに生成します。
-no-add新規作成せず、既存の computer account のパスワードだけを設定します。
-delete既存の computer account を削除します。
-tsログに時刻を付けます。
-debugデバッグログを有効にします。
-method操作方式。SAMR_LDAP は SAMR 作成後に LDAP 属性を設定し、LDAP_FINALIZE は既存アカウントの属性を設定します。選択肢は SAMR、SAMR_LDAP、LDAPS、LDAP_FINALIZE で、既定は SAMR です。
-port接続先ポート。139、445、636 を指定でき、SAMR は 445、LDAPS は 636 が既定です。
-baseDNLDAP の base DN。省略時は指定したアカウントのドメインから決めます。
-computer-groupcomputer account の配置先。省略時は CN=Computers です。
-hashesNTLM ハッシュを LMHASH:NTHASH 形式で渡します。
-no-passパスワードの対話入力を省きます。
-kKerberos 認証を使います。ccache に資格情報がなければ、コマンドラインで指定した値を使います。
-aesKeyKerberos 認証に使う 128/256 ビットの AES 鍵。
-dc-host接続する Domain Controller のホスト名。省略時はアカウントのドメインから決めます。
-dc-ip接続する Domain Controller の IP アドレス。
account認証に使う [domain/]username[:password] 形式のアカウント。

引数から account、DC、computer 名/パスワードを決定し、-method により run_samr()、run_ldaps()、LDAPFinalizeComputerAccount() へ分岐します。 SAMR_LDAP は run_samr() で作成した後に LDAP 属性を設定します。名前未指定時はランダム名を生成します。

computer account の作成は SAMR と LDAPS の二経路で実装されています。SAMR 経路は RPC で domain handle を開き、machine account 用の account type と 初期 password を設定します。LDAPS 経路は directory object を add し、 sAMAccountName、userAccountControl、DNS host 名などの属性を設定します。 同じ「追加」でも server 側で通る authorization check と必要 port が異なります。 SAMR_LDAP は作成後に LDAPFinalizeComputerAccount() で DNS host 名や SPN などを設定し、LDAP_FINALIZE は既存の computer account にこの設定だけを行います。

run() は action(追加、削除、存在確認)と -method を先に確定し、 それぞれの backend へ渡します。computer 名を省略した場合は末尾 $ を含む ランダムな名前を作り、password も未指定なら生成します。生成した値は後続処理 で必要になるため、ログへ不用意に露出させず、成功した object と対応する値だけを 利用者へ返す必要があります。

LDAP では object の配置先 DN と -computer-group、SAMR では domain NetBIOS 名と RID/domain handle が重要です。方式ごとに設定できる属性が異なるため、 作成後の属性、既存名の挙動、SAMR 作成後の LDAP 設定に失敗したときに残る object を確認します。

シンボル位置責務を追う入口
ADDCOMPUTER46__init__()、run_samr()、run_ldaps()、LDAPFinalizeComputerAccount()、LDAPComputerExists()、LDAPGetComputer()、generateComputerName()、doSAMRAdd()、run()
モジュール使用する主な名前
impacketversion
impacket.exampleslogger
impacket.examples.utilsinit_ldap_session, ldap3_kerberos_login, parse_identity
impacket.dcerpc.v5epm, samr, transport
impacket.spnegoSPNEGO_NegTokenInit, TypesMech
import 名配布パッケージ経路・宣言状態
ldap3ldap3直接 import、宣言済み
  • 対象の状態を変更する操作があります。変更前に対象名や SID、パスを確認してください。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

dcerpc.v5.samr / transport / epm、ldap3、examples.utils.init_ldap_session に依存します。操作分岐は ADDCOMPUTER に集約されています。既定 container、NetBIOS domain、LDAP base DN の扱いは二経路で同じ意味になるよう保ってください。