QNAP上で動作しているMariaDBをハックしたくなった。
QNAPでは、「App Center」からインストールするMariaDBとは別に、Multimedia Consoleなどを動かすとデータ格納用MariaDBが動作する。
私のQNAP TS-453Beでは以下のようなプロセスが動いている。
admin@qnap:/share/CACHEDEV1_DATA/$ ps aux | grep mariadb
4739 admin 2372 S grep mariadb
13340 admin 2328 S /bin/sh /usr/local/mariadb/bin/mysqld_safe --defaults-file=/usr/local/mariadb/my-mariadb.cnf --basedir=/usr/local/mariadb --datadir=/share/CACHEDEV1_DATA/.system/data --user=admin --default-storage-engine=MyISAM --wait_timeout=2628000 --pid-file=/var/lock/mariadb.pid --tmpdir=/share/CACHEDEV1_DATA/.system/tmp
21149 admin 2484 S /bin/sh /share/CACHEDEV1_DATA/.qpkg/MultimediaConsole/mariadb10/bin/mysqld_safe --defaults-file=/share/CACHEDEV1_DATA/.qpkg/MultimediaConsole/my.cnf --basedir=/share/CACHEDEV1_DATA/.qpkg/MultimediaConsole/mariadb10 --datadir=/share/CACHEDEV1_DATA/.system/data.m10 --tmpdir=/share/CACHEDEV1_DATA/.system/tmp.m10 --user=admin --default-storage-engine=InnoDB --wait_timeout=2628000 --pid-file=/var/lock/mariadb10_mmc.pid
21900 admin 2181748 S /share/CACHEDEV1_DATA/.qpkg/MultimediaConsole/mariadb10/bin/mariadbd --defaults-file=/share/CACHEDEV1_DATA/.qpkg/MultimediaConsole/my.cnf --basedir=/share/CACHEDEV1_DATA/.qpkg/MultimediaConsole/mariadb10 --datadir=/share/CACHEDEV1_DATA/.system/data.m10 --plugin-dir=/share/CACHEDEV1_DATA/.qpkg/MultimediaConsole/mariadb10/lib/plugin --user=admin --tmpdir=/share/CACHEDEV1_DATA/.system/tmp.m10 --default-storage-engine=InnoDB --wait_timeout=2628000 --log-error=/share/CACHEDEV1_DATA/.system/data.m10/qnap.err --pid-file=/var/lock/mariadb10_mmc.pid --socket=/tmp/mariadb10_mmc.sock --port=3310
mysql
が --port 3310
で動作していることが上記PS結果からわかる。
じゃあ、このMariaDBにアクセスできればMultimedia Consoleが保存しているデータを直接いじれちゃうよね?という話。
なんでこんなことやろうと思った?
共有フォルダ名をもとのディレクトリ名ごと変更したら、MultimediaConsoleで画像解析がゼロから再実行することになってめちゃくちゃ大変なことになってしまい、もしMultimediaConsoleのもとのデータベースをいじれればそういうこともなくなるのかな、という後学のためにハックしておくか、というのが事の発端。
ログインID/PWを調べるには?
QNAPの持ち主ということもあり、sudoもできるのでいったんmysqldを停止してパスワード不要モードで起動しなおしてもいいが、動作がどうなるか不安なのでMultimedia ConsoleがDB作成するときのスクリプトをのぞき込んでみる。
どのような設定でインストールされている?
App Centerでインストールしたアプリは基本的に下記ディレクトリ配下にインストールされる。
admin@qnap:/share/CACHEDEV1_DATA/.qpkg$ ls -la
total 96
drwxrwxrwx 24 admin administrators 4096 2023-09-15 18:56 ./
drwxrwxrwx 41 admin administrators 4096 2023-09-18 13:32 ../
drwxr-xr-x 18 admin administrators 4096 2023-09-13 21:20 container-station/
drwxr-xr-x 2 admin administrators 4096 2023-09-15 18:57 .installation/
drwxrwxr-x 10 admin administrators 4096 2023-09-16 18:57 MalwareRemover/
drwxrwxrwx 9 admin administrators 4096 2023-09-07 18:32 MultimediaConsole/
drwxr-xr-x 13 admin administrators 4096 2023-09-06 00:53 QKVM/
drwxrwxrwx 8 admin administrators 4096 2023-07-09 11:29 .QKVM/
drwxrwxrwx 2 admin administrators 4096 2023-07-11 08:18 .@qRPlayCenter/
drwxrwxr-x 15 admin administrators 4096 2023-09-14 17:54 Qsirch/
drwxrwxrwx 5 admin administrators 4096 2023-09-13 21:18 qumagie/
drwxr-xr-x 7 admin administrators 4096 2023-09-06 00:35 QuMagieCore/
drwxrwxrwx 4 admin administrators 4096 2023-09-07 18:37 VideoStationPro/
MultimediaConsole
配下にインストールされていることは一目瞭然(ps結果のmariadbの実行ファイルの場所でもわかるけどね)
この配下に入り込んでごちゃごちゃとある怪しげなファイルを読んでみると以下のファイルが見事に怪しい。
admin@qnap:/share/CACHEDEV1_DATA/.qpkg/MultimediaConsole$ cat my_mariadb.sh
#!/bin/bash
#
# Manages MariaDB
#
set -u
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
~~snip~~
このファイルを読み進めると setup_user()
というファンクションがあり、その中の変数とかを見ているとROOTアカウントのID/PWがわかる。暗号化されていないので、普通に読み解ける。いいのかよこれ。
念のためIDPWは書かないでおくので自分で調べてみてください。
MariaDBにログイン
ということで、ここまで分かったIDPWおよびPortを使ってMultimediaConsole用に起動しているMySQLにログインができる準備が整った。
mariadbのクライアントプログラムはQNAP全体にインストールされていないので、MultimediaConsoleのbinディレクトリ配下にあるものを使う必要がある。
admin@qnap:/share/CACHEDEV1_DATA/.qpkg/MultimediaConsole$ mariadb10/bin/mariadb -u <ROOTID> -p<ROOTPW> -P 3310
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 725257
Server version: 10.11.3-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| s00 |
| s01 |
| sys |
| test |
+--------------------+
7 rows in set (0.001 sec)
MariaDB [(none)]>
ということで、MultimediaConsole用Mariadbにログインできた。
ROOT権限なのでいじり放題、見放題。
MultimediaConsole用MariaDBの中身は?
レコードが格納されているテーブル一覧を見てみる。
MariaDB [(none)]> select table_schema ,table_name, table_rows from information_schema.TABLES where table_schema not in ('mysql','performance_schema') and table_rows > 0 ;
+--------------+--------------------------+------------+
| table_schema | table_name | table_rows |
+--------------+--------------------------+------------+
| s00 | subtypeTable | 6 |
| s01 | ACL2Table | 74 |
| s01 | artistTable | 22 |
| s01 | genreTable | 8 |
| s01 | pictureKeyWordTable | 1 |
| s01 | pictureTable | 368680 |
| s01 | videoTable | 16156 |
| s01 | playHistoryTable | 3 |
| s01 | faceGroupTable | 6 |
| s01 | faceGroupClusterMapping | 34 |
| s01 | faceFeatureTable | 249430 |
| s01 | pictureImageClassSummary | 1000 |
| s01 | placeAddress | 2274 |
| s01 | placeAddressUnit | 312455 |
| s01 | pictureImgClassSynonym | 5620 |
| s01 | pictureImgClassCategory | 16 |
| s01 | albumViewHistory | 31 |
| s01 | pictureViewHistory | 452 |
| s01 | pictureColorMapping | 247985 |
| s01 | StorageTable | 3 |
| s01 | pictureKeyWordMapping | 21 |
| s01 | dirTable | 17225 |
| s01 | songTable | 210 |
| s01 | albumTable | 17 |
| s01 | pictureAlbumMapping | 4 |
| s01 | subtypeTable | 7 |
| s01 | objDeletionTable | 2 |
| s01 | faceTable | 288965 |
| s01 | faceClusterTable | 2457 |
| s01 | pictureImgClass | 420 |
| s01 | pictureImgClassMapping | 255895 |
| s01 | faceClusterSuggestion | 15460 |
| s01 | pictureImgHash | 332303 |
| s01 | flagSummary | 19 |
| s01 | keySummary | 11 |
| s01 | mediaPick_tmp | 336239 |
| s01 | mediaPick_5_0 | 415817 |
| s01 | mediaPick_5_1000 | 397388 |
| sys | sys_config | 6 |
+--------------+--------------------------+------------+
39 rows in set (0.178 sec)
ファイル管理をしているのがpictureTable
で、それ以外のテーブルはその他付加情報を管理しているのかな。
これからもっと研究してみよう。