SECCON for Beginners CTF 2019 writeup

SECCON for Beginners CTFに参加しました。
CpawCTFが大体解けるようになって、挑んだのにあまり解けずに落ち込んでます…
もう少し、頑張りたいと思います。備忘録のため、Writeupを書きます。

Reversing

[warmup] Seccompare

https://score.beginners.seccon.jp/files/seccompare_44d43f6a4d247e65c712d7379157d6a9.tar.gz

とりあえずfileコマンド。

$ file seccompare
seccompare: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=4a607c82ea263205071c80295afe633412cda6f7, not strippe

とりあえずobjdumpしました。mainあたりを色々見てくと、この辺が怪しそう。

movbの部分の$0x??の部分をasciiコードに対応させてみると、フラグをゲット。

ctf4b{5tr1ngs_1s_n0t_en0ugh}

Crypto

[warmup] So Tired

最強の暗号を作りました。 暗号よくわからないけどきっと大丈夫!
File: so_tired.tar.gz

encrypted.txtがあったので、とりあえず中を見てみる。

eJwUm7V25UAQBT9IgZjCJ2bmTMzM+vr1xj62R6Pue6t8nkvl9kcqMlfkFzcsIDMhrqEGmmCOg57g9k0wzCFzdg3JMLlq55tPR77GwSsTl4QjB81tYEFti219t7E/T1mGw2pTDEBg4gu23X1BqAiVGgn3G/imxurRCP39QCR9dMsSbAlvJ24nEQV3wrj0So+XxvCil0dzBl1xM4Ne+owDxM4BU+LuHV6w3GIZ0X3bHoWnSGFElxTUXYbL32xYcAxXFdojs+NK9soAbbGs1Br/FSgUQ6bGPrQ6OOIdJUE5CYykUay5+3Iy06UhWct7m1O06p23uDCvQsEy3l/uhD8YpmM9iRkHtXoqIBydIusdssgrF8gD9ABkyavNRzsCF5v2tcDRISB8B90Xq6ljXyilm1oi+ZHhOqnUyO773ALE1kUNs8+4011uG3+wxTpRlNFMZpt7hIrzTuvhOGKCs8iGUQz74Vn5UimptIrM/UTPlXZ4VUVUpXR9Kub8QJ8/AO59mugWibwJnRARtEXGDi648dp3/ZCpVJuD0xlv9gEl2ilxfpw

とりあえずbase64でデコードしてみる。

$ cat encrypted.txt | base64 -d > encrypted

その後、fileコマンド。

$ file encrypted
encrypted: zlib compressed data

zlib形式だとわかる。

調べるとPythonが楽っぽいので、Pythonで展開するコードを書く。

import base64
import zlib

s = '<encrypted.txtの中身>'

print s.decode("base64").decode("zlib")

実行して、無事終わりかなと思ったら、再度base64の内容が表示される。まさかね。というわけで無限ループ。

import base64
import zlib

s = '<encrypted.txtの中身>'

while True:
	s = s.decode("base64").decode("zlib")
	print s

無事、フラグをゲットできました。(他の人のwriteupを見ると、500回くらい繰り返されていたとか。。。

ctf4b{very_l0ng_l0ng_BASE64_3nc0ding}

Misc

[warmup] Welcome

SECCON Beginners CTFのIRCチャンネルで会いましょう。
IRC: freenode.net #seccon-beginners-ctf

IRCのチャンネルに参加して、ヘッダのあたりを見ればOK。

ctf4b{welcome_to_seccon_beginners_ctf}

containers

Let’s extract files from the container.
https://score.beginners.seccon.jp/files/e35860e49ca3fa367e456207ebc9ff2f_containers

ダウンロードして、バイナリで見てみる。

FILE0.の後にPNGのデータがついているように見える。以降、それが連続している。なので、Stirlingを使って、部分的に別ファイルにしていく。順番に画像を並べると、答えが出てくる。

ctf4b{e52df60c058746a66e4ac4f34db6fc81}

Dump

Analyze dump and extract the flag!!
https://score.beginners.seccon.jp/files/fc23f13bcf6562e540ed81d1f47710af_dump

とりあえずfileコマンド

$ file fc23f13bcf6562e540ed81d1f47710af_dump
fc23f13bcf6562e540ed81d1f47710af_dump: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)

拡張子をpcapにして、Wiresharkで開く。

すると、hexdumpでフラグの中身を取得している通信がある。

/webshell.php?cmd=hexdump -e '16/1 "%02.3o " "\n"' /home/ctf4b/flag

レスポンスはこんな感じ。

<html>
<head>
<title>Web Shell</title>
</head>
<pre>
037 213 010 000 012 325 251 134 000 003 354 375 007 124 023 133
...
050 241 022 115 000 060 014 000                        
</pre>
</html>

hexdumpのコマンドを見ると、8進数になっている。
なので、preで囲まれた範囲を抜き出し、別ファイルに保存し、バイナリに変換するSolverを書いてみる。

    class Program
    {
        static void Main(string[] args)
        {
            using (StreamReader sr = new StreamReader(@"C:\Users\rakuha\Downloads\ctg_beginners\Misc\Dump\data.txt"))
            {
                using (FileStream fs = new FileStream(@"C:\Users\rakuha\Downloads\ctg_beginners\Misc\Dump\output", FileMode.Create))
                {
                    string line = null;
                    while ((line = sr.ReadLine()) != null)
                    {
                        string[] values = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string value in values)
                        {
                            int num = Convert.ToInt32(value, 8);
                            fs.WriteByte((byte)num);
                        }
                    }
                }
            }
        }
    }

できたファイルをfileコマンドで見てみる。

$ file output
output: gzip compressed data, last modified: Sun Apr  7 10:46:34 2019, from Unix

tar.gzだったので、展開する。

$ tar xzvf output
./._flag.jpg
flag.jpg

flag.jpgを表示すると、フラグが書いてある。

ctf4b{hexdump_is_very_useful}

IPAの資格持ち(FE,AP,SC,DB,NW)。一応、情報処理安全確保支援士です。セキュリティ関連に興味あり。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です