コンテンツにスキップ

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

Kerberos kpasswd、SAMR、LDAP のいずれかを使い、本人によるパスワード変更または管理者によるリセットを行います。

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

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

引数説明
target[[domain/]username[:password]@]
-tsadds timestamp to every logging output
-debugturn DEBUG output ON
-newpassnew password
-newhashesnew NTLM hashes, format is NTHASH or LMHASH:NTHASH
-hashesNTLM hashes, format is NTHASH or LMHASH:NTHASH
-no-passDon’t ask for password (useful for Kerberos, -k)
-altuserAlternative username
-altpassAlternative password
-althash / -althashesAlternative NT hash, format is NTHASH or LMHASH:NTHASH
-protocol / -pProtocol to use for password change/reset(選択肢: smb-samr, rpc-samr, kpasswd, ldap、既定値: smb-samr)
-reset / -adminTry to reset the password with privileges (may bypass some password policies)
-kUse Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command line
-aesKeyAES key to use for Kerberos Authentication (128 or 256 bits)
-dc-ipIP Address of the domain controller, for Kerberos. If omitted it will use the domain part (FQDN) specified in the target parameter

parse_args() が対象資格情報、新 password/hash、代替管理資格情報を検証し、-protocol から KPassword、SmbPassword、RpcPassword、LdapPassword を選択します。PasswordHandler の共通インターフェースが change/set を分離し、各 backend が認証、対象解決、protocol 固有 request を実行します。

「password を変更する」と「password を reset する」は別操作です。change は 通常、対象本人の旧 credential を証明して新しい値へ移行します。reset は管理者 など別 principal の権限で対象 account の値を設定します。PasswordHandler はこの二つを changePassword() と setPassword() に分け、各 protocol backend が対応する wire operation を実装します。

Kerberos backend は kpasswd service へ AP-REQ を含む要求を送り、SAMR backend は SMB named pipe または TCP RPC 上で user handle/password method を選びます。 LDAP backend は対象 DN を検索し、TLS で保護された接続上の unicodePwd modify へ変換します。password と NT hash のどちらを受け取れるか、旧 credential が 必要かは backend ごとに違います。

-altuser 系は操作主体と変更対象を分離します。ここを一組の credential として 上書きすると、reset と self-change の意味が壊れます。また password policy 違反、旧 password 不一致、access denied、secure channel 不足は利用者が取る べき対応が異なるため、protocol 固有 status を保持したまま上位へ返します。

シンボル位置責務を追う入口
PasswordHandler137__init__()、changePassword()、setPassword()
KPassword251構造体/定数定義
SamrPassword321rpctransport()、authenticate()、connect()、hSamrOpenUser()、hSamrUnicodeChangePasswordUser2()、hSamrChangePasswordUser()、hSamrSetInformationUser()
RpcPassword566rpctransport()
SmbPassword591rpctransport()
LdapPassword596connect()、encodeLdapPassword()、findTargetDN()
parse_args()743モジュール関数
モジュール使用する主な名前
impacketversion
impacket.dcerpc.v5epm, samr, transport
impacket.krb5kerberosv5, kpasswd
impacket.ldapldap, ldapasn1
impacket.exampleslogger
impacket.examples.utilsEMPTY_LM_HASH, parse_target
import 名配布パッケージ経路・宣言状態
OpenSSLpyOpenSSL直接 import、宣言済み
  • 対象の状態を変更する操作があります。変更前に対象名や SID、パスを確認してください。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。

krb5.kpasswd / kerberosv5、dcerpc.v5.samr、ldap / ldapasn1、OpenSSL に依存します。reset と change は必要権限も wire operation も異なるため、共通化で意味を混ぜないことが重要です。