ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

【Hack The Box二十五番勝負 Advent Calendar 2020】8日目 vs Bank(●)

f:id:befs_anne:20201210112645p:plain

はじめに

これは、Hack The Box二十五番勝負 Advent Calendar 2020 8日目の記事です。

adventar.org

サマリ

  • 対戦相手:Bank
  • 対戦日時:2020年12月9日 18:00 - 23:59
  • 結果:敗北
  • 主な敗因:
  • 通算成績:8戦1勝7敗

対戦相手

今回の対戦相手は「Bank」です。 www.hackthebox.eu

Walkthrough

※以下、解法に関するネタバレです。

自分でやったこと

情報収集

  • nmap
    • 以下のポートが開いていることを確認した。
      • SSH(22)
        • OpenSSH6.6.1p1にユーザー列挙の脆弱性があったので、 searchexploit で発見したコードと、SecListsの users.txt を使って実行。 binchris が存在することが分かった。
      • DNS(53)
        • DNSが開いているBoxを(HTB以外のプラットフォームを含め)はじめて見たので何かあるだろうと思って色々(と言ってもゾーン転送ぐらい)調べたが特に何も出てこなかった。
        • searchsploit bind はBind Shell的なものが出てきて邪魔だった。
      • HTTP(80)
  • Firefox
  • Dirbuster
    • IPアドレスに対して midiumサイズの辞書を使って実行したが、 index.htmlserver-status しか見つからなかった。

侵入

  • Hydra
    • ユーザーを chris に固定して、パスワードは rockyou.txt で実行したが、当たりなし。

Writeupの冒頭を確認 - 1

以降どう頑張っても糸口が見つからなかったため、ギブアップのつもりで公式Writeupの冒頭を確認しました。 /etc/hostsbank.htb を書け、とのこと。これ直近で試したやんけ……。とは言え、前回は証明書経由でドメインを確認できたからで、今回に関しては完全にノーヒントで /etc/hosts に書けというものでした。まあ理不尽と思わず、覚えておこう……。

以下、上記のみインプットした後にやったことです。

情報収集

  • Dirbuster
    • 今度は bank.htb に対して、midiumの辞書で試行しました。PHPアプリケーションのログイン画面が見つかった。

しかし、何を試せどログイン画面を看破できず。

Writeupの冒頭を確認 - 2

またもスタックしたためWriteup確認。Dirbusterでディレクトリ列挙すると /balance-transfer/ が出てくる、とのこと。やったはずなのにな……という感じですが、回線が貧弱なこともあり満足に試行できていなかったのかもしれません。本当に悔やまれる。

以下、上記のみインプットした後にやったことです。

侵入

  • /balance-transfer の中には、決済トランザクションのログと思しきファイルが1000ファイル近くあった。
  • メールアドレスやパスワードは暗号化されており、ファイルの先頭行に暗号化の結果が書かれていた。
  • ブラウザで適当に数ファイル開くと、暗号化の結果はいずれも SUCCESS だった。
  • SUCCESS 以外のファイルがあると踏んで、ログファイルを全てローカルに落とし、ワンライナーSUCCESS 以外の結果になっているファイルを探すと、 --ERR ENCRYPT FAILED となっているファイルを発見した。中を見ると、メールアドレス(chris@bank.htb)とパスワードが平文で保存されていた。
  • 入手したメールアドレスとパスワードで、Webアプリにログインした。
  • サポートページにファイルアップロード機能があった。ウェブシェルのアップロードを複数手法で試したがいずれも失敗した。
    • PHPファイルをアップロードしようとしたが、バリデーションで弾かれた。
    • 上記のリクエストをBurpでインターセプトし、Content-Typeを image/jpeg に変更したが、またも弾かれた。拡張子をチェックしている模様。
    • exiftool を使って適当な画像ファイルにウェブシェルを埋め込んだ。アップロードは成功したがウェブシェルは動かず(そもそも、ファイルインクルージョン脆弱性と併用するものだった)。
  • ソースを見たら「 .htb 拡張子のファイルはPHPファイルとしてアップロードできるようにしてあるよ」的なことが書いてあった(どうかしている)。 先のPHPファイルの拡張子を .htb に書き換えると、アップロードが成功した。
  • ウェブシェルから nc でリバースシェルを確立した(ユーザーは www-data )。

権限昇格

  • MySQLが動いているようだったが、クレデンシャルは見つからなかった。
  • ローカルマシンから linpeas.shwget でダウンロードし実行。 /etc/passwdパーミッションが666になっていた(!)。
  • リバースシェルだとViの操作がうまくできないので、以下の手順でrootのパスワードを x から任意のパスワードハッシュに書き換えた。
    • cp -p /etc/passwd /tmp
    • sed -i -e 's/root:x/{{任意のパスワードハッシュ}}/' passwd
    • cp -p passwd /etc/passwd
      • cp: preserving times for '/etc/passwd': Operation not permitted というエラーがでるものの、書き換えは成功していた。
  • su rootできるようになるので、そのままown user / root。

KPT(Keep-Problem-Try)

Keep

  • /balance-transfer/ 発見後は自力でown rootまでいけた。リバースシェルや /etc/passwd の発見などはまあまあ手際がよかったと思う。

Problem

  • ディレクトリ列挙、こうなってくるとちょっとどうしたらいいか分からない……。

Try

  • ディレクトリ列挙に関しては、やるにはやるものの、Writeupを見たときここでつまづいていても、気にしないぐらいがいいのかもしれない……?