Snoozy

1.Sleep-inducing; tedious.

VulnHubのMr-Robot: 1をやってみたよ~!

VulnHubのMr-Robot: 1をやってみたよ~!ということでやっていく。

https://www.vulnhub.com/entry/mr-robot-1,151/

 

まずはアドレスを取得する。

f:id:snoozekvn:20190617013055p:plain

ついでポートスキャン。

f:id:snoozekvn:20190617013058p:plain

ふむ、80番ポートと443番ポートが開放されていることがわかる。

80番ポートでは単純なhttpが稼働していることがわかるのでアクセスしてみる。

f:id:snoozekvn:20190617013052p:plain

めちゃくちゃかっこいいサイトが表示された。

コマンドプロンプトっぽいところへ実際にコマンドが打てるようだ。

全て試してみたが、どれからも次のステップに進むためのヒントは得られなかった。

 

niktoとdirbを使ってサイトのディレクトリを探索する。

niktoの結果からは特に得られるものはなかった。

次の画像はdirbの出力結果の一部。

WordPressが動いてることと、robots.txtがあることがわかる。

f:id:snoozekvn:20190617032234p:plain

 

robots.txtにアクセスすると次のような表示を得た。

f:id:snoozekvn:20190617014327p:plain

明らかにこれはファイル名だ。

wgetでダウンロードしてみる。

f:id:snoozekvn:20190617014333p:plain

ファイルの中身を表示したのが次の画像。

最初にfsocity.dicをheadコマンドで出力している。

これは辞書ファイルで、おそらくブルートゥースアタックに使うものだと予想される。

key-1-of-3.txtは3つあるflagの1だと思われる。

f:id:snoozekvn:20190617014744p:plain

 

さて、robots.txtから得られるものはもうなにもない。

dirbで得られた結果の解析に戻ろう。

先程実行したdirbの結果から、このサーバーにはWordPressがインストールされていることがわかっている。

アクセスしてみる。

f:id:snoozekvn:20190617013739p:plain

もろにログインページだ。おそらく先程の辞書ファイルを使うのだろう。

パスワードリストとユーザー名リストにその辞書ファイルを指定し、WPScanでブルートフォースアタックを仕掛ける。

 

…が、単語数が多すぎて一向に終わらない。

もう一度辞書ファイルをよく見ると、単語の重複がかなりあることがわかった。

ソートし、uniqコマンドで重複を削除した後、再度ブルートフォースを仕掛ける。

…が、やはり単語数が多い。全く終わる気配がしない。

 

WPScanでスキャンをかけるもユーザー名などは見つからなかった。

f:id:snoozekvn:20190617013736p:plain

また、有効な脆弱性も見つからない。

 

何か見落としがあると考え、dirbの出力結果をもう一度見直す。

結論から述べると、licenseというページにヒントがあった。

次の画像がlicenseをブラウザで開いた様子。

f:id:snoozekvn:20190617014746p:plain

煽られている…?

うおおおおおおおおおおおお

 

…ページ下部にbase64エンコードされた文字列を発見。

f:id:snoozekvn:20190617014741p:plain

デコードしてみる。

f:id:snoozekvn:20190617020648p:plain

これは…ユーザー名とパスワード…?

WordPressのログインページで試してみる。

f:id:snoozekvn:20190617020650p:plain

ログインできた!

 

とはいえ、ここからどうすればいいのか皆目見当がつかない。

シェルが得られたりしないのだろうか。

しばらくダッシュボードをいじくり回してみる。

…よくわからないので調べる。

次の記事が参考になった。

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を書き換える。

これなら適当なページにアクセスすることで、簡単にバックドアコードを実行させられる。

f:id:snoozekvn:20190617022411p:plain

Netcatで待ち受けて…適当なページにアクセスする。

f:id:snoozekvn:20190617022415p:plain

よし!たしかにリバースシェルが張られている。

f:id:snoozekvn:20190617022417p:plain

 

カーネルエクスプロイトで権限昇格を狙う。

まずはエクスプロイトコードを照会。

Kali側でPythonを使った簡易サーバーをホストし、Mr-RobotVM側からエクスプロイトコードをwgetする。

gccコンパイルし、実行!

…とはいかず。2,3他のコードも試してみたがうまく刺さらなかった。

 

残念ながらここでギブアップした。

これまでの経験から、権限昇格における私の手札は次のようなものだ。

カーネルエクスプロイト。

sudo -lでroot権限で実行を許可されているコマンドを見つけ、そこからroot権限のシェルをスポーンさせる。

同様の考えで、root権限で動くサービスからシェルをスポーンさせる。

root権限のcronで定期実行されるスクリプトを書き換える。

 

しかし今回はこのどれも使えなかった。

writeupを見ると次のような方法でroot権限を得ていた。

まずSUIDがrootのものをすべて列挙し、

f:id:snoozekvn:20190617024748p:plain

今回はそのうちのNmapの利用している。

f:id:snoozekvn:20190617023729p:plain

古いバージョンのNmapはユーザーがシェルコマンドを実行できる対話モードが実装されているらしい。

pingなどのネットワークユーティリティは実行にroot権限が必要な場合があり、Nmapもこれに該当する。

sudo -lが封じられていてもroot権限で動くものを探させるということが学べた。

 

さて、残りのフラッグは/home/robot/と/rootにあった。

f:id:snoozekvn:20190617023727p:plain

f:id:snoozekvn:20190617031345p:plain

Thanks to the Leon Johnson for this CTF!

 

前半はWPScanのオプションが変更されていることに気づかず時間を溶かしてしまった一方で、後半は新しい手法を学ぶことができた。

また、その過程でペンテストについて参考になるブログをたくさん見つけることができた。熟読して手札を増やしていきたい。