解析メモ

マルウェア解析してみたり解析に役に立ちそうと思ったことをメモする場所。このサイトはGoogle Analyticsを利用しています。

Vulnhub - DerpNStink: 1 Walkthrough

 

はじめに

今回選んだのは DerpNStink: 1。難易度は前回同様 Beginner ですが、今回は boot2root かつフラグを 4 つ獲得するのが目的です。OVA ファイルで提供されているのでインポートが楽です。

 

DerpNStink: 1
・Type: boot2root
・Level: Beginner
・URL: https://www.vulnhub.com/entry/derpnstink-1,221/

 

詳細

いつものように IP アドレスの特定からなので netdiscover で見つけます。その後、nmap で開いているサービスポートを確認します。ここまでの流れは基本的には他と一緒ですね。ちなみに、どの記事から読んでも理解できるようにいちいちこのくだりは書きますよ。

f:id:k1z3:20180816210045p:plain

netdiscover オプションの意味:

-r (IP address レンジの指定。指定しないと 192.168.0.0/16 になる。)

f:id:k1z3:20180816210051p:plain

nmap オプションの意味:

-p- (ポート範囲。- を指定している場合は 1~65535。)

-n (名前解決をしない。Closed だし。)

-sV (バージョンスキャン。)

-A (OS とそのバージョン。)

 

ftp (21)、ssh (22)、http (80) が有効そうです。ftpssh はクレデンシャルが分かっていないとどうにもできないので、http からの確認がよさそうです。まずはトップページの確認から行いました。

f:id:k1z3:20180816214610p:plain

f:id:k1z3:20180816214617p:plain

 

ソースの後ろの方にコメントとしてフラグが書かれていました。ブラウザで見ていると気が付きにくい場所ですが、curl でソースで見ていたのですぐに分かりました。ラッキーです。次いでヒントを探すのですが、ひとまず dirb で他のディレクトリやファイルがないかを確認しました。

f:id:k1z3:20180816214829p:plain

 

いくつかヒントとなりそうな情報が見つかっています。phpmyadmin が使用されていること (DB は MySQL)、temporary ディレクトリ、php ディレクトリ、weblog ディレクトリ (wp_xxxx が見えるので WordPress と推測できます)。temporary と php をサラッと確認しますが、有益な情報はありません。weblogcurl だと応答が見えなかったのでブラウザで確認したところ、、、

f:id:k1z3:20180816215205p:plain

f:id:k1z3:20180816215249p:plain

 

リダイレクトされてしまいました。このドメインの名前解決ができていないと中身を確認できなさそうだったので hosts に追加しています。

f:id:k1z3:20180816215353p:plain

 

ただ、これでも有益な情報はブログからは見つからず。。。WordPress なので wpscan で色々と列記ができそうです。まずはユーザ名とパスワードを探しました。

f:id:k1z3:20180816215648p:plain

f:id:k1z3:20180816215709p:plain

f:id:k1z3:20180816215723p:plain

f:id:k1z3:20180816215745p:plain

wpscan オプションの意味:

-u (ターゲットの URL。)

-e (enumrate、列挙。u はユーザの列挙。)

--wordlist (パスワードの候補。これを指定している場合、まずユーザの列挙が自動的に行われてからパスワードの辞書攻撃が行われます。)

 

wordlist ではパスワード自体はヒットしていませんが、ERROR として気になる表示が出ています。この値を使用して WordPress の管理画面にログインしたところ成功しましたので、有効なパスワードと言えそうです。次いでWordPress サイトに潜む脆弱性を確認します。

f:id:k1z3:20180816220350p:plain

f:id:k1z3:20180816220404p:plain

wpscan オプションの意味:

-u (ターゲットの URL。)

-e (enumrate、列挙。vt は脆弱性のあるテーマ、vp は脆弱性のあるプラグインの列挙です。) 

 

