supereggが送るBeginners CTF 2019 [warmup]So Tired(Crypto)の解説

まずダウンロードしてきた「7e9eb0636de2cad98b1eee3b667aea6c_so_tired.tar.gz」

をtar -xzvfコマンドで解凍するとencrypted.txtがゲットできます。

ますfileコマンドでチェックすると

拡張子が.txtであることから、catコマンドで中身を見てみることにしましょう。

f:id:falconctf:20190526214854p:plain

文字が多くてきもいです。ここで最後に注目します。

f:id:falconctf:20190526215547p:plain

==とあることからBase64エンコードされたものと予想できます。

Base64変換では4文字ずつ変換していき、4文字に満たない分は=記号を追加して4文字にする仕様があります)

base64でデコードを行います。$ base64 encrypted.txt  -d > result.txt(-dでデコード)

catコマンドで中身を見てみます。

f:id:falconctf:20190526222725p:plain

何なんだこれは!?(頭が痛い・・・(>_<))

よくわからないので取り合えずfileコマンドを使って見ましょう。

f:id:falconctf:20190526222210p:plain

なにやらzlibによって圧縮されてるようです。

zlib・・・データの圧縮および伸張を行うためのフリーのライブラリ

ちなみに、今はKali Linuxを使っているが、centos環境でfileコマンドで見てみると次のように表示された。

f:id:falconctf:20190526223408p:plain

なんと、zlibの文字がどこにも見えない・・・ なぜ???

チームメンバーのduckはこれに悩まされていた。かわいそうに(´;ω;`)

次にzlib(ライブラリ)を使って圧縮されているファイルを伸張することを考える。

f:id:falconctf:20190526225313p:plain

このプログラムを実行するとresult2.txtにencrypted.txtの中身がbase64デコードされたものをzlibで伸張された文字列がresult2に格納される。

さっそくcatコマンドで中身を見てみよう。

f:id:falconctf:20190526230309p:plain

何やらまたbase64エンコードされたような文字列が出てきた。

ここで、もしかして問題ファイルのencrypted.txtの中身は何度もbase64エンコードとzlibで圧縮されているのではと予想できます。つまり、エンコードされていない元の文字列がFlagなのではないか・・・・・・・(^▽^)/。

よって次のプログラムを実行してみる。

f:id:falconctf:20190526231950p:plain

デコードできなくなったときにエラーを発することを利用する。つまり、上の図のコードの場合だとエラーがでたときのdataの中身をresult2.txtに書き込むようにしている。

このプログラムを実行した後にresult2.txtを見てみると・・・

f:id:falconctf:20190526233414p:plain

Flagゲットだぜーーーーーーーーーーーーーーーーー