sundownを解いたので攻略の振り返りと反省を行う記事(writeupを含みます)
どうもみなさんこんにちは。(もしくはこんばんわ、そしておはようございます)
記事のタイトルにもある通り今回は vulnhub というサイトからダウンロードした sundown という脆弱な仮想イメージを使って権限昇格までを行ったのでその振り返りを行います。
まだ解いてない!という方がいたらぜひ解いてみてください。リンクは下においておきます。
※注意
この記事には脆弱性を用いた攻撃手法などが含まれますが、攻撃を推奨するものではありません。また、許可を得ていないマシンに対してそのような攻撃を行うことは違法行為となりますので絶対に行わないでください。
目次
シェルを取る編
まずはポートスキャンを行ってどのサービスが動いているのかを確認します。
すると ssh と http が動いていることがわかります。
しかし、現時点ではユーザ名やパスワードなどの情報は持っていないため ssh でアクセスすることはできません。
そこで、http にアクセスして何かできないかを探します。
雰囲気的には WordPress っぽい感じがしますね。
とりあえず robots.txt にアクセスできるか確認します。
どうやら WordPress で間違いないみたいです。
とりあえず、/wp-admin と /wp-admin/admin-ajax.php にアクセスしてみました。(wp-adminにアクセスしたらwp-loginに自動的に遷移しました)
得られるものはあまりなさそうですね。
次は WordPress の情報を集めてくれるツールを使って情報を集めました。(ツールの名前を出してよいのか不安なのでぼかします。)
すると面白いものが見つかりました。(するっと書いていますが、この面白い情報を見逃したため1回詰まりました......ちゃんと出力に目を通さないとだめですね)
こちらのプラグインですが、Remote File Inclusion(RFI) の脆弱性がありました。
WordPress Plugin WP with Spritz 1.0 - Remote File Inclusion - PHP webapps Exploit (exploit-db.com)
これでいろいろな情報を集めることができるようになりました。
とりあえず、/etc/passwd ファイルを確認してみましょう。
確認しずらいと思いますが、末尾のほうに carlos というアカウントがあることが確認できます。
これで carlos というユーザが存在するという情報を得ることができました。
次は、このユーザ名を使って ssh に対して辞書攻撃を行います。
その結果、 carlos のパスワードは carlos であることが判明しました!!(通称 Joeアカウントというやつですね。ちなみに今回使用した辞書は rockyou.txt というものです。)
では早速 carlos さんのアカウントに ssh でログインしてみましょう。
すると1つ目の Flag を手に入れることができました!!!
次は権限昇格編です!!
権限昇格編
とりあえずいろいろな情報を調べてくれるグリーンピースみたいな名前のツールを使って情報を集めます。(ツールの名前はぼかしました)
しかし、何も見つけることができずに数時間が経過......いろいろ試したのですがうまくいかず、ほかの人の回答をチラ見することにしました。
すると、wp-config.phpを先ほど使用した RFI の脆弱性を使って確認していたため、僕もそれに倣って確認をしてみました。
するととても面白い情報を見つけることができました!!
なんと MySQL のユーザ名とパスワードを見つけることができたのです!!!
しかし、そこから WordPress の管理者アカウントのパスワードを書き換えてログインしたりもしましたがそれらが権限昇格につながるわけでもなく、またしても詰まってしまいました......
そこでさらにほかの人の回答をチラ見すると、どうやら管理者権限のアカウントが root 以外にもあるとのことでした。
そこで先ほど使用したグリーンピースみたいな名前のツールの結果を確認すると、mysql が管理者権限を持っていました......(これは見逃したくなかったですね......まぁ、確かに普段はしっかりと確認しない部分ではありましたが、悔しいですね)
そこで、MySQLを用いてできることをいろいろと試してみました。
初めに思いついたのは MySQL を用いてファイルを作成することです。
以下のサイトが参考になりました。
例えば"into OUTFILE"で実行結果をファイルに書き込めるなら、SQLの実行結果に任意のスクリプト(<?php echo shell_exec("ipconfig")?>)を含ませ、その結果を任意のファイル(test.php)に出力しよう。
以下のようなSQL文が考えられる。
SELECT * FROM Data; all SELECT <?php echo shell_exec("ipconfig")?> into OUTFILE 'c:/xampp/htdocs/test.php'
実行の結果、Webサーバのルートにtest.phpが出力されるはずだ。
しかし、それらのファイルは所有者が root だったのですが実行権限が付与されていなかったため権限昇格はうまくいきませんでした......
次に考えたのは MySQL を用いてファイルを読み出すということです。
どうやら LOAD_FILE 関数というものを用いればファイルを読み出せるということがわかりました。
参考サイト:How the LOAD_FILE() Function Works in MySQL (database.guide)
しかし、ファイルの読み出しはできても root ディレクトリに入っている Flag のファイル名がわからないためこの方法もうまくいきませんでした。
色々と試してみましたがうまくいかずに数時間が経過し、泣く泣くほかの人の回答をチラ見しました。
すると MySQL の User Defined Function(UDF) Dynamic Library に関する脆弱性を用いてることがわかりました。(日本語にするとユーザ定義関数の動的ライブラリといったところでしょうか?)
脆弱性の詳細:MySQL 4.x/5.0 (Linux) - User-Defined Function (UDF) Dynamic Library (2) - Linux local Exploit (exploit-db.com)
上記のサイトの手順に則って関数を作成することで任意のコマンドを使用することが出来るようになります!!
これで何でも出来るようになりました。
最後に /etc/passwd ファイルを書き換えて carlos さんを管理者権限にして Flag を取得したいと思います。
まず new_passwd というファイルを作成します。
そしてこれを /etc/passwd ファイルに書き込んだら管理者権限を手に入れることが出来ます。
そして carlos のアカウントに改めて ssh で接続すると......
無事 Flag を取得することが出来ました!!
振り返りと感想とか
こうやって記事にしてみて気がついたのですが、チラ見しすぎですね。
Try Harder の精神はどこに行ってしまったのでしょうか......
それはさておき、今回のマシンはとても面白かったですね。
SQL の脆弱性なんて SQL インジェクションくらいしか知らなかったし、 Web アプリケーション上で探しておしまい、みたいなイメージを持っていたので新鮮でした。権限昇格にも使えるんですね。
また、 WordPress のwp-config.php の中に SQL のパスワードが記述されていたのも凄かったですね。
あそこらへんのファイル群は数が多いのでどれを見れば良いのかいつも悩みます。
あと、WordPress をスキャンしてくれるツールが使いこなせてなかったですね。
この記事では結果の一部しか載せていませんが、実際は他にも色々な情報が出力されます。その中から有用な情報を探す、という事がまだまだ苦手なんですよね......
そしていつも思っていますが、グリーンピースみたいな名前のツールが全く使いこなせてないですね。
新しいマシンを解くたびに、今回はこの情報だったか......となることが多いです。
まぁ、そのたびに注意すべき点を増やしてはいるのですが......まだまだ勉強不足ですね。
まとめ
ここまで読んでくださってありがとうございました。
今回攻略した sundown というマシンなんですが、実は sunset というシリーズのマシンの1つなんです。
このシリーズのマシンは面白いものが多いのでおすすめします。