WhiteHat Contest 12 Writeup

この大会は2016/9/10 11:00(JST)~2016/9/11 11:00(JST)に開催されました。
今回もチームで参戦ですが、結果は100点で81チーム中62位でした。
自分で解けた問題1問だけ正解という結果でしたが、その1問をWriteupとして書いておきます。

Crypto002 (Cryptography 100)

8進数が並んでいるように見えるので、それをASCIIコードとして読み込む。

with open('cipher.txt', 'r') as f:
    codes = f.read()

codes = codes.split(' ')

data = ''
for code in codes:
    data += chr(int(code, 8))

print data

その結果以下のようになった。Brainfuck言語かな...。

+++++ +++[- >++++ ++++< ]>+++ +++++ +++.+ ++.<+ ++[-> +++<] >+.<+ +++[-
>---- <]>-- .++++ +++.. +++++ +.<++ +++[- >---- -<]>- ----- --.<+ +++[-
>++++ <]>++ +++.+ +++++ +.--- ----- ..+++ ++++. <+++[ ->+++ <]>++ +.---
--.-- ----. -.+++ +.<++ +++[- >---- -<]>- ----. <++++ ++[-> +++++ +<]>.
<++++ [->-- --<]> .<+++ [->++ +<]>+ +.<++ +[->- --<]> ----- ..<++ +[->+
++<]> ++.<+ ++++[ ->--- --<]> -.<++ ++[-> ++++< ]>+++ .-.<+ +++[- >----
<]>-- -.<++ +++[- >++++ +<]>+ +++.- ----- -.<++ +[->+ ++<]> +++.< +++[-
>---< ]>--- .<+++ +[->+ +++<] >.<++ ++++[ ->--- ---<] >-.<+ +++[- >++++
<]>.< +++[- >+++< ]>+++ ++.<+ ++++[ ->--- --<]> ----. <++++ [->++ ++<]>
+++++ .+++. ----- .<+++ +[->- ---<] >---- -.--. <++++ ++[-> +++++ +<]>+
+.--- --.+. <++++ +[->- ----< ]>--- ----- -.<++ ++[-> ++++< ]>+++ ++++.
.<+++ [->++ +<]>+ +++.< +++++ [->-- ---<] >---- ----- -.<++ ++++[ ->+++
+++<] >.<++ ++[-> ----< ]>.<+ ++[-> +++<] >+++. <++++ [->-- --<]> .-.++
+++.- ----. <++++ [->++ ++<]> .++++ .<+++ [->-- -<]>- ---.+ +++++ ++.--
----- .<+++ [->++ +<]>+ ++.-- ----- --.-- -.<++ +[->+ ++<]> +++++ .<+++
+[->- ---<] >---. <++++ [->-- --<]> ---.< +++++ [->++ +++<] >++.< +++++
[->-- ---<] >--.< +++++ [->++ +++<] >+++. ++.-- ----. ++.-- --.++ +++++
++.++ +++++ +.<++ ++++[ ->--- ---<] >---. <++++ +[->+ ++++< ]>+++ +++++
++.-- ----- .++++ .<+++ ++[-> ----- <]>-- ----. <++++ [->++ ++<]> ++.<+
+++[- >---- <]>-- -.+.< ++++[ ->+++ +<]>+ +++++ +.<++ ++[-> ++++< ]>.<+
++[-> ---<] >--.+ +++++ +.<++ +[->- --<]> ----- .-.<+ +++[- >---- <]>--
-.<++ +++[- >++++ +<]>+ +++++ .---- ---.< +++[- >+++< ]>+++ .<+++ [->--
-<]>- ----. <++++ [->-- --<]> ----- .<+++ +[->+ +++<] >++++ ++.-- ----.
--.<+ ++[-> +++<] >++.< +++[- >---< ]>--. <+++[ ->+++ <]>++ .--.< +++[-
>---< ]>--. <++++ [->++ ++<]> +++++ +++.< ++++[ ->--- -<]>- ----. <++++
[->-- --<]> --.<+ ++[-> +++<] >++.. .<

Brainfuckオンラインツール https://sange.fi/esoteric/brainfuck/impl/interp/i.htmlで実行してみると、次のテキストになる。

KNXFMMS2GNFFMYTNMQ3WGRDDO5HG4QJVJZ5ES6KNI42XST2IIV3WGSCBGBRVIQJVMJXE2M2NPJLHQY2UNR3E23JZOVHG4SLXJ5KECNCNLAYD2===

アルファベットが全部大文字なので、Base32かも...。
https://emn178.github.io/online-tools/base32_decode.htmlでBase32デコードすると、以下のようになった。

SnV2Z3JVbmd7cDcwNnA5NzIyMG5yOHEwcHA0cTA5bnM3MzVxcTlvMm9uNnIwOTA4MX0=

今度はBase64デコードする。

$ echo 'SnV2Z3JVbmd7cDcwNnA5NzIyMG5yOHEwcHA0cTA5bnM3MzVxcTlvMm9uNnIwOTA4MX0=' | base64 -d
JuvgrUng{p706p97220nr8q0pp4q09ns735qq9o2on6r09081}

http://www.geocachingtoolbox.com/index.php?lang=en&page=caesarCipherでROT13の復号をするとフラグになった。

WhiteHat{c706c97220ae8d0cc4d09af735dd9b2ba6e09081}