はじめに
picoCTF 2024は米カーネギーメロン大学の主催するオンラインCTFイベントで、2024年3月13日~26日(日本時間)に亘って開催された。
当記事では、その中で出題されたCryptoジャンルの問題「interencdec」のwrite-up を述べ、所感を添える。
なお、write-upを読む前に問題を思い出したい、試したい、あるいは元の問題を知らない読者の皆様は、過去問を実際に解くことのできる公式アーカイブpicoGymを訪れて戴きたい。(要アカウント登録)
interencdec write-up
- 与えられた文字列を観察する
YidkM0JxZGtwQlRYdHFhR3g2YUhsZmF6TnFlVGwzWVROclgyMHdNakV5TnpVNGZRPT0nCg==
- 末尾が=でパディングされるのはbaseXX系のエンコーディングの特徴なので、片っ端から確認する
最も有名であろうbase64より確認すると、デコード結果は次の通り。
b'd3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrX20wMjEyNzU4fQ=='
その他、base64以外のものでデコードするも、asciiには見えない何らかのバイナリに化ける。
(ここで相当悩んでしまう) - シングルクォート'はbase64のデコード結果に含まれない文字列、ということに気付き、「b」とシングルクォートに囲まれた文字列とに分ける
d3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrX20wMjEyNzU4fQ==
- 改めて見てみれば、末尾が=でパディングされているため、再度base64でデコードする
wpjvJAM{jhlzhy_k3jy9wa3k_m0212758}
- 謎の文字列に見えるが、
xxxxXXX{blablabla...}
の形であり、これがフラグ形式の
picoCTF{foobar...}
と形が似ており、何らかの換字がなされていると予想
先頭の文字が「p」と仮定して、'p'-'w'=-7
中括弧{}を除いてすべての文字列を-7だけシフトさせて
picoCTF{caesar_d3cr9pt3d_f0212758}
所感
途中で長考した、b'(実際のペイロード)'の部分など、エンコードした側の人間にとっては覚えて起きやすいちょっとした加工でも、それを読み解く側にとってはそれなりの気付きを要してしまった。
一般家庭などで使われる錠前などもそうで、絶対に破られない錠前はなく、窓を割るなどバイパスもある中で、普段それを利用する本来の住人が鍵で簡単に開けられて、それ以外の人にとってはそれほど簡単ではない、そのギャップを身をもって体験した。
REDT的発想でいえば、ペイロードを送り込む際、既成の難読化ツールやパッカー等で隠しても、それが機械的である限り検知する側も逆操作を簡単にできてしまうが、思わぬ内容を一つ加えるだけでも検知されずに送り込める可能性が高くなるのではないか。