コンテンツにスキップ

Impacket samedit.py

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

ローカルの SAM hive にあるユーザーのパスワードハッシュを直接変更します。SYSTEM hive または指定した boot key を使います。

項目内容
実装examples/samedit.py
カテゴリ秘密情報 / DPAPI / レジストリ / ファイル解析
規模121 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

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

引数説明
userName of the user account to replace the password
samSAM hive file to edit
-passwordNew password to be set
-hashesReplace NTLM hash directly (LM hash is optional)
-systemSYSTEM hive file containing the bootkey for password encryption
-bootkeyBootkey used to encrypt and decrypt SAM passwords
-debugTurn DEBUG output ON
-tsAdds timestamp to every logging output

SAM と SYSTEM/bootkey を開き、LocalOperations が boot key を解決します。SAMHashes が user record/RID を見つけ、password または LM:NT hash を account 固有形式へ暗号化して hive cell を更新します。

SAM user record の password field は平文でも単純な NT hash でもなく、boot key、 SAM domain key、user RID を使う層で保護されています。このコマンドは local SAM hive と SYSTEM hive または明示 boot key を開き、既存 user record の 暗号形式/version を確認して新しい hash を同じ形式で書き戻します。

password 入力の場合は LM/NT one-way function を計算し、hash 入力の場合は 指定値を直接 account hash として扱います。その後 RID 由来 key と SAM key で record field を暗号化します。LM hash を無効値にするか、history/長さ field を どう扱うかは Windows version の record layout と整合する必要があります。

in-place edit なので、parse 成功前や record size 確定前に file を更新しては いけません。対象 user の一意性、SAM/SYSTEM の組み合わせ、backup、write 後の 再 parse を確認します。transactional writer ではないため、途中 write failure で hive を壊さないよう更新範囲を最小化することが重要です。

シンボル位置責務を追う入口
module-level entry1トップレベルで引数解析と処理を実行
モジュール使用する主な名前
impacketntlm, version
impacket.exampleslogger
impacket.examples.secretsdumpLocalOperations, SAMHashes
  • 対象の状態を変更する操作があります。変更前に対象名や SID、パスを確認してください。
  • 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。

examples.secretsdump.LocalOperations / SAMHashes、impacket.ntlm に依存します。これは破壊的な local file 更新なので、record size、hash 無効化規則、例外時の partial write を重点的にテストします。

  • 構文: python -m py_compile examples/samedit.py
  • CLI: python examples/samedit.py -h
  • このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。