読者です 読者をやめる 読者になる 読者になる

知ることは、たのしい。

入門レベルの情報系学生が勉強する。同じ分野に初めて興味を持った人への参考になればいいなあ

初心者の初心者による初心者のためのWriteup [CTF(x)]

CTF Writeup python

f:id:lenia23:20160830002400j:plain 今回はあまり時間が取れなかったので、一人での参加です。
簡単な問題しか解けてないのでつらい。

Writeup

EBG13

Qrpelcg guvf sbe na rnfl 1 cbvag! Guvf vf na rknzcyr bs gur synt sbezng:

pgs(ebg13vffhcrefrpher!)

13とflagの形式であるctf()となっているべきところがpgs()になっていることからROT13(シーザー暗号)と予想できます。
実際にpを13文字ずらしてみるとcになるので予想はおそらくあたっています。
先日作ったrot_nを解くプログラム(シーザー暗号を解きながらpythonの勉強 - 知ることは、たのしい。)を使いましょう。

$ python rot_n.py 'Qrpelcg guvf sbe na rnfl 1 cbvag! Guvf vf na rknzcyr bs gur synt sbezng:pgs(ebg13vffhcrefrpher!)' 13 

ctf(rot13issupersecure!)

λ

標準入力から文字列を受けとり、それを並び替えた結果が出力される以下のプログラムを用いてflagを並び替えた
n1s4_t1An(f1ctdb@mpl_h3)m3lp3y__Easを復元する問題です。

print (lambda j,m:(lambda f,t:t if len(t) <= 1 else j([f(f,x)for x in m(j,m(reversed,(lambda s:zip(*[iter(s)]*(len(s)/2)))(t+"\x01"*(len(t)%2))))]))(lambda f,t:t if len(t) <= 1 else j([f(f,x)for x in m(j,m(reversed,(lambda s: zip(*[iter(s)]*(len(s)/2)))(t+"\x01"*(len(t)%2))))]),raw_input("Plaintext:")))(''.join,map).replace("\x01","")

ラムダ式いっぱいの非常に読みづらいコードですね。
見たところ文字列の長さにのみ依存して文字種は関係なさそうなので、
flagの長さである35字を入力して挙動を判断し、復号しようと思います。
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiに対し、MLNJKRQOPDCEABIHFGedfbcighVUWSTaZXYが得られるので、 このML~Yとflagのn1~sを対応させ、ML~Yをソートし、AB~iという順にすればflagが手に入ることがわかります。

c = list('n1s4_t1An(f1ctdb@mpl_h3)m3lp3y__Eas')
m = list('MLNJKRQOPDCEABIHFGedfbcighVUWSTaZXY')
tuple = zip(c,m)
tuple = sorted(tuple, key=lambda tuple: tuple[1])

print ''.join(map(lambda t: t[0], tuple))

出力結果:ctf(1@mbd4_1nsAn1ty_pl3asE_h3lp_m3)

crash

配布されたzipを展開すると、flag.txtがありますが何も書かれていません。
$ ls -a などで隠しファイルを見ると.flag.txt.swpが見つかります。
.swpはvim swap fileのことでvim(vi)でファイルの編集中にクラッシュした時などに
swapに保存してあるファイルの変更情報からクラッシュ前に復元するためのファイルです。 vimでflag.txtを開き、swapファイルから復元するとflagが得られます。 ctf(v1m_is_be77er_than_3macs)

とけなかった

cafebage

普通にjpgファイルを開くとファイルが大きすぎるのか落ちました。GIMPで開いてみると横に長い画像が開け、なんとなくズームしたところ16進数の数値列を発見しました。
Free Online OCR - convert scanned PDF and images to Word, JPEG to Wordなどで抽出しようと試みたのですが、画像を拡大、補正が必要そうで、時間が足りずここで断念しました。 f:id:lenia23:20160830002136j:plain