Webアプリケーションルール説明に従ってhttp://target.ctf.x86-64.jp/にアクセスすると、「ほげ大学科目データベース」と称する、ネーミングが適当な大学の科目紹介ページに到着します。このページはPythonのFlaskというマイクロフレームワークを使って作られております。いくつかページ上のリンクをたどってみます。http://target.ctf.x86-64.jp/show/GB10114線形代数Iに関する科目説明が現れるhttp://target.ctf.x86-64.jp/show/GB11911データ構造とアルゴリズムに関する科目説明が現れるといったふうに、URLのパスを直接パラメータとして扱っているようです。ここにSQLインジェクションを仕掛けてみましょう。null攻めをします。http://target.ctf.x86-64.jp/show/%27%20UNION%20ALL%20SELECT%20null,null,null,null,null,null,null,null,null,null,@@VERSION;--このように、nullを10個と@@VERSIONを並べてUNIONクエリを発射すると、「備考」欄に5.5.34-0ubuntu0.12.04.1と出現し、SQLインジェクションの成功が確認できます。次に、SQLインジェクションによってどんな操作が行えるか確認しましょう。NOという応答を得ます。FILE権限があるようですね。ローカルファイルインジェクションをやってみましょう。MySQL経由で読み取ってみましょう。http://target.ctf.x86-64.jp/show/%27%20UNION%20ALL%20SELECT%20null,null,null,null,null,null,null,null,null,null,LOAD_FILE(0x2f6574632f6e67696e782f6e67696e782e636f6e66);--こうすると、/etc/nginx/nginx.confを引っ張りだすことができます*1。Foundという結果になってしまうからです。その結果、nginx.confが備考欄に見事に出力され、/etc/nginx/conf.d/ctf.confというファイルをインクルードしていることを暴露します。MySQL経由で読み取るhttp://target.ctf.x86-64.jp/show/%27%20UNION%20ALL%20SELECT%20null,null,null,null,null,null,null,null,null,null,LOAD_FILE(0x2f6574632f6e67696e782f636f6e662e642f6374662e636f6e66);--これにより、nginxで/adminが提供されており、さらに/etc/nginx/conf.d/admin.passwdの存在を知ります。読み取り、クラックするhttp://target.ctf.x86-64.jp/show/%27%20UNION%20ALL%20SELECT%20null,null,null,null,null,null,null,null,null,null,LOAD_FILE(0x2f6574632f6e67696e782f636f6e662e642f61646d696e2e706173737764);--これにより、admin:$apr1$Zbv59eGR$GoMlmiqujrkVOgm8QbMcL/を得ます。Ripperでも使えばクラックできます。ちなみに、パスワードはmanukeです。次は、サーバ自体への侵入を行います。サーバのファイルシステムの/home/ctfを表示するファイルマネージャです。ご丁寧にドットファイル系もばっちり表示してくれるので簡単ですね。https://www.dropbox.com/s/************/id_rsaDropboxに秘密鍵をアップロードするとかとんだお馬鹿さんですね。問答無用でダウンロードし、使ってみましょう。どのユーザに対する鍵か分からないし、そもそもこのid_rsaはパスワードがかかっています。id_rsaのパスワードを解きましょう。あるパスワードを試したり、総当たり攻撃でパスワードを暴いたりすればいけます。ssh-privkey-crackなるツールがあります*2。パスワードはpwnedです。誰に対して使えるキーか、見当をつけましょう。SQLインジェクションに戻ります。http://target.ctf.x86-64.jp/show/%27%20UNION%20ALL%20SELECT%20null,null,null,null,null,null,null,null,null,null,LOAD_FILE(0x2f6574632f706173737764);--これは、/etc/passwdを表示するペイロードです。takashiあたりが狙えそうだということが分かります。このキーが使えるアカウントは、ctfです。/home/ctf直下には偽物しかないので、どこか別のパスに隠されているはずです。/etc以下を調べると、/etc/sudoers.bakという、パーミッション444のファイルが見つかります。/bin/lsたいへんよい。これらの権限を使えば、/home/takashi/Desktop/README.txtを見つけることは容易です。このREADME.txtを読みます。luck!zipファイル中にキーが眠っているようです。先ほどダウンロードしたzipファイルを解凍してみましょう。パスワードがかかっています。なんとこのzipファイル、js/jquery.jsという、みなさんも容易に手に入れることができるファイルが一緒に保管されているのです。zipファイルの暗号は、選択平文攻撃という攻撃に対して脆弱であることが分かっており、実際に暗号化zipを解読するツールもあります。そのひとつが、pkcrackです。(わたしがビルドしたときは)ちょっと人力パッチを当てる必要がありましたが、こいつを使えば、どんなに長いパスワードが使われていようと、zipの暗号を30秒ほどで解いてしまうことができるのです。zipに対する選択平文攻撃を行うためには、jquery.jsを同じアーカイブ方式、同じファイルシステムでzipに圧縮します。jquery.jsを実行すれば大丈夫です。Windowsでやると失敗します。decrypted-lolz.zip解読されたzipを解凍し、HERE_IS_THE_KEYを読み、キーをsubmitする。本来はAppArmorによって保護されている部分ですが、CTFに供するためにわざと脆弱な設定を施しました。​http://neophob.com/2007/10/ssh-private-key-cracker/お疲れ様でした。早着順(敬称略)です。苦労話、与太話ここまでくるともう書くのだるいから箇条書きで。allをcronで定期的に実行するようにした/etc/sudoersを問題に盛り込もうとパーミッションを444にしたら、sudo自体が死んだ/etc/sudoers.bakで代用そんな感じですね。パーミッションがらみでミスってて、先にサーバに到達した参加者に妨害工作を受けたりしました。ここまでのお付き合い、ありがとうございました。全国大会で、そしてtkbctf3で、また会いましょう。athttp://trac.edgewall.org/。