ALEXCTF 2016 Write-up

person 73spicafolder_openCTFaccess_time 2017-02-07

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

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

“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を取るときは下記のようにした.

The flag is ALEXCTF{HERE_GOES_THE_KEY}

CR5 : Bring weakness

問題文は以下.

We got this PRNG as the most secure random number generator for cryptography.
Can you prove otherwise

nc 195.154.53.62 7412

PRNGとは疑似乱数生成器のこと.平方採中法か?線形合同法か?メルセンヌツイスタか?とか言いながら,結局良く分からなかったので,とりあえず1コネクションの中で7万リクエストくらい送って得た乱数を貯めておいてSet型にしたら(重複を消したら)32768個しか残らなかった.何度やっても32768個しか残らないので,32768個を1周期としてループしてしまう超脆弱PRNGであることが分かった.あとはやるだけ.

直してないので煩雑ですがshell(s)の時点でフラグが降ってきます.

The flag is ALEXCTF{f0cfad89693ec6787a75fa4e53d8bdb5}

 

感想

バイナリをやらねばというのはもちろんのこと,フォレンジックもできるようになりたいなという気持ちになりました(今回の問題は微妙だった気もしますが).

ばいなりばいなり

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">