ブログの名前なんて適当で良いのでは

説明を求めるな、記事を読め

SUCTF2016 writeupと感想

CTFをある程度本格的に取り組み初めてからは,初めてのチーム戦として,cpawというチームで参加させていただきました.(チームメイトのお二方ありがとうございましたorz) 個人でやっているときとは違い,情報のやり取りがあり,やはりチーム戦は強いなと感じました.その一方で単独で上位に食い込む人の凄さを改めて実感しました.

今回は2問(200pt)解いたのでそれらのwriteupを書きました.どちらもやるだけ問題でしたが, 少し前の自分と比べるとRev150が解けたのはやはりPwnを好きになったおかげだったなぁと少し嬉しかったです.また次回も頑張りたい.今度はPwn頑張りたい.

Rail Fence Cipher[Crypto50]

Decrypt and find the flag.

AaY--rpyfneJBeaaX0n-,ZZcs-uXeeSVJ-sh2tioaZ}slrg,-ciE-anfGt.-eCIyss-TzprttFliora{GcouhQIadctm0ltt-FYluuezTyorZ-

問題名を見た瞬間に,「レールフェンス暗号やな〜」と思ってぼちぼちsolver(ecoparty2015のスキュタレー暗号で使ったsolverを少しいじったver)を書いていました.そしていざ回してみるとなぜかまったくFLAGらしきものが降ってこない...ひたらすらsolverに修正をかけても降ってこない. 諦めてネット上で復号してくれるサービスを使って人力で確認していきました.

http://www.geocachingtoolbox.com/index.php?page=railFenceCipher このサイトでNumber of railsという欄があるのでそこに順番に数字を入れて確認していったところrails = 21でフラグが手に入りました.

A-fence-is-a-structure-that-encloses-an-area,-SharifCTF{QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJt},-typically-outdoors.

FLAG: QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJt

Serial[Reverse150]

Run and capture the flag!

こんな感じのバイナリが渡される.

$ file serial
serial: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26,BuildID[sha1]=77e92e8b1bd4f26641bab4dbf563037a7b9538d2, not stripped

not strippedで一安心. とりあえず実行してみた.

@rev150 ./serial
Please Enter the valid key!
114514810931
Serial number is not valid!

この挙動から入力文字を何かと比較しているんだろうなぁと考えた上でgdb-pedaを使って追っていった.その追った結果を得られた情報をもとに推測すると以下のような処理になっているとわかった.(正確に動作をデコンパイルしたわけではないので...)

key  <- {E, Z, 9, d, m, q, 4, c}
key2 <- {9b, 9b, 9b, 9b, b4, aa, 9b, 9b}
buf  <- 入力
if(strlen(buf) == 16){
    for(i = 0; i < 8; i++)
        if(buf[i] == key[i])
            if(buf[i]+buf[15-i]==key2[i])
            else goto FAIL:
        else goto FAIL:
    puts("Serial number is valid :));
}else{
FAIL:
    puts("Serial number is not valid!");
}

そこでbuf[i]の比較を追ってkey[i]を求めて, key2[i] - key[i]でbuf[15-i]を求めていくと以下のようにフラグになる.

FLAG:EZ9dmq4c8g9G7bAV