grades?」を作ってみたくりすです。先日の5月4日昼から5日朝まで夜通しで「​tkbctf」なるハッキングコンテスト、いわゆるCTFが開催されましたが、わたしはそれに1つミッションを提供しました。grades?」です。あらゆる情報系ダメ学生の夢である、「学校の成績管理システムをハックして、落第をなかったことにする」というのが目標のミッションです。それでは、以下ネタバレとなります。ミッション説明こんにちは。博麗大学のS.Iと申します。春休みに入り成績が付いたのですが、どうも線形代数Iの成績が芳しくないのです。これを落とすとたいへんなことになってしまいます。お力添えをお願いします。提供のネットワークにて公開しております。インジェクションポイントである。ブラインドインジェクションなので気合ゲー。GETパラメータから注入するSQLインジェクションである。5個投入した後にページにバージョン情報が現れるので、SQLインジェクションが有効と分かる。#というSQLインジェクションを発射する。使うとと1行に全てのrowsが降ってくるので、今回みたいにページに出現するrowは最初の1行だけという場合に都合がよい。いうデータベースが怪しいので、覗き見る。いうテーブルがあることが分かる。怪しいので中身を見る。いうカラムが存在していることが分かった。対応するハッシュが眠っていないか確かめる。型であるので、文字列として取り扱うべきである。アカウントの存在が分かることから明らか。文をインジェクトします。パラメータに叩きこんで、攻略は完了です。http://web400.tkbctf.info/index.pl?mode=subjects&subid=%27%3B%20UPDATE%20grades%20SET%20grades_json%20%3D%20%27%5B%7B%22subject_id%22%3A%22LAI%22%2C%22cemester%22%3A%22Last-half%202012%22%2C%22subject%22%3A%22Linear%20Algebra%20I%22%2C%22grade%22%3A%22D%22%7D%2C%7B%22subject_id%22%3A%22PHY%22%2C%22cemester%22%3A%22Last-half%202012%22%2C%22subject%22%3A%22Physics%22%2C%22grade%22%3A%22D%22%7D%2C%7B%22subject_id%22%3A%22CLI%22%2C%22cemester%22%3A%22Last-half%202012%22%2C%22subject%22%3A%22Calculus%20I%22%2C%22grade%22%3A%22C%22%7D%2C%7B%22subject_id%22%3A%22PGI%22%2C%22cemester%22%3A%22Last-half%202012%22%2C%22subject%22%3A%22Programming%20I%22%2C%22grade%22%3A%22A%22%7D%2C%7B%22subject_id%22%3A%22MON%22%2C%22cemester%22%3A%22Last-half%202012%22%2C%22subject%22%3A%22Introduction%20to%20Monty%20Python%22%2C%22grade%22%3A%22A%22%7D%2C%7B%22subject_id%22%3A%22SLO%22%2C%22cemester%22%3A%22Last-half%202012%22%2C%22subject%22%3A%22Slacking%20Off%22%2C%22grade%22%3A%22A%22%7D%5D%27%E3%80%80WHERE%20userid%20%3D%20%27896b3697369ab1ca14612120ded84c68%27%20%23想定外の解法いやー実はわたしのミスで、上記のように意図的に盛り込んだSQLインジェクションとは異なるセキュリティホールが存在していたのです。以下はそれらの説明です。いっても、非常に単純な解法となるので説明はほぼ不要でしょう。対するアクセス制御が不十分なんのことはないです。いう設定ファイルの存在を知ったりすれば到達できます。この中にスコアを獲得するための重要な情報が含まれていました。対するアクセス制御が不十分いやこれはひどかったです。ソースコードもろとも丸見えになってしまいました。ディレクトリの取扱いに気をつけるべきですね。内に存在しないようにする」ことではないでしょうか。今回のこのミスを通して自分もまたひとつおもしろいことが学べたので、このCTFに出題してよかったと思いました。正解者に万雷の拍手を早着順です。次のGitHubリポジトリにて、本問題のソースコードを公開する予定です。READMEが完成していないため未公開ですが、できれば本日中に公開しますので、興味がありましたらご覧ください。(0)SSL中間証明書を改良してAndroidに対応させたおよそ3週間の間多忙で何もアウトプットできていなかったくりすです。nginxのSSL証明書をAndroid上で信頼されないという報告を受けていたのですが、先程対応が完了したのでシェア。Inc.であるわけですが、この両者の中間証明書をインストールしないと、一部の端末では証明書が正しく使用できませんでした。暗号強度上の理由から廃止されており、それに伴い諸CA証明書も2048bitに順次入れ替わっております。これに伴い互換性確保のために中間証明書のインストールが必須となるので、これを正しく設置していない場合SSLエラーが発生するわけです。気を付けないといけないのは、RapidSSLの場合はRapidSSLの中間証明書と、その上位のGeoTrustの中間証明書の両方が必要であるということです。GeoTrustの中間証明書をそれぞれ入手します。参考文献の3番目のテキストファイルは、この2つの証明書がバンドルになったものなので、それを引っ張ってくればよいでしょう。https://knowledge.rapidssl.com/library/VERISIGN/INTERNATIONAL_AFFILIATES/RapidSSL/AR1548/RapidSSLCABundle.txt自分のサーバ用の証明書とこれらを連結します。/path/to/your/ssl/cert.pemnginxを再起動します。4.0.3で正常に読み込まれたことを確認しましたので、一安心。NISTの文書によると、今年の末までに1024bitのRSAは廃止され、2048bitに移行するものとされています。athttp://trac.edgewall.org/。