ペンギン技術 blog

CTFのWriteupなどを記載していこうと思います

setodaNoteCTF Writeup [Misc]

Misc

Welcome

Webのターミナルにログインしてフラグファイルをcatで見るだけ

$ cat welcome.txt 

  Welcome to the setodaNote CTF!!

  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
  *                                 *
  *   flag{Enjoy_y0ur_time_here!}   *
  *                                 *
  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

morse_one

友人から「秘密のメッセージを送るね」とあるテキストファイルが送られてきました。
どうやらそのままでは読めないようです。添付されたファイルを解析し、秘密のメッセージを見つけ出してください。

フラグは得られた文字列を flag{} で囲んで答えてください。
フラグに英字が含まれている場合はすべて大文字で答えてください。
例えば得られた文字列が Flag の場合は flag{FLAG} となります。

問題タイトルより、モールス信号か
DDDBSDDSBDDDSDBDSBBBSDBBDSDBDDSDSBDDB

D dot
S silent
B bar
として、以下に変換してみた
..._ .. _... ._. ___ .__. ._.. . _.._

以下で変換 https://morsecode.world/international/translator.html
VIBROPLEX

最初、意味のない単語ができたので、外れかと思い、変換をいろいろ試行錯誤して時間を無駄にした
(モールス信号をカタカナに変換するサイトなどもある)
が、なんと、フラグはモールスキーのブランドだった・・・

Vibroplexは、1904年にニューヨーク市のHorace Greeley Martinが発明し、特許を取得した後、
VibroplexCompanyが1905年に最初に製造および販売したサイドツーサイドの機械式半自動モールスキーのブランドです。
ウィキペディア(英語)

Hash

ハッシュを求める問題

% shasum -a 256 * | grep aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7
aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7  pass024.txt
% shasum -a 256 * | grep 8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb
8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb  pass034.txt
% shasum -a 256 * | grep e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962
e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962  pass079.txt
% cat pass024.txt pass034.txt pass079.txt

F

難解言語Brainfuck

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

Brainfuck Language - Online Decoder, Translator, Interpreter https://www.dcode.fr/brainfuck-language

FLAG is

magic_number

flag is flag{[89 50 4e 47][52 61 72 21][ff d8 ff e0]}

ファイル種別を示すマジックナンバーでファイルを見分ける問題
.PNG
Rar!
JPEGファイル FF D8 FF E0

flag is

Stegano

うさみみハリケーンの「AoZoraSiroNeko.exe」にてステガノグラフィー解析を行う

以下にて画像に文字列が認識できた
「赤色 ビット4抽出」
flag{Re4l17y_

「XOR(すべてのビットを反転)」
1s_cReA73d_by

「青色 ビット4抽出」
_7h3_m1nd_rA9}

morse zero

友人から「マジの秘密のメッセージを送るね」とあるテキストファイルが送られてきました。
どうやらマジでそのままでは読めないようです。添付されたファイルを解析し、
マジの秘密のメッセージを見つけ出してください。

フラグは得られた文字列を flag{} で囲んで答えてください。
フラグに英字が含まれている場合はすべて大文字で答えてください。
例えば得られた文字列が Flag の場合は flag{FLAG} となります。

問題タイトルより、モールス信号と思われる
パット見で、Zだけだとおもいきや、バイナリエディタでみるといろいろ含まれている

E2 80 8C E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8B  ............Z...
5A E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8C E2 80  Z.........Z.....
8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8B E2 80  ..........Z.....
8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80  .............Z..
8B E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8C E2 80  .......Z........
8C E2 80 8C E2 80 8C 5A E2 80 8C E2 80 8B E2 80  .......Z........
8B 5A E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B E2  .Z...Z..........
80 8B 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2  ..Z.............
80 8B E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B 5A  .....Z.........Z
E2 80 8B E2 80 8C E2 80 8C E2 80 8B 5A E2 80 8B  ............Z...
E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8C E2 80 8B  ...Z............
5A E2 80 8B                                      Z...            

値は5種類ある?

E2
80
8C
8B
5A

カタマリに注目すると、値は以下の3種類

E2 80 8C
E2 80 8B
5A

余計な文字を消す

E2 80 8C E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8B 5A E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8C E2 80 8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80 8B E2 80 8C E2 80 8C 5A E2 80 8B E2 80 8C E2 80 8C E2 80 8C E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8B 5A E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B E2 80 8B 5A E2 80 8B E2 80 8B E2 80 8C E2 80 8C E2 80 8B E2 80 8C 5A E2 80 8B E2 80 8B E2 80 8B 5A E2 80 8B E2 80 8C E2 80 8C E2 80 8B 5A E2 80 8B E2 80 8C 5A E2 80 8C E2 80 8B E2 80 8C E2 80 8B 5A E2 80 8B
E2 80 8C→ドット
E2 80 8B→ハイフン
5A→スペース

..-- - -.- ..... --..-. -.. -.... .-- . ---- --..-. --- -..- -. .-.- -
サイバーシェフにて変換
TK5D6WEOXNT
→ハズレ

E2 80 8C→ハイフン
E2 80 8B→ドット
5A→スペース

