VulnHubのMr-Robot: 1をやってみたよ~!
VulnHubのMr-Robot: 1をやってみたよ~!ということでやっていく。
https://www.vulnhub.com/entry/mr-robot-1,151/
まずはアドレスを取得する。
ついでポートスキャン。
ふむ、80番ポートと443番ポートが開放されていることがわかる。
80番ポートでは単純なhttpが稼働していることがわかるのでアクセスしてみる。
めちゃくちゃかっこいいサイトが表示された。
コマンドプロンプトっぽいところへ実際にコマンドが打てるようだ。
全て試してみたが、どれからも次のステップに進むためのヒントは得られなかった。
niktoとdirbを使ってサイトのディレクトリを探索する。
niktoの結果からは特に得られるものはなかった。
次の画像はdirbの出力結果の一部。
WordPressが動いてることと、robots.txtがあることがわかる。
robots.txtにアクセスすると次のような表示を得た。
明らかにこれはファイル名だ。
wgetでダウンロードしてみる。
ファイルの中身を表示したのが次の画像。
最初にfsocity.dicをheadコマンドで出力している。
これは辞書ファイルで、おそらくブルートゥースアタックに使うものだと予想される。
key-1-of-3.txtは3つあるflagの1だと思われる。
さて、robots.txtから得られるものはもうなにもない。
dirbで得られた結果の解析に戻ろう。
先程実行したdirbの結果から、このサーバーにはWordPressがインストールされていることがわかっている。
アクセスしてみる。
もろにログインページだ。おそらく先程の辞書ファイルを使うのだろう。
パスワードリストとユーザー名リストにその辞書ファイルを指定し、WPScanでブルートフォースアタックを仕掛ける。
…が、単語数が多すぎて一向に終わらない。
もう一度辞書ファイルをよく見ると、単語の重複がかなりあることがわかった。
ソートし、uniqコマンドで重複を削除した後、再度ブルートフォースを仕掛ける。
…が、やはり単語数が多い。全く終わる気配がしない。
WPScanでスキャンをかけるもユーザー名などは見つからなかった。
また、有効な脆弱性も見つからない。
何か見落としがあると考え、dirbの出力結果をもう一度見直す。
結論から述べると、licenseというページにヒントがあった。
次の画像がlicenseをブラウザで開いた様子。
煽られている…?
うおおおおおおおおおおおお
デコードしてみる。
これは…ユーザー名とパスワード…?
WordPressのログインページで試してみる。
ログインできた!
とはいえ、ここからどうすればいいのか皆目見当がつかない。
シェルが得られたりしないのだろうか。
しばらくダッシュボードをいじくり回してみる。
…よくわからないので調べる。
次の記事が参考になった。
https://www.hackingarticles.in/wordpress-penetration-testing-using-wpscan-metasploit/
よし、やっと方向性が見えてきた。
例によってpentestmonkeyからコードを拝借する。
http://pentestmonkey.net/tools/web-shells/php-reverse-shell
プラグインにアップロードできるのはzipファイルだけなので、phpファイルをzipにして…
…ここで気がついたのだが、プラグインをアップロードしても、このコードを実行する方法がない。
もう一度上の記事をよく読んで見ると、どうやらプラグインをアップロードするのではなくて、既存のプラグインを書き換えることでバックドアを仕込むようだ。
記事を参考に404.phpを書き換える。
これなら適当なページにアクセスすることで、簡単にバックドアコードを実行させられる。
Netcatで待ち受けて…適当なページにアクセスする。
よし!たしかにリバースシェルが張られている。
カーネルエクスプロイトで権限昇格を狙う。
まずはエクスプロイトコードを照会。
Kali側でPythonを使った簡易サーバーをホストし、Mr-RobotVM側からエクスプロイトコードをwgetする。
…とはいかず。2,3他のコードも試してみたがうまく刺さらなかった。
残念ながらここでギブアップした。
これまでの経験から、権限昇格における私の手札は次のようなものだ。
カーネルエクスプロイト。
sudo -lでroot権限で実行を許可されているコマンドを見つけ、そこからroot権限のシェルをスポーンさせる。
同様の考えで、root権限で動くサービスからシェルをスポーンさせる。
root権限のcronで定期実行されるスクリプトを書き換える。
しかし今回はこのどれも使えなかった。
writeupを見ると次のような方法でroot権限を得ていた。
まずSUIDがrootのものをすべて列挙し、
今回はそのうちのNmapの利用している。
古いバージョンのNmapはユーザーがシェルコマンドを実行できる対話モードが実装されているらしい。
pingなどのネットワークユーティリティは実行にroot権限が必要な場合があり、Nmapもこれに該当する。
sudo -lが封じられていてもroot権限で動くものを探させるということが学べた。
さて、残りのフラッグは/home/robot/と/rootにあった。
Thanks to the Leon Johnson for this CTF!
前半はWPScanのオプションが変更されていることに気づかず時間を溶かしてしまった一方で、後半は新しい手法を学ぶことができた。
また、その過程でペンテストについて参考になるブログをたくさん見つけることができた。熟読して手札を増やしていきたい。