supereggが送るBeginners CTF 2019 [warmup]So Tired(Crypto)の解説
まずダウンロードしてきた「7e9eb0636de2cad98b1eee3b667aea6c_so_tired.tar.gz」
をtar -xzvfコマンドで解凍するとencrypted.txtがゲットできます。
ますfileコマンドでチェックすると
拡張子が.txtであることから、catコマンドで中身を見てみることにしましょう。
文字が多くてきもいです。ここで最後に注目します。
==とあることからBase64でエンコードされたものと予想できます。
(Base64変換では4文字ずつ変換していき、4文字に満たない分は=記号を追加して4文字にする仕様があります)
base64でデコードを行います。$ base64 encrypted.txt -d > result.txt(-dでデコード)
catコマンドで中身を見てみます。
何なんだこれは!?(頭が痛い・・・(>_<))
よくわからないので取り合えずfileコマンドを使って見ましょう。
なにやらzlibによって圧縮されてるようです。
zlib・・・データの圧縮および伸張を行うためのフリーのライブラリ
ちなみに、今はKali Linuxを使っているが、centos環境でfileコマンドで見てみると次のように表示された。
なんと、zlibの文字がどこにも見えない・・・ なぜ???
チームメンバーのduckはこれに悩まされていた。かわいそうに(´;ω;`)
次にzlib(ライブラリ)を使って圧縮されているファイルを伸張することを考える。
このプログラムを実行するとresult2.txtにencrypted.txtの中身がbase64デコードされたものをzlibで伸張された文字列がresult2に格納される。
さっそくcatコマンドで中身を見てみよう。
何やらまたbase64エンコードされたような文字列が出てきた。
ここで、もしかして問題ファイルのencrypted.txtの中身は何度もbase64エンコードとzlibで圧縮されているのではと予想できます。つまり、エンコードされていない元の文字列がFlagなのではないか・・・・・・・(^▽^)/。
よって次のプログラムを実行してみる。
デコードできなくなったときにエラーを発することを利用する。つまり、上の図のコードの場合だとエラーがでたときのdataの中身をresult2.txtに書き込むようにしている。
このプログラムを実行した後にresult2.txtを見てみると・・・
Flagゲットだぜーーーーーーーーーーーーーーーーー