どうも Slideshow Gallery というプラグインにいくつかの脆弱性が見つかっているようです。特に CVE-2014-5460 の Arbitrary File Upload は WebShell などを置ける脆弱性といえるので何かと有用そうです。Metasploit でこのプラグインの exploit を検索してみたところちょうどありましたので、これを利用して reverse_tcp を送り込み、meterpreter を奪えると良いですね。

f:id:k1z3:20180816220634p:plain

f:id:k1z3:20180816220640p:plain

f:id:k1z3:20180816220757p:plain

 

ビンゴです。Meterpreter セッションを獲得することができました。WordPress サイトでこのセッションが作れるということは、wp-config.php ファイルの中身をのぞけることを意味します。つまり、DB への接続設定も確認することが可能です。さいしょに端末のユーザを確認し、そのあとに wp-config.php を確認しました。

f:id:k1z3:20180816222215p:plain

f:id:k1z3:20180816221026p:plain

f:id:k1z3:20180816221040p:plain

 

端末に 2 つのユーザがいることと MySQL サーバの wordpress DB のクレデンシャルが分かりました。シェルから MySQL に接続してテーブルの中身を確認してみましょう。(ちなみに phpMyAdmin が設置されているサイトなのでそれを利用して GUI から確認することも可能です。)

f:id:k1z3:20180816221227p:plain

 

無事に接続はできました。テーブル一覧を確認し、まずはユーザ情報のテーブルを確認してみましょう。

f:id:k1z3:20180816221316p:plain

f:id:k1z3:20180816221330p:plain

 

パスワードはハッシュ値ですが取得できました。これは後でクラックするのでテキストファイルに保存しておきます。他にも情報がないか違うテーブルを select 文で丁寧に見ていくと、2 つ目のフラグを確認することができました。(見やすいように発見した後にフラグだけを表示する SQL 文にしていますが、実際は select * from wp_xxx でしらみつぶしに探しています。)

f:id:k1z3:20180816221523p:plain

 

フラグが取れたので次は取得したハッシュ値のクラックを。これはこの手のツールでは最もメジャーな?john を使っています。ワードリストは kali に最初からついてくる rockyou.txt を使いました(これは gz で圧縮された状態で提供されているのであらかじめ解凍する必要がありました)。

f:id:k1z3:20180816221917p:plain

john オプションの意味:

--wordlist (クラック用辞書ファイルの指定。)

 

無事にクラックが成功しています。新たにパスワードが判明したユーザは 端末のユーザと一致する名前があるので、現在の Meterpreter のシェルから su できるか確認してみたところ切り替えることができました。有効なクレデンシャルが取れています。

f:id:k1z3:20180816222400p:plain

 

切り替えたユーザのホームディレクトリを列挙したところ気になるファイルがいくつかありました。

f:id:k1z3:20180816222453p:plain

f:id:k1z3:20180816222548p:plain

f:id:k1z3:20180816222644p:plain

 

ssh のファイルは公開鍵認証用に ssh-keygen で作った時のデフォルトのファイル名です。flag.txt も見えますね。ftp の key ファイルは ssh のファイルと中身が同じでした。network-logs のファイルは気になるやり取りが書かれており、おそらくこれの sniff したパケットが同じファイル名の pcap ファイルなのでしょう。ssh のファイルを SimpleHTTPServer を使って手元にダウンロードし、ssh で接続しなおしてから、それぞれ他のファイルの中身を確認してみました。

f:id:k1z3:20180816223014p:plain

ssh オプションの意味:

-i (公開鍵認証用のプライベートキーファイルを指定。)

 

f:id:k1z3:20180816223025p:plain

 

3 つめのフラグが取れました。network-logs ではもう一人のユーザがアカウントを忘れた旨、ログオン試行するときのパケットを取った旨が書かれています。パケットファイルの中に入力したパスワードが書かれていたらうれしいのですが。。。WireShark で開き、フローグラフでやり取りを確認したところ、主に 127.0.0.1 と 127.0.1.1 のやり取りです。おそらくこれが上述のログのやり取りなのでしょう。

f:id:k1z3:20180816223315p:plain

 

