th0x0472.log

アクセスカウンタ

zoom RSS #SECCON の問題 Vigenere を #シェル芸 で解きます

<<   作成日時 : 2016/12/11 15:25   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

今回は個人的な事情により、ぼっち参加してました。
問題 Vigenere を、せっかくなので #シェル芸 で解きます。要はWrite upです。

問題はこちら。

k: ????????????
p: SECCON{???????????????????????????????????}
c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ

k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe



親切に問題の最後に、Vigenere cipher についてのWikipediaへのリンクがあり、読むとシーザー暗号をちょっとめんどくさくしたものらしいですが、換字ならシェル芸で解けそうと思うのはごく自然な発想です。

まずはVigenère table を書いたファイルを用意します。というか、この文字列パターン最近流行りましたね。その時のを流用します。

A="ABCDEFGHIJKLMNOPQRSTUVWXYZ{}"
eval echo "\${A:"{0..27}":28}\${A::27}" | grep -o '[^ ]\{28\}' > vtable


ブレース展開で引数増殖最高です。ついでにevalも最高です。

暗号文もファイルに入れておきます。

echo LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ > c


こうすると、SECCONLMIG}RP と置換されていることが分かります。

$ cut -c 1-7 c
LMIG}RP


では、これを頼りに k を探します。

$ P=" SECCON{" ; for N in {1..7}; do grep "^${P:${N}:1}" vtable | grep -o . | cat -n | grep $(cut -c ${N} c) | awk '$0=$1' ; done | while read N ; do cut -c ${N} <<< $(head -1 vtable); done | xargs | tr -d " "
VIGENER


というわけで、 k の最初の7文字は VIGENER であることが分かりました。
問題名とつながりました。

k は12文字、Vigenere で8文字なので、後4文字です。ほんとは } が Q に置換されてることも使えば後1文字特定できそうですが、勘とお約束で CODE だろーと当たりをつけます。

とりあえず十分な長さのKをつくって変数に入れます。

$ K="VIGENERECODE"; K=" $K$K$K$K"; echo "${K}"
VIGENERECODEVIGENERECODEVIGENERECODEVIGENERECODE


解きます。

$ for N in {1..43}; do grep "^${K:${N}:1}" vtable | grep -o . | cat -n | grep $(cut -c ${N} c) | awk '$0=$1'; done | while read N ; do cut -c ${N} <<< $(head -1 vtable) ; done | xargs |tr -d " " | tr -d "\n" |md5sum
f528a6ab914c1ecf856a1d93103948fe -


というわけで、フラグゲット出来ました。

SECCON{ABABABCDEDEFGHIJJKLMNOPQRSTTUVWXYYZ}

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
#SECCON の問題 Vigenere を #シェル芸 で解きます th0x0472.log/BIGLOBEウェブリブログ
文字サイズ:       閉じる