1001001

73。CTFのWrite-upや技術的な備忘録を書きとめたいです。

ALEXCTF 2016 Write-up

top

ALEX CTF 2016にチームm1z0r3として参加しました.私が解いたのは2問(+1問)ですが,そのWrite-upになります.

開催概要

  • 開催期間 : 2月3日(金) 17:00 ~ 2月6日(月) 17:00
  • IRC : #alexctf @freenode
  • フラグ形式 : ALEXCTF{[A-Za-z0-9_]*} unless otherwise specified.

結果

1890点87位.悲しみ.なぜか右の円グラフでCRとTRとForeしか解いてないことになってるけどREとかも解いた.result01result02

 

手を付けた問題

  • CR1 : Ultracoded
  • CR2 : Many time secrets
  • CR5 : Bring weakness
  • Fore2 : Mail client
  • Fore4 : Unknows format
  • SC2 : Cutie cat

解いた問題

  • CR1 : Ultracoded
  • CR2 : Many time secrets
  • CR5 : Bring weakness

CR1はチームメイトが解いていたが,情報が全く共有されていなかったのでフラグ形式確認がてら解いた(Ruleを見てもフラグ形式が書いてなかったが普通にトップページに書いてあった).

SC2とか他のCRとかはきゅうりくんが解いた.Foreはわからなかったが2に関しては惜しいところまでGuessingしてた.

Write-up

CR1 : Ultracoded

フラグが何らかの方式でエンコードされてるとのこと.渡されるデータは以下.

ZERO ONE ZERO ZERO ONE ONE ZERO ZERO ZERO ONE ONE ZERO ONE ZERO ZERO ONE ZERO ZERO ONE ONE ZERO ZERO ZERO ZERO ZERO ONE ONE ZERO ZERO ONE ONE ONE ZERO ONE ZERO ZERO ONE ONE ZERO ZERO ZERO ONE ONE ZERO ONE ZERO ZERO ONE ZERO ZERO ONE ONE ZERO ZERO ZERO ZERO ZERO 
...
こんなのがずっと続く

"ONE","ZERO"を"1","0"に直し,ビット列を10進数値にしてlong_to_bytesする.すると base64が出てくるのでbase64デコードする .最後にモールス信号が出てくるのでデコードする

ということをするとフラグっぽいのが出てくる.拾ってきたモールス信号の辞書(CODE)をプログラムで整形(revCODE)してソルバを書く.

"ALEXCTFTH15O1SO5UP3RO5ECR3TOTXT"というのが出てくるので,それっぽいところに{}を入れてO_に変えるとフラグらしい.

The flag is ALEXCTF{TH15_1S_5UP3R_5ECR3T_TXT}

CR2 : Many time secrets

問題は以下.

This time Fady learned from his old mistake and decided to use onetime pad as his encryption technique, but he never knew why people call it one time pad!

One Time PadということはXORか.「なんでOne time padというか知らなかった」ということは複数のメッセージに鍵を使いまわしていそう.ということは与えられたファイルの一行(26文字分)について一つの鍵を使っているのか.XOR問題でヒント無しということは確実に推測できるものが鍵になっているだろう,などと考え,フラグのうち確実に推測できる"ALEXCTF"を含むものを鍵にしようと考え,とりあえず26文字で"ALEXCTF"から"ALEXCTF"を試すと,"ALEXCTFが先頭の時だけ可読な文字が現れたので,この時点で鍵がフラグであると予測.

あとはちょっと読めるようになった文章から,"Dear Fr"ということは"Dear Friend"だろうなとか,"encr"は"encryption"かな,とか推測するという方法,いわゆる古典暗号を解く方法で鍵(フラグ)を特定していった.

XORを取るときは下記のようにした.