wp-login.php に POST しているパケットがいくつか見えるので、このプロトコル、メソッドでフィルタして他のログイン試行のパケットを探したところ、やはりありました。とても長いパスワードですね。

f:id:k1z3:20180816223502p:plain

 

このクレデンシャルを使用して su する事は可能でしょうか?

f:id:k1z3:20180816223721p:plain

 

出来ました!徐々に root に近づいている気がします。先ほどと同じようにホームディレクトリを列挙し、気になるファイルを探し、一つだけ気になるものがあったので中身を確認しました。ここに書かれている URL にもブラウザでアクセスしてみましょう。

f:id:k1z3:20180816223828p:plain

f:id:k1z3:20180816223924p:plain

 

指定された URL には sudoers の記述が書かれていました。binaries ディレクトリで特定のファイル名の sudo 実行が root として動く、と解釈できます。例えば「バッチファイルでシェルを起動する」を sudo で実行した場合どうなるでしょうか?root がバッチファイルを実行したことになるので、シェルが root で動くはずです。バッチファイルを自分で作成して sudo で実行してみます。

f:id:k1z3:20180816224205p:plain (バッチファイル derpy.sh の中身)

bash オプションの意味:

-i (インタラクティブモードで実行する。)

 

f:id:k1z3:20180816224210p:plain

 

root でシェルを実行することができました。あとは最後の flag を取得すればすべてのフラグ奪取完了です。単純に root のホームディレクトリ配下にありました。

f:id:k1z3:20180816224356p:plain

 

まとめ

ワークフロー

[偵察]

  1. netdiscover (IP アドレスの調査)
  2. nmap (サービスの調査)
    ★ GET flag 1
  3. dirb (Web サービスのディレクトリやファイル調査)
  4. hosts 変更 (リダイレクトされるので)
  5. wpscan (WordPress サイトのスキャン)

[侵入]

  1. CVE-2014-5460 の Arbitrary File Upload (Metersploit の Exploit あり)
  2. wpscan で取得したクレデンシャル

[内部探索1(www-data)]

  1. wp-config.php (MySQL のクレデンシャル取得)
  2. mysql -u <username> -p
    ★ GET flag 2

[権限昇格1(www-data → stinky)]

  1. john (パスワードのクラック)
  2. su (クラックしたパスワード使用)

[内部探索2(stinky)]

  1. find (ホームディレクトリの列挙)
    ★ GET flag 3
  2. id_rsa (ssh-keygen のデフォルトのファイル名。SSH 公開鍵認証のファイル。)
  3. ssh -i (公開鍵認証で接続)
  4. WireShark (フローグラフ → パケットのフィルタリング → POST された認証情報の取得。)

[権限昇格2(stinky→mrderp)]

  1.  su (パケットから発見したパスワード使用)

[内部探索3(mrderp)]

  1. find (ホームディレクトリの列挙)
  2. sudo -l (実際には URL からの誘導型ヒントがあった。)

[権限昇格3(mrderp→root)]

  1. bash -i (バッチファイルとして実行)
  2. sudo
    ★ GET root access
    ★ GET flag 4

 

攻撃のポイント

  • dirb による WordPress サイトの発見
  • wpscan によるユーザ/パスワードの取得、脆弱なプラグインの列挙
  • CVE-2014-5460 を使用した reverse_tcp 取得
  • wp-config.php に書かれている MySQL 認証情報
  • john によるパスワードのクラック
  • WireShark での POST データの確認
  • sudo -l などで sudo 可能なファイルを確認
  • bash のバッチファイルを sudo で実行

 

防御のポイント

(もし、この VM を守るなら。パッチ適用以外で。)

  • WordPress ユーザのパスワード強度を高める
  • WordPress ユーザとローカルユーザを同じ名前やパスワードにしない
  • WAF で CVE-2014-5460 に対する攻撃を遮断
  • 不要なファイルをホームディレクトリなどに置かない
  • sudo 権限範囲の見直し