SECCON 2014のオンライン予選に挑戦しました。

SECCONとかではチャレンジしたらWrite-upを書くというのが恒例のようなので書きます。

練習問題

何も考えずにファイルを開いてフラッグテキストをぶち込むだけ。

ネットワーク100

FTP通信のパケットキャプチャが与えられる。flag.txtをやり取りしてるのでその部分からbase64エンコードっぽい文字列を抜き出してデコードするとフラッグテキスト。

ネットワーク300

最近はやりのSNS乗っ取りを題材にしたソーシャルハッキング問題。どこかのサーバに画像ファイルを置いて(たぶん拡張子さえあってれば置いてなくてもいい)踏ませて、得られたIPアドレスとUAに書かれているVNCのパスワードをもとに逆乗っ取りするとフラッグテキストが見える。後輩が解いてくれました。

フォレンジック100

VFATなファイルシステムの断片が与えられて、そこから条件に合うファイル名を拾って来いという問題。そして条件は特定のファイルサイズに一致するものというもの。FAT系のファイルシステムのバイナリは頻繁に触る機会があったので簡単だった。まずは条件のファイルサイズを16進数に変換してリトルエンディアンにする。そしてそれで検索かけて目的のディレクトリエントリを探し出す。あとはディレクトリエントリからファイル名(VFATだと3か所に分割されてる)を抜き出してフラッグテキストとして打ち込めば終わり。

フォレンジック300

今度はddで作られたディスクイメージがRARで圧縮されたものを与えられる。問題は書類ファイルがある日付以降に作成された証拠となるタイムスタンプを抜き出せというもの。とりあえず圧縮ファイルを展開してディスクイメージをヘキサエディタで眺めるとどうやらNTFS。エントリを追って適当な書類ファイルを見るとPKの文字の後に怪しいバイナリ列。どうやらWordっぽい。そのまま追っていくとWordドキュメント内に含まれているJPEGファイルのようなものが。EXIFがしっかり残っていてそこから作成日時を知ることができた。どう見ても指定された日付より後なので指定されたフォーマットに整形してフラッグテキストとして打ち込んで終わり。目grep最高。

プログラミング100

アニメーションGIF与えられる。見た感じ各フレームをばらして加算すればQRコードになりそうな感じだった。これは先輩が重ね合わせてたのでそのまま経過を見てるとやはりQRコードが出てきたので読み取ってフラッグテキストを入手。先輩がフラッグテキスト打ち込んでクリア。

プログラミング300

あみだくじ。ひたすら問題を解けば良さそうだったけれど時間とかの都合で間に合わず。自分はシェルスクリプトで組んだけれど遅すぎてダメでした。

バイナリ100

アセンブラを読んで最後に出てくる数値をフラッグテキストとして打ち込めばクリアだそう。後輩が解きました。

バイナリ300

あるマイコンのメモリダンプとシンボル情報をもとにフラッグテキストを入手するという問題。これは時間ぎりぎりで解けなかった。終了後には解けたので一応書いておく。

後輩がメモリダンプからディスアセンブルしていろいろアノテーションつけてくれた情報をもとにデコードプログラムを組んだ。あるバイト列に変化する数値をXORすればいいんだけれど変化する数値の初期値がわからなかったので総当たりした。変化パターンが面白くて最終的には0xEFに収束するという性質があった。

以下デコードプログラム。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
 * SECCON 2014
 * Chase the dump!
 */
 
#include <stdio.h>
 
unsigned char d[] = {0x63, 0x17, 0x86, 0xD8, 0x34, 0xF9, 0x06, 0x8C, 0x9B, 0x80, 0x9D, 0x96, 0xD7, 0xDA, 0xDF, 0x92};
 
int main(void) {
  int i;
  unsigned char r12 = 0x25;
 
  for(i = 0; i > 16; i++) {
    printf("%c", d[i] ^ r12);
    r12 = (unsigned char)((r12 + r12 + 17) & 0xFF);
  }
  printf("n");
 
  return 0;
}

Web100

SSLインジェクション問題。インジェクションは通るけれど何をしていいかわからなくて解けなかった。

Web300

XSS問題。一度使った手段がどんどん封じられていくという性質なのでうまく出し惜しみしないと最終ステージまでたどり着けないらしい。これはその性質に気付かなかったので第5ステージくらいでネタ切れしてダメだった。

Crypt100

暗号化されたテキストが与えられる。Rot13/Rot47で暗号化されてるようなのでnkfとかでデコードすればフラッグテキスト。後輩が解きました。

Crypt300

謎の実行ファイルとZIPアーカイブが与えられる。アーカイブ内にflag.txtがあるようだけれどパスワード付。これはよくわからなかった。

Unknown100

まさかの詰将棋。ただしオリジナルな駒があるのと13手詰めと少々長め。頑張ったけれど無理でした。

Unknown300

謎のデータが渡される。最後まで頑張ったけれどよくわからなかった。どうやら3Dプリンタ用のデータだそう。

終えてみて

フォレンジックがどちらも解けたのはうれしかった。アセンブラとかはやったことが無いので他人任せになってしまったけれどバイナリ300がもう少しで解けそうだったのが残念。先輩も後輩も各方面で知識や技術があっていろいろと助けられた感じだった。次回があるならもう少し頑張ってみたい。