溶けたペンギンの雑記

ブログ初心者です。よく分かりません。パソコン使います。

Bulldog を攻略した記事(writeupを含みます)

どうも皆さんこんにちは。

 

今回は Bulldog という脆弱な仮想マシンを攻略したのでその手順を書いていこうかと思います。

 

まだ攻略していない方は下記リンクからダウンロード出来るので興味があればぜひ挑戦してみてください。

 

bulldog:

www.vulnhub.com

 

 

※注意

この記事は攻撃を推奨するものではありません。また、許可を得ていない機器に対する攻撃は犯罪となるため絶対に行わないでください。

 

目次

 

シェルを取る編

いつも通りポートスキャンを行います。

ポートスキャンの結果

 

80番と8080番のポートで http のサービスが動いているみたいですね。

 

そこで、なにか面白いファイルやディレクトリがないかをツールを使って探しました。

ツールの結果

 

admin と dev というディレクトリがありました。それぞれにアクセスしてみましょう。

 

/dev にアクセスした際のスクリーンショット

/admin にアクセスした際のスクリーンショット

 

admin にアクセスするとログインページにリダイレクトされるみたいですね。

 

また、dev にアクセスすると社内向けの文章が書かれたページが表示されました。

 

さらに、dev にアクセスした際のページ下部には以下のような面白そうな情報がありました。

メールアドレス

 

これは何かに使えそうなのでメモしておきましょう。

 

また、dev のページに /dev/shell へと飛ぶことの出来るリンクがあったのでそれも確認してみました。

/dev/shell のスクリーンショット

 

権限がなさそうです。

 

先ほど見つけたログイン画面でログインすることに成功したら何かが変わりそうですね。

 

また、robots.txtもあるみたいなのでアクセスしてみたのですが、面白い情報は何一つとしてありませんでした。

robots.txt

 

dev のページに一度ハッキングされていると書いてあったので、その雰囲気作りといったところでしょうか?

 

とりあえず確認できる部分をすべて確認してみましたが、これ以上の情報は得られませんでした。

 

ログイン画面で使用できるパスワードでも見つかれば良いと思っていたのですが、ユーザ名に使えそうな情報しかなかったためこれでブルートフォース攻撃を行うのではないかと思いました。

 

しかし、ツールを使うのが下手な為ツールが上手く動きませんでした......

 

おそらくヘッダやクッキーの値の設定で詰まっていたのではないかと思います。

 

そこで、解答をチラ見してユーザ名とパスワードを確認した上でブルートフォース攻撃を行いました。(ズルですね......)

ブルートフォース攻撃

 

画像をみると bulldog の部分だけ他のレスポンスと違う事が分かりますね。

 

これはユーザ名を nick と仮定してパスワードが何かをブルートフォース攻撃を用いて調べています。(ズルでユーザ名とパスワードが分かっているのでこれを行う必要は無いのですが、悔しいので......)

 

また、辞書に用いたファイルに bulldog が入っていることも事前に確認したうえで行っています。(凄いズルい......)

 

ちなみに、今回使用したツールは burp suite というツールです。(これはセキュリティツールなので紹介します。)

 

通信を確認したり再送したり脆弱性を自動で調べたりと色々できる便利なツールです。

 

初めに注意の部分でも触れているように悪用は絶対に駄目ですが、脆弱性や通信の内容を確認するのにとても便利なのでおすすめです。

 

閑話休題、もとの話に戻ります。

 

ユーザ名とパスワードが分かったのでログインしてみましょう。

ログイン後の画面

 

このページでは特に面白い情報は見つかりませんでした。

 

では、先ほど目をつけていた /dev/shell のページにアクセスしてみましょう。

ログイン後の /dev/shell のスクリーンショット

 

どうやら限られたいくつかの OS コマンドなら実行出来るみたいです。

 

指定されていないコマンドも実行出来たら出来ることの幅が広がりますね。

 

とりあえず使用できるコマンドで色々調べていたところ、面白い情報を見つけました。

面白い情報

 

後ほど使うかも知れないのでメモしておきます。

 

