ksnctf write-up #5

問題5 Onion

https://ksnctf.sweetduet.info/problem/5

考察
  • 問題文はぱっと見base64と推測
  • 1回だとだめ。Onionとあるから、何回もでコードすると推測
  • uuエンコードがでてくる。
解法
  • base64で何回かでコードする
b=問題文
import base64
for i in range(20):
    b = base64.b64decode(b)
    print(i, b)
  • 実行結果
14 b'YmVnaW4gNjY2IDxkYXRhPgo1MURRITFVXSY5NFFHNCMtMzo0JTc5N0k3NCRBVQogCmVuZAo=\n'
15 b'begin 666 <data>\n51DQ!1U]&94QG4#-3:4%797I74$AU\n \nend\n'
16 b'm\xe8"\x9f\xae\xbau\xabZ\xe7P\xd0\xd5Ox@n7\xe3\xbf{#\xbe\x00Q\xe9\xdd'
Traceback (most recent call last):
  File "./b64.py", line 102, in <module>
    b = base64.b64decode(b)
  File "/usr/lib/python3.7/base64.py", line 87, in b64decode
    return binascii.a2b_base64(s)
  • 16回目が読めそう。
  • 「begin 666」はuuエンコード形式
  • python3ででコードする
#! /usr/bin/python3
import uu

# 抽出したデータ
b=b'begin 666 <data>\n51DQ!1U]&94QG4#-3:4%797I74$AU\n \nend\n'
# バイナリとして上記変数「b」を保存する
with open('aaa.dat', mode='w+b') as fp:
        fp.write(b)
# 出力したdatファイルを読み込んでuuでコード
uu.decode('aaa.dat', 'o.txt')
  • FLAG
less o.txt