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

学習の栞

学びたいことと、学ぶべきことと、学べることの区別がついてない人間の進捗管理

WhiteHatCTF2016 WriteUp

WhiteHatCTF2016にチームHarekazeで参加しました。400点分の write up

write up

Bun cha (crypto 100pts)

やるだけ。diffie-hellmanの鍵共有でメッセージをやり取りしていたと書いてあるが、渡される暗号文やら公開鍵やら見てみるとmod取ってない。何も考えずに割ると平文が出てくる。

flag : WhiteHat{sha1(Bun_cha_ca)}

Banh cuon (crypto 200pts)

やるだけ。RSAでやりとりしたと書いてある。pもqも合成数ということが問題。しかし、p1, p2, ..., p5と怪しい数が書かれていて、試してみるとpqの(確率的素数判定で間違ってなければ)素因数はp1, p2, ..., p5, (pq) / (p1*p2*...*p5) の6つであるとわかる。あとはRSAと同じ理屈でeの逆元をmod phi(pq) = (p1 - 1) * (p2 - 1) * ... でとればよい。

flag : WhiteHat{ff94658cf7612e7f68de6d960caf6f9b92e8a4a4}

English version

需要があるようなので英語版の解説もつけときますね.
Sorry for my poor English skill.

Solution is simple.
We should notice the fact p and q are composite number. There are suspicious numbers p1 to p5. In fact, p1 to p5 are divisor of product of p and q. Moreover, p1, p2, …, p5 and (pq)/(p_1 p_2 p_3 p_4 p_5) are prime. Thus, the prime factorization of pq is p_1 p_2 p_3 p_4 p_5 ( (pq) / (p_1 p_2 p_3 p_4 p_5) ) .

So, we could calculate d such as  ed \equiv 1 (\mod \phi(pq)) and decipher the cipher text c by calculate c^d (\mod pq).

The flag is WhiteHat{ff94658cf7612e7f68de6d960caf6f9b92e8a4a4}

Banh da Ke (misc 100pts)

やるだけ。対話的なプログラムがサーバの上で走っていて、コマンドを実行してくれる。ただし、catやlessやheadなどのコマンドは受け付けない。0 - 9999 の10000個のディレクトリの中に"乱数.乱数"という名前のファイルがフラグ文字列の長さと同じ数だけ作られ、そのそれぞれにフラグの文字がひとつづつ書き込まれている。なお、ファイルに書き込まれる文字のフラグ文字列中での順序と、フラグの文字が書き込まれたディレクトリの数の順序は一致する。

catが使えなければgrepを使えばいいじゃない。ということで grep -r "." で dirname/filename/:Fの形式の出力が得られる。あとはディレクトリ名をキーにしてソートしてフラグを復元するだけ。

flag : WhiteHat{sha1(WhiteHat{ke3p_c4lm_4nD_try_h4rd})}

WhiteHat{}ごとsha1とらないといけないところが悪質。

感想

自明問しか解けてなくてつらい。