--.. . .-. ----- ..--.- .-- .---- -.. - .... ..--.- ... .--. .- -.-. .
サイバーシェフにて変換
https://gchq.github.io/CyberChef/#recipe=From_Morse_Code('Space','Line%20feed')&input=LS0uLiAuIC4tLiAtLS0tLSAuLi0tLi0gLi0tIC4tLS0tIC0uLiAtIC4uLi4gLi4tLS4tIC4uLiAuLS0uIC4tIC0uLS4gLg
ZER0_W1DTH_SPACE

ransom_note

NPIEWI-DECRYPT.txtよりランサムウェアの名前がわかる

No More Ransom ProjectからGANDCRAB V5.0.3の暗号化解除ツールをダウンロードする
https://www.nomoreransom.org/ja/decryption-tools.html

対象フォルダを指定して、ツールを実行する
secret.txt.npiewiがsecret.txtとなったので開く

Nothing

空白とタブと改行(\n)でできたファイルが渡される

柿こけらエンコードと思ったが、違う?
以前似たようなのを解いた気がするが・・・

こんな記事も
https://news.mynavi.jp/article/20210207-1691845/ 分析した結果、ファイルの末尾にタブと空白で構成された見えないコードが用意されており、
そのコードによってマルウェアとして動作する仕組みになっていたとされている。

「space tab decode」でGoogle検索

Whitespace Language
https://www.dcode.fr/whitespace-language

上記にてデコードできた
FLAG is

i_knew_it

「このアセンブリ、見た瞬間あなただと分かりましたよ。」

ある暗号方式の名称がフラグになっています。添付ファイルからその暗号方式の名称を特定し、
フラグ形式で回答してください。

フラグに英字が含まれている場合は、すべて大文字で答えてください。
例えば This_is_FLAG が得られた場合は flag{THIS_IS_FLAG} となります。

アセンブラ読めないので、解けていなかったが、適当に暗号方式を入力したら当たってしまった)

Redacted

黒塗りされたPDFファイルが渡される

Microsoft WordでPDFを開くと、Word文書に変換してくれる
変換後、黒塗りをオブジェクトとして動かせるので、フラグが見える

strong_password

ZIPファイルのパスワードを解除する問題
パスワード生成規則は以下
7ZIPでファイルを見るとファイルの作成日時は20210713(関係なかった)

<パスワード設定規則>
・使用可能な文字種は以下とする
・英大文字 A~Z
・英小文字 a~z
・数字 0~9
・記号 6 種(@、#、$、%、!、-)
・パスワードの形式は以下とする
・[案件コード] + [記号1] + [年月日] + [記号2]
・パスワードの各要素は以下の規則に従い設定する (例:Abc#20200401$)
・案件コード:案件を示す英字 3 文字。大文字小文字は任意。
・年月日:年月日を表す数字 8 桁(利用日に合わせ都度変更すること)。
・記号1:記号 1 字を入れる。
・記号2:記号 1 字を入れる。

以下のようなプログラムで解凍を試みたが、時間がかかりすぎる
アルファベットがすべて同じaaaからZZZまでに限定するとだいぶ速いが、
20200401から20210731まで総当たりしたが、こちらもダメ

総当たりの場合、一台のマシン(1CPU)では、一晩で一か月分ちょっと程度
複数のマシンで日付を分割して試したところ、運よく24時間程度(?)で解凍できた

# extract password zip
import zipfile
import string
import sys

filenameOut = "/home/user/passZIP_test"

kigou = ['@','#','$','%','!','-']

# アルファベットのaからZまでがつながった
# 「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」
# という52文字の文字列が取得できます。
aZ1 = []
for i in string.ascii_letters:
  #print(i)
  aZ1.append(i)

yyyy = 2021
print ("{}年".format(yyyy))

filenameIn = "./TopSecret.zip"
#filenameIn = "./dummy.zip"

for mm in range(1,8): # monty
  print("{}月".format(mm))
  sys.stdout.flush() # 明示的にflush nohupで都度ログが出るように
  for dd in range(1,32): # day
    print("{}日".format(dd))
    sys.stdout.flush() # 明示的にflush nohupで都度ログが出るように
    for i in range(52):
      for j in range(52):
        for k in range(52):
          for l in range(6):
            for m in range(6):
              passStr = "{}{}{}{}{}{:02}{:02}{}".format(aZ1[i], aZ1[j], aZ1[k], kigou[l], yyyy,  mm, dd, kigou[m])
              #print (passStr)
              try:
                with zipfile.ZipFile(filenameIn) as pass_zip:
                  pass_zip.extractall(filenameOut, pwd=passStr.encode("utf-8"))

              except Exception as e:
                pass
                #print(e)
              else:
                print('finish (zip extracted)')
                quit()

2021年2月28日が正解だった
(なぜかはわからない。多分ヒントはなかった)

正解はqYL%20210228!であり、思ったより複雑なパスワードだったが、
生成規則とマシンパワーがあれば解凍できてしまうことがわかった

$ cat TopSecret.txt
このパスワードが安全なはずがない。

flag{xxxxx}