ヾノ*>ㅅ<)ノシ帳

技術ブログに見せかけて、ジャンル制限のないふりーだむなブログです。

ctf4b奈良A&Dで悔しい思いをした話

attack-and-defense.doorkeeper.jp

に「友利奈緒キャンプ」で参加しました。結果は下位(◞‸◟)

チーム構成は

  • 友利奈緒
  • たかき(ってひと)
  • とっきー
  • はいひる

というセキュキャン2015オンリーのメンバーです。

f:id:katc:20151017172014j:plain

問題

Web

何かの会員サイトがテーマでした。特定のページが無認証でアクセスでき、そのページでは会員の個人情報が丸々見えてしまうので、適当にスクレイピングしてcsv形式で提出して1000点ずつ得点を稼ぐような問題です。 お察しの通り、現地は1000点取られた(Damageが1000点加算した)チームが続出し、SecCap_KOがAttack Score 13830を稼ぐという地獄絵図となりました。うちも例外なく取られました。

ssh

各チームのサーバーのpiユーザーにsshログインします。commandという実行可能なファイルが置かれています。実行すると得点対象になるコードが現れます(kG4sbJZu)。

$ ssh pi@10.0.17.1
pi@10.0.17.1's password: 
Last login: Fri Oct 16 20:02:44 2015 from 172.16.13.1
bash-4.2$ ./command
Return-Path: <koide@ai.kyutech.ac.jp>
X-Original-To: koide@ai.kyutech.ac.jp
Delivered-To: koide@ai.kyutech.ac.jp
Received: from [192.168.1.101] (st0995.nas811.p-fukuoka.nttpc.ne.jp [210.136.142.131])
        by mail.ai.kyutech.ac.jp (Postfix) with ESMTPS id D9672660B5
        for <koide@ai.kyutech.ac.jp>; Mon, 12 Oct 2015 18:16:37 +0900 (JST)
From: Koide Hiroshi <koide@ai.kyutech.ac.jp>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Subject: Love letter for you
Message-Id: <1955675C-B9BD-44B5-8D3F-ABFB550E97E5@ai.kyutech.ac.jp>
Date: Mon, 12 Oct 2015 18:16:37 +0900
To: Koide Hiroshi <koide@ai.kyutech.ac.jp>
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
X-Mailer: Apple Mail (2.2104)

Dearest Raspberry,

I love you. The secret code is kG4sbJZu.

piユーザーのパスワードは初期設定ではraspberryです。これは午前中のチュートリアルで教わったことであります。 早いもんがちで提出すると100点もらえます。 commandはSSHのデーモンを止める役割もあったそうです。

次第

うちのチームで起こったことを僕が把握している限り順に列挙します。

  • 数十分後にはSSHのデーモンが止まる。以降sshを使って何もできなくなる
    • どうしようもない状況では運営に助けてもらう(rebootしてもらう)ことも可能らしい
  • 友利奈緒がsshのcommandでポイントをとれることを確認
    • サーバーの番号とチーム名の対応がわからなくて得点をとるまでに時間がかかった
  • 開始1~2時間以内に、はいひるがWebで100件丸々個人情報をとれるページを発見
    • たかきがsubmitしたが得点にならなかったらしい
  • 一時4位まで上がる
  • 友利奈緒キャンプ1000点持ってかれる
  • 友利奈緒が例のページの情報を使って得点できることを確認
  • Webサービスが停止。Defense Scoreが入らない状況になりますます下位に転落
    • 後半のDefense Socreの倍掛けの恩恵を受けられなかった

反省点

  • SecCap_KOがごっそり点稼ぎを始めるよりもずっと前に1000点ずつ得点する方法がわかっていたのに、それはできない方法としてまかり通ってしまっていた
    • 1000点とられるまで、チームの誰かの失敗報告を完全に信用してしまったのが敗因
    • これ使えるかもって思ったら、サービスを止められる前にクロールして保管しておくと良かったかも
    • 1000点取るスクリプトは書くには難しくないのに、それの正規表現の部分で詰まってしまったのはしょぼい
    • onlineのregrex testerを使えば書きやすかったのに、かっこつけてそれを使わなかったのは完全に雑魚
    • 正規表現を書く力が弱すぎてダメ
  • 1000点とられる前にWebを止めるという英断ができなかった
    • 意思決定が圧倒的に遅すぎた

最後に

curlでまとめて取ってきた個人情報(HTML形式)をスクレイピングして提出できる形式に直してくれるスクリプト

gist.github.com

iptablesでボット以外からのアクセスを弾くアイデア賢すぎる(ネットワークアドレスを変えてアクセスしてきたチームがあったそうだが)