コンテンツにスキップ

Impacket karmaSMB.py

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

クライアントが要求した共有名やファイル名に合わせてペイロードを返す、検証用の SMB サーバーを起動します。

項目内容
実装examples/karmaSMB.py
カテゴリSMB / MSRPC / NTLM
規模635 行
配布setup.py の scripts=examples/*.py によりスクリプトとしてインストール

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

引数説明
--helpshow this help message and exit
fileNamePathname’s contents to deliver to SMB clients
-configconfig file name to map extensions to files to deliver. For those extensions not present, pathname will be delivered
-smb2supportSMB2 Support (experimental!)
-tsAdds timestamp to every logging output
-debugTurn DEBUG output ON

config と default file、extension mapping を読み、SimpleSMBServer の SMB1/SMB2 handler を command 単位で差し替えます。tree connect/create/query/read request を観察し、requested path に合う local file を仮想 share として提供します。server は停止されるまで待機します。

通常の SMB server は設定済み share/path だけを公開しますが、KarmaSMB は client が要求した share/file 名を観察し、extension mapping または default file に基づいて応答内容を差し替えます。これは SMB client の自動取得動作を 検証するため、server command handler を SMB1/SMB2 の両方で置換しています。

tree connect では任意 share を受け入れる仮想的な mapping を作り、create/open では requested path を正規化して返す local file を選びます。read は handle に 対応する file と offset/length から byte 列を返し、query directory/basic info は client が次の処理へ進める metadata を構築します。名前だけ差し替えても size、attributes、end-of-file が一致しなければ client は正常に読めません。

server state には session、tree ID、file ID と local file handle の対応が あります。別 client の handle を共有しないこと、.. や separator を含む path を local 任意 file へ解決しないこと、SMB2 compound request でも response ID を保つことが重要です。default file と extension config の優先順位も protocol handler 間で統一します。

シンボル位置責務を追う入口
KarmaSMBServer77__init__()、findFirst2()、smbComNtCreateAndX()、queryPathInformation()、smb2Read()、smb2Close()、smb2Create()、smb2QueryDirectory()、smb2TreeConnect()、smbComTreeConnectAndX()、run()、setDefaultFile() ほか
モジュール使用する主な名前
impacket.exampleslogger
impacketsmb, smbserver, version
impacket.smb3structs*
impacket.smbFILE_APPEND_DATA, FILE_OVERWRITE, FILE_OVERWRITE_IF, FILE_WRITE_DATA, GENERIC_WRITE
impacket.nt_errorsSTATUS_ACCESS_DENIED, STATUS_NO_MORE_FILES, STATUS_OBJECT_PATH_NOT_FOUND, STATUS_SUCCESS, STATUS_USER_SESSION_DELETED
impacket.smbserverSRVSServer, STATUS_SMB_BAD_TID, decodeSMBString, encodeSMBString, findFirst2, queryPathInformation
  • 照会や認証の試行が中心です。実行回数が多いと監査ログやアカウントロック、対象の負荷に影響します。
  • 待受 socket または長時間 loop を開始します。bind address、port、停止方法、同時接続時の共有状態を確認してください。
  • 失敗時は、名前解決、接続、認証、サービスの状態、権限のどこで止まったかを、プロトコルのステータスから切り分けます。
  • 後始末に関係する実装として smb2Close() があります。新しい早期 return や例外経路でも到達するか確認します。
  • 停止要求、client 切断、partial read/write、worker 例外で listener 全体が不整合にならないことを確認します。

impacket.smbserver と SMB1/SMB2 structures に依存します。KarmaSMBServer の protocol handler が中心で、path 正規化、file size/offset、handle lifecycle を両 dialect で揃える必要があります。