Impacket atexec.py
Task Scheduler の RPC を使って一時タスクを登録し、対象の Windows ホストでコマンドを実行します。
| 項目 | 内容 |
|---|---|
| 実装 | examples/atexec.py |
| カテゴリ | リモート実行 / WMI / サービス |
| 規模 | 339 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”オプションの最新の定義は python examples/atexec.py -h で確認できます。
| 引数 | 説明 |
|---|---|
target | [[domain/]username[:password]@] |
command | command to execute at the target |
-session-id | an existed logon session to use (no output, no cmd.exe) |
-ts | adds timestamp to every logging output |
-silentcommand | does not execute cmd.exe to run given command (no output) |
-overflow | タスク XML の Author を 4,000 byte にし、Security Event 4698 の記録に影響を与えます。-author-log とは同時に指定できません。 |
-author-log | タスク XML の Author に指定値を入れ、Security Event 4698 の Author フィールドに影響を与えます。-overflow とは同時に指定できません。 |
-debug | Turn DEBUG output ON |
-codec | 実行時の値を使って動的に生成される help |
-hashes | NTLM hashes, format is LMHASH:NTHASH |
-no-pass | don’t ask for password (useful for -k) |
-k | Use 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 |
-aesKey | AES key to use for Kerberos Authentication (128 or 256 bits) |
-dc-ip | IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameter |
-keytab | Read keys for SPN from keytab file |
詳細な処理フロー
Section titled “詳細な処理フロー”SMB/RPC transport を作って TSCH interface へ bind し、ランダム名の XML task を登録・実行します。出力取得が有効なら command の stdout/stderr を共有上の一時ファイルへ redirect し、SMB で読み戻します。完了または失敗後に task と一時ファイルを削除します。
仕組みの詳細
Section titled “仕組みの詳細”この方式では常駐 agent を転送せず、Windows Task Scheduler の RPC interface
を制御面として使います。play() は DCE/RPC transport を作り、TSCH interface
へ bind した後、ランダムな task 名と実行 command を含む XML definition を
組み立てます。登録、実行、完了確認はそれぞれ別の RPC operation です。
出力を取得する場合、実際に登録する command line には stdout/stderr を
ADMIN$ 等の一時 file へ redirect する wrapper が加わります。task 実行後、
SMB 経由でその file を繰り返し開き、share violation や file 未生成を
「まだ完了していない状態」として一定時間待ちます。-silentcommand はこの
出力回収を行わず、task start までで処理を終えます。
task 登録に成功して実行前に失敗する場合もあるため、削除は成功経路だけの 末尾処理では不十分です。task と出力 file は別 resource なので、それぞれの 存在を確認して回収します。session-id 指定は interactive session での実行条件 を変えるため、XML schema と scheduler version の差も考慮します。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
TSCH_EXEC | 45 | __init__()、play()、doStuff() |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket.examples | logger |
impacket | version |
impacket.dcerpc.v5 | transport, tsch |
impacket.dcerpc.v5.dtypes | NULL |
impacket.dcerpc.v5.rpcrt | RPC_C_AUTHN_GSS_NEGOTIATE, RPC_C_AUTHN_LEVEL_PKT_PRIVACY |
impacket.examples.utils | parse_target |
impacket.krb5.keytab | Keytab |
外部パッケージ(直接使用)
Section titled “外部パッケージ(直接使用)”| import 名 | 配布パッケージ | 経路・宣言状態 |
|---|---|---|
six | six | 直接 import、宣言済み |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 対象の状態を変更する操作があります。変更前に対象名や SID、パスを確認してください。
- remote service、task、file、share、WMI/RPC resource などの一時資源を利用する経路があります。異常終了時の回収も動作契約です。
失敗経路と後始末
Section titled “失敗経路と後始末”- 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
- 明示的な cleanup 名がなくても
finally相当の経路と protocol handle の close/delete を確認します。
実装を変更するとき
Section titled “実装を変更するとき”dcerpc.v5.tsch / transport、Kerberos keytab、共通 target parser に依存します。TSCH_EXEC.play() と doStuff() が orchestration を担います。polling、session-id、silent command の分岐と cleanup を変更時に確認してください。
- 構文:
python -m py_compile examples/atexec.py - CLI:
python examples/atexec.py -h - 関連テスト:
tests/SMB_RPC/test_rpcrt.py - 関連テスト:
tests/misc/test_dcerpc_v5_ndr.py

