nmapから
sshとhttpが稼働している。
サイトにアクセスするとログインページと3つほど記事があるのみ。ソースコードを見てみるとsecret.txtがあるので表示してみるとパスワードらしき文字列が見つかる。これをbase64 -dしてみるとCarling2018!というパスワードが得られる。記事からユーザーはflorisと推測してログインしてみると、SuperUserでログインに成功した。
サイト上には特に変化なし。試しにgobusterしてみると、administratorがあるようだ。先ほどの認証情報でログインできた。
Super Userなのでリバースシェルをアップロードできそう。しばらくサイトを探してみるとTemplates/Beez3にアップロードできる箇所があった。ちなみに下のTemplateでも同様にできる。
アップロードしたシェルのパスは、先ほどのgobusterからTemplateフォルダだと推測できる。Template/shell.phpは無理だったので、試しにTemplates/Beez3/shell.phpにアクセスしてみるとリバースシェルが得られた。
www-dataのuser.txtはないのでflorisに昇格する必要がある。florisのフォルダを見てみるとpassword_backupというファイルがある。中身はASCII.textに16進数が書かれた内容だった。これをダウンロードしてみる。
xxdを使って16進ダンプをしてみるとbzip形式だとわかる。ファイル形式をbz2に変えてbzi2でdecompressすると、形式がgz形式に代わる。ファイル形式をgz...と繰り返していくと最終的にパスワードを入手できた。ssh接続にも成功した。
florisのフォルダにはpassword_backupの他にadmin-areaというディレクトリがある。見てみるとinput reportという二つのファイルがあり、それぞれroot権限がある。
単純にroot.txtを見るだけなら以下の方法で済む。
①outputはinputの情報をもとに表示していると考えられる。ルート権限を持っているのでrootフォルダにもアクセスできる。つまりinputをroot.txtのパスに設定すればroot.txtの中身を見ることができる。
もしくは
②ncを使って自分のターミナルにデータを送信させる(root.txtが見えるので下の画像には表示していない)
番外編 そもそも何をしているのか
input outputが何をしているかを見るにはプロセスを見る必要がある。しかしcrontabやlinenumでは見ることができないのでpspyを使用する。
少し見にくいが、1分毎に以下のコマンドが実行されている。
/bin/sh -c sleep 1; cat /root/default.txt > /home/floris/admin-area/input
curl -K /home/floris/admin-area/input -o /home/floris/admin-area/report
/root/default.txtの内容をinputにコピーし、その内容をcurlを用いて表示させている。先ほどのurlを変更すると出力されたのはcurlコマンドのおかげだった。
③つまり先程のファイルを利用してsudoをパスワードなしで使えるようにすればよい。
florisのディレクトリにinput用のファイルを作りviで以下のように設定。inputのurlをfile:///home/floris/exploit/sudoersに変更ししばらく待つとsudo suがパスワードなしで実行できる。
ちなみにsudoer以外にもrootのid_rsaを出力させる手もある。
④実はboxが古いからかlinuxの脆弱性をついてroot権限を得ることができる。snap versionのsnapdを検索するとdirty sock(CVE-2019-7304)という脆弱性が見つかるのでこれを利用する。
まとめるにあたって以下のサイトを参考にした。