math314のブログ

主に競技プログラミング,CTFの結果を載せます

SECCON 2014 オンライン予選(日本語) Writeup

SECCON 2014 オンライン予選(日本語) Writeup

チーム Mr.Takeda で,5人(@aki33524,@chibiegg,@haru2036,@misodengaku,@__math) で出ていました. 結果としては4位で全国大会出場決定,すごい.

誰かわからないけど竹田さんに迷惑じゃないか心配になってきた.

f:id:math314:20140720152945p:plain

私は あみだくじ(プログラミング 300),ダンプを追え!(バイナリ 300)と,箱庭XSSリターンズ(Web 300)の部分点を取りました. 箱庭はみんなでワイワイしながら得点しました.

あみだくじ(プログラミング 300)

amida という64bit ELFが与えられる.

起動すると,

1 2 3 4 5 6 7 8
| | | | | | | |
|-| | | |-| |-|

...
| |-| |-| | |-|
        *

みたいなあみだくじがどんどん与えられるのでそれを解く. 解くだけでFlag取れるっぽいので,てきとうにスクリプト書いた.

あみだくじが横向いたりしたけど,最後まで1~8で良心的な問題,最後に1 ~ 500でも出てくるのかと思ってた.

1000問解いたらFlagが出てきた.

コードはgistに.

https://gist.github.com/math314/fab1445b9d91d88abca8

ダンプを追え!(バイナリ 300)

今手元にファイルがないのでダンプは省略.

V850とかいうののアセンブラが出てくる. リファレンス読みながら重要っぽいところだけCに直すとこうなる.

typedef unsigned char byte;
void decrypt(byte *data,int size){
    byte key = (byte)size;
    for(int i = 0; i < size; i++){
        data[i] ^= key;
        key = key * 2 + 17;
    }
}

xor なので,dumpに残ってるデータをもう一回この関数に飲ませて出力する.

結果 ,???????tory850} と出力された.?は文字化けしてる.

history850ではないし…と思ってチームの人に聞いたら,@aki33524がVictory850じゃないかとのこと.

正解だった,エスパー.

箱庭XSSリターンズ(Web 300)

.Netのアプリケーション.

packされているのでまずunpackする.

難読化されているが,btnReloadとかbtnNewとかそんな変数が見える,EventHandlerっぽい関数が見えるので,btnReloadのILを書き換えて,リロードしたらステージ20に進むようにした.

でもなぜかXSSが成功すると例外発生して落ちてしまう,

もしかするとこれは正攻法ではないのでは…と思い始めてまともにXSSを書き始めて部分点だけ貰った.

XSSの判定関数を書き換えると良かったらしい. 正規表現使って判定してる場所が合ったのでそこを書き換えるべきだった.

感想

得意分野が少なくて死にそうだったけど,主にmisodengakuが覚醒して4位になれて良かった,エスパー力がほしい.