CSAW CTF Quals 2020 writeup

CSAW CTF Quals 2020に参加しました

夏休み中の部活動ということでbodhiというチームから3人(多分)で参加しました。チームでは255ptで354位でした。

久々に解けた(ちょっと)CTFでwriteupとして書いて良さそうな内容量なので書こうと思いました。50ptは全部ときたかった。割と途中まで行って、そこからわからなくなったものもあった。

Crypto:Perfect Secrecy (50pt)

問題文:Alice sent over a couple of images with sensitive information to Bob, encrypted with a pre-shared key. It is the most secure encryption scheme, theoretically...

渡されたファイル:image1.png , image2.png

f:id:Bigdrea6:20200913193605p:plain f:id:Bigdrea6:20200913193615p:plain




 

 

この問題と同じ問題が過去のCTFにあったようで以下のwriteupを参考に行いました。

Volga CTF 2017:VC(Crypto 50)

compare -compose src image1.png image2.png output.png

できたoutput.pngがこちらです。

f:id:Bigdrea6:20200913201014p:plain ←これはbase64なのでCyberChefになげてdecodeします

flag{0n3_t1m3_P@d!}

この方法初めて知りましたが、おもしろいですね。

Web:widthless (50pt)

問題文:Welcome to web! Let's start off with something kinda funky :)

渡されたURL:http://web.chal.csaw.io:5018

これは一緒に参加していた友達が解いてたもので、途中から一緒にやり始めました。最終的には全員でやった。

 この問題がZero-width space(詳しくはゼロ幅スペース - Wikipedia)っていうのは分かってて、どこの文字列にそれが隠されてるのかいまいちっていう感じという様子でした。URLから飛んで開発者ツールで見ると、怪しい文字列が。

f:id:Bigdrea6:20200913202224p:plain

8203というのはUnicodeでZero-width spaceを表しているようです。というより、これ全部ゼロ幅のやつです。

調べて見たところ一番やりやすそうなのはこれでした。

HackIT CTF 2018 - Get Going - こんとろーるしーこんとろーるぶい

これにそって虚無をコピペしていきます。(consoleでは赤い点で表示されます)

コードを実行して得られたものはb'YWxtMHN0XzJfM3o='これをbase64でdecodeすると、alm0st_2_3zが出てきました。これで終わりだと思っていろいろ入れてみるのですが通りません。ここからはguessです。

サイト上のSignupする部分に手に入れたkeyを入れます。すると以下のように変化します。

f:id:Bigdrea6:20200913203621p:plain←このURLをもとのURLの後ろに貼り付けます。

<pwd>には手に入れたkeyを入れます。するとサイト自体が大きく変わります。

ここからもう一度同じことをします。これは違う友達がやってくれました。

得られたものは755f756e6831645f6d33。変換してu_unh1d_m3 。これをもう一度Signupの欄にいれます。もらったURLを先程貼り付けたURLを消して貼りなおします。

URL:http://web.chal.csaw.io:5018/19s2uirdjsxbh1iwudgxnjxcbwaiquew3gdi/alm0st_2_3z/u_unh1d_m3

flag{gu3ss_u_f0und_m3}

フラグにguessって書いてるけどこれは流石にひどい気がする。めんどくさかったし。

解ききれなかったけど多分途中まで行けてたやつ

Crypto:modus_operandi(100pt)

問題文:Can't play CSAW without your favorite block cipher!

nc crypto.chal.csaw.io 5001

これはブロック暗号ECB、CBCどちらで暗号化されてるかを当て続けるという問題でした。途中から追加されたHintで<200とあったので200回未満当てたらいいということらしいです。始め一人でやってましたが、コードとかうまく書けなくて友達が送ってくれたコードをもとにやってました。

以下、自分のコードではないので載せませんが簡単な判別方法だけ書いておきます。

暗号化の内容については暗号利用モード - Wikipediaで。

まず、plaintext:1234567890abcdef1234567890abcdefと十分な長さのある平文を入れてあげます。返される暗号化された文、ciphertext[:32]==[32:64]のときこの暗号化はECBであると言えます。これを用いて判別していくのですが、どうにも175回目で通信が途絶えてしまいます。そこで手動でやってみましたが、結果は変わりませんでした。どうやるのが正解なのかよくわからなかったです。