CodeGate2012 Vuln100のwriteupを読んでみる

CodeGate2012の復習とかやっていきます。

今回は出場者向けの内部ネットワーク内で稼働しているWebアプリケーションが対象なので、いつも参考にさせていただいているwriteupのブログを理解するまで読んで、記録しておく感じになります。(自分では部分的にも解いていません)本当はforensics500を解いてから、と思ったのですが、難しすぎてwriteup見ても時間かかりそうだったので、先にVulnをチェックしてみることにしました。

いつもはリンク貼ってなかったけど、様々なところからリンク貼りまくりっぽかったので、僕も紹介します。

こちらの記事にあるwriteupを読ませていただいて、自分のなかで消化します。どちらも上位チームの方々のブログです。

まずはいつもどおり問題文と意訳(短いですが)

What is Administrator listening to the music?
Service: http://1.237.174.123:3333/

管理者が聴いてる音楽はなんでしょうか?アドレスはhttp://1.237.174,123:3333/です

URLへ飛ぶと、ユーザが音楽をアップロードして、聴くことができるオンラインのミュージックプレイヤーアプリらしいです。自分自身のIPアドレスからアップロードした音楽のみを視聴することができる仕組みです。

まず最初に、サービスを使ってみる。

フォームに入力する(選択する)値は、mp3ファイルへのパス、ジャンル、タイトルの3つです。アップロードするフォームを利用したり、curlコマンドを使ったり。

ファイルの最後に .mp3 がないとalert(‘uplod mp3 file only’)というエラーが返ってくるということがわかりました。

入力値はそれぞれ、mp3へのパスとタイトルは文字列として、ジャンルは数字で送信しています。そこから以下のSQL文を推測します。

ジャンルの値に、SQLインジェクションを試みてみます。burp suiteやcurlコマンド、スクリプトなどなんでもいいので、genreのvalueを書き換えて送信します。

フォームの下に、246とSELECT文の結果が表示されているのが確認できたので、genreの値にSQLインジェクションが可能なことがわかります。ここに、任意のSQL文を実行できる脆弱性があるので、データベースの情報を収集していきます。

writeupに書かれたまま翻訳しているだけなので、手順だけ書くと

  1. information_schema.schemataからデータベース名を取得
  2. information_schema.tablesからデータベース名を条件にテーブル名を取得

これで、テーブル一覧が取得でき、そこから”upload_mp3_[ユーザのIPアドレス]”の形式でテーブルが作成されていることがわかります。(ユーザごとに1つのテーブルが作成されている、ということ)

テーブルのリストを見ると、Administratorのテーブルは、おそらく”upload_mp3_127_0_0_1″だと予想がつくので、

information_schema.columnsからテーブル名を条件に、カラム名を取得するとidx,genre,title,fileの4つのカラムが定義されていることがわかります。

TODO: information_schemaに関しては、ちょっと調べてまとめてみようと思います。主要データベースのこういうのは知ってないと論外になりそうですね・・・。

TODO: 文字列を標準入力で受け取って16進数を返す、それだけのスクリプト、あると便利かも。探してなければ書いてみます。

あとはupload_mp3_127_0_0_1テーブルからfileカラムの値持ってくるだけですね!データのbinaryがまんま入ってるみたいです。そこからデータ持ってきて、再生すれば、キレイな声のお姉さんが答え教えてくれます。むーん・・・自分が最初からチャレンジしてたらできたかなぁ・・・100の問題でも十分に難しい・・・・。

今回writeupを読んで勉強になったこと。

  1. mysql information_schemaについて
  2. SQLインジェクションが可能かの判定と、INSERT文へのSELECT文挿入
  3. curlコマンドの使い方(manコマンドで確認するとより詳細が確認できます)
  4. python quickhttpモジュール
  5. SQL ORD関数、SUBSTR関数

以上です。次はVuln200の問題のwriteup読んでみたいと思います。

今年のCodeGateはWeb問題が追加される、とのことだったので、こういう問題は要チェックかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です