新歓CTFを開いたが失敗した 反省と供養
問題
- Web 100: Blind SQL Injection[^1]
- linkはそのうち失効すると思う
- repository
記録
- 目的
- 面白い新入生の把握/確保/保護
- 作製
- SQLi
- 作る側の難易度の都合
- 解く側の楽しさ
- 何らかの”ハッキング”っぽい感じがあるほうがよいという判断
- 実装
- nginx
- php
- 半日程度
- SQLi
- 配置
- VPN
- 難易度
- 十分簡単
- ソースコード付き (重要)
- 必要な知識は全て https://www.google.co.jp/search?q=hoge 等とlinkを張った
- 友人らにtesterを頼んだ
- ゲーム/VRの人間も解いてくれたので、難易度は適切であっただろう
- 告知
- 学内の掲示板に貼り出し
- IPアドレスだけ書いた紙を貼った
- どうすれば最も目を引くだろうかと考えた結果
- とりあえずスマホのブラウザからアクセスなりしてみるだろう、という判断
- 賞品
- 申し訳程度
- indexのページに書いた
- 結果
- 1ヶ月後
- アクセスほぼなし
- user agentがw3mなアクセスがあった
- 教員?
- 何者か気になる
- indexは稀にアクセスがあったが、クエリはまったく飛んでいなかった
- logは気が向いたときにしか確認してないから漏れがあるかも
- user agentがw3mなアクセスがあった
- 張り出した紙の、IPアドレスの数字がひとつだけ切り取られていた
- 丁寧に長方形に切り取られていた
- 数字ひとつが落ちただけなら、高々10回試行すれば当たる
- 何のため?
- やった人間が気になる 合ってみたい
反省
- 明らかな失敗
- 推測される理由
- 技術が好きな人間がいなかった
- 違うだろう
- もし仮にそうだとしてもこれを理由にしていては意味がない
- 人を発見したいのであって、ふるいにかけて排除したい訳ではない
- いないならいないで、興味を持たせればよい
- 問題が難しすぎた/面白そうでなかった
- 違う気がする
- そもそも問題まで辿り着いた人間がほぼいなかった
- 張り出した紙がまずかった
- かなり正しそう
- 張り出した紙をそういう文脈の下で、技術に関心のない友人に見せたところ、「IPアドレスということは分かるが、だから何?」という反応を貰った
- 次はQRコードにでもしようかな
- かなり正しそう
- 技術が好きな人間がいなかった
XSS
@a3VtYQo ☆(ゝω・)v pic.twitter.com/ArpAohveo6
— mage(まげ) (@mage_1868) May 9, 2016
直した。そのファイル自身のpathの取得のため$_SERVER['PHP_SELF']
を使っていた部分があったが、$_SERVER['PHP_SELF']
を使うとquery stringが入ってくるので、$_SERVER['SCRIPT_NAME']
を(必要なら適切にnginxのconfigを弄って、urlの.php
より後ろの部分を削った上で)使わなければならなかった。必死でconfigを弄った。
phpは私には早すぎたらしい。