さらに色々試していたところ、制限をバイパスする方法を見つけました。

制限をバイパスしてる画像

 

どうやら、パイプでコマンドを連結することで任意のコマンドを実行出来るみたいです。

(ls|python manage.py というコマンドで manage.py が実行されている。)

 

せっかくなので .ssh ディレクトリを作成し、公開鍵をその中において ssh で接続できるようにしてみました。

wget コマンドでファイルを送信

公開鍵の画像

 

ちなみにauthrized_keys は wget で公開鍵を自分のパソコンから送る際に名前を間違えてしまったもので、面倒くさくてそのまま消さずに残してしまいました......

 

このアカウントの名前が django であること(スクショしてませんが whoami コマンドで確認しました)を用いて ssh コマンドで接続すると......

 

シェルの取得!!!

 

シェルの取得に成功しました。

 

次は権限昇格編ですね。

 

権限昇格編

色々調べるツールを使用したところ、面白いファイルを見つけました。

面白いファイル

 

この中の /.hiddenAVDirectory/AVApplication.py というファイルなのですが、書き込みが可能なようです。

 

さらにこのファイルは所有者が root であるというかなり興味深いファイルでした。

面白いファイルの権限

 

このファイルにコマンドを実行するようなコードを書いた後に管理者権限でコマンドを実行出来たら権限昇格出来そうですね......

 

さらに色々調べていると、不思議な実行ファイルを発見しました。

実行ファイルの中にある不思議な文字列

 

実行は出来ないのですが、strings コマンドで調べてみると何やら怪しい文字列がありました。

 

そこで、末尾についている H を除いて文字列を繋げてみると「SUPERultimatePASSWORDyouCANTget」という文字列になりました。

 

さらに、webshell で情報を探している段階において発見した note というファイルからこの文字列は現在操作している django というアカウントのパスワードであることが推測されます。

note の内容

 

このパスワードを試してみると、確かに django のパスワードであることが確かめられました。

 

これによって sudo コマンドの実行が可能となります。

sudo コマンドが実行可能となった画像

 

せっかくなので先ほど見つけた AVApplication.py にコマンドを実行するような Python のコードを書き加えて管理者権限で実行してみました。

管理者権限で動いているかの確認

 

コードを書き換えて恒常的な管理者権限を取得できるようにします。

恒常的な管理者権限の取得

 

これで管理者権限の取得が完了しました。

 

最後にフラグを取得して終了です。

Flag の取得!!!

 

対策編

どのような対策をすれば防げるのかを考える章を書いてみようかなと思ったので今回の記事から対策編という章を追加しました。

 

まず今回の攻撃の流れを軽くおさらいします。

  1. シェルを取る編
    1. django のログイン画面においてブルートフォース攻撃による認証の突破
    2. Webshell における OS コマンドインジェクション?
  2. 権限昇格編
    1. パスワードの漏洩

 

シェルを取る編において、パスワードが突破されてしまう問題については強固なパスワードを使用するか、ブルートフォース攻撃を検知する仕組みを構築して不審な IP からのログインの試行を拒否するといった対策が有効なのではないかと思いました。

 

OS コマンドインジェクションの対策に関しては、きちんとメタ文字をエスケープすることで回避できるのではないかと思いました。

 

権限昇格編におけるパスワードの漏洩に関しては、実行ファイル内に機密情報を入れなければ良いのではないかと思いました。

 

今回の場合は、おそらく与えられたユーザ名と実行ファイル内にあるパスワードの文字列を用いて sudo コマンドを実行しているといった実行ファイルであると推測されます。

 

そのため、strings コマンドでパスワードが漏洩してしまったのではないでしょうか。

 

仮に平文ではなく、sha256 などのハッシュ関数でハッシュ化した値を格納したら安全になるのか気になりましたが、余り詳しくないのでそのような実装が安全かは分からないですね......

 

 

振り返りと感想

ブルートフォース攻撃が凄く苦手です......

 

上手く使えるようになりたいですね。

 

今回はそこまで複雑な内容ではなかったのでこれくらいで終わりにしようかと思います。

 

最後まで読んでいただきありがとうございました。