picoCTF2021 General Skills WriteUP
待ってたよpicoCTF, おかえり。
picoCTFの本大会が2年ぶりに帰ってきました。
IPAの試験と被ってたので、今回もディレイ参加です。
ということで今回はGeneral SkillsのWriteUPです。
General Skills
- Obedient Cat (5pt)
- Python Wrangling(10pt)
- Wave a flag(10pt)
- Nice netcat...(15pt)
- Static ain't always noise(20pt)
- Tab, Tab, Attack(20pt)
- Magikarp Ground Mission(30pt)
Obedient Cat (5pt)
ダウンロードしたファイルを調べると普通にテキストだったので、
cat
コマンド実行して中身を確認するだけ。楽勝。
% file flag flag: ASCII text % cat flag picoCTF{s4n1ty_v3r1f13d_2fd6ed29}
Python Wrangling(10pt)
Pythonスクリプトende.pyとpw.txt、そしてflag.txt.enを渡されたので、
Pythonスクリプトの使い方を確認する。
pw.txtとflag.txt.enの中身は以下。ende.pyの中身が暗号化・復号スクリプトの
ようなので、これを使ってflag.txt.enを復号する
% cat flag.txt.en gAAAAABgUAIWIvSiR0W23DAHIK5DX6Y4BvwES94M_XdDcNAquhp-A0D2z8n812YEXaSD9WhoweBh2cm5Wa0cqzuW0Kc7fOct0OJnpOmVF8A91j0Hx4dKtvk3l5ghPT71Y7GxErPRyJUs% % cat pw.txt ac9bd0ffac9bd0ffac9bd0ffac9bd0ff
必要なモジュールのインストールだけして、スクリプトの中身を確認すると、
引数が必要らしい。
usage_msg = "Usage: "+ sys.argv[0] +" (-e/-d) [file]" help_msg = usage_msg + "\n" +\ "Examples:\n" +\ " To decrypt a file named 'pole.txt', do: " +\ "'$ python "+ sys.argv[0] +" -d pole.txt'\n"
おそらく-d
で復号されると思うので、指示に従って実行。
python ende.py -d 復号したいファイル名
でいけるはず。
パスワードは、pw.txtの中身をそのまま入れる。
% python ende.py -d flag.txt.en Please enter the password:ac9bd0ffac9bd0ffac9bd0ffac9bd0ff picoCTF{4p0110_1n_7h3_h0us3_ac9bd0ff}
Wave a flag(10pt)
とりあえずプログラムをダウンロードして中身を見てみる。
% file warm warm: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=01b148cdedfc38125cac0d87e0537466d47927b1, with debug_info, not stripped
バイナリファイルなので、バイナリエディタに突っ込むか、strings
コマンドで文字を探す。
今回は難読化はされておらず、すぐ見つかった。
% strings warm ----中略----- Hello user! Pass me a -h to learn what I can do! Oh, help? I actually don't do much, but I do have this flag here: picoCTF{b1scu1ts_4nd_gr4vy_f0668f62} I don't know what '%s' means! I do know what -h means though!
Nice netcat... (15pt)
nc
でサーバにアクセスしろと言われたのでアクセスするが、
当然それだけでflagもらえるわけがない。知ってた。
% nc mercury.picoctf.net 21135 112 105 99 111 67 84 70 123 103 48 48 100 95 107 49 116 116 121 33 95 110 49 99 51 95 107 49 116 116 121 33 95 97 102 100 53 102 100 97 52 125 10
皆大好き、ASCII変換を疑う。CyberChefでDecimalからデコードするとflag出現。
Static ain't always noise(20pt)
多分想定と違う解き方をした気がする。バイナリファイルをヒントのシェルスクリプトを
手がかりにフラグ探して、という問題だったが、シェルスクリプト読まずにstrings
で完封。
でもシェルスクリプト読むとstringsコマンドがいたのでまぁいいか...
% strings static /lib64/ld-linux-x86-64.so.2 libc.so.6 puts __cxa_finalize __libc_start_main GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable AWAVI AUATL []A\A]A^A_ Oh hai! Wait what? A flag? Yes, it's around here somewhere! ;*3$" picoCTF{d15a5m_t34s3r_6f8c8200} GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 crtstuff.c
Tab, Tab, Attack(20pt)
素直にzipファイルを解凍。ごめん、嫌な予感しかしない。
% unzip Addadshashanammu.zip Archive: Addadshashanammu.zip creating: Addadshashanammu/ creating: Addadshashanammu/Almurbalarammi/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/ inflating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/fang-of-haynekhtnamet
tree
コマンドで見たら階層深すぎなので、とりあえずtabキー連打しながらそれっぽいファイルを探す
% tree Addadshashanammu Addadshashanammu └── Almurbalarammi └── Ashalmimilkala └── Assurnabitashpi └── Maelkashishi └── Onnissiralis └── Ularradallaku └── fang-of-haynekhtnamet 6 directories, 1 file
途中に分岐がなさそうなので、一番深いところまでtab連打して一気に移動。
一番最後には実行ファイルがいたので、strings
コマンドで確認したらflagが見えた。
% cd Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku % ls fang-of-haynekhtnamet % ls -ltr total 24 -rwxr-xr-x@ 1 saturn staff 8320 3 16 10:16 fang-of-haynekhtnamet % file fang-of-haynekhtnamet fang-of-haynekhtnamet: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=72a56ba85df661b5a985999a435927c01095cccf, not stripped % strings fang-of-haynekhtnamet /lib64/ld-linux-x86-64.so.2 libc.so.6 puts __cxa_finalize __libc_start_main GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable AWAVI AUATL []A\A]A^A_ *ZAP!* picoCTF{l3v3l_up!_t4k3_4_r35t!_2bcfb2ab} ;*3$" GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 crtstuff.c deregister_tm_clones __do_global_dtors_aux completed.7698 __do_global_dtors_aux_fini_array_entry
Magikarp Ground Mission(30pt)
インスタンスを立ち上げたあとにssh接続する。コマンドラインの練習問題だった。
flagのヒントが散りばめられているので、指示に従って探すだけ。
ctf-player@pico-chall$ ls 1of3.flag.txt instructions-to-2of3.txt ctf-player@pico-chall$ less instructions-to-2of3.txt -bash: less: command not found ctf-player@pico-chall$ cat 1of3.flag.txt picoCTF{xxsh_ ctf-player@pico-chall$ cat instructions-to-2of3.txt Next, go to the root of all things, more succinctly `/` ctf-player@pico-chall$ cd / ctf-player@pico-chall$ ls 2of3.flag.txt dev instructions-to-3of3.txt media proc sbin tmp bin etc lib mnt root srv usr boot home lib64 opt run sys var ctf-player@pico-chall$ cat 2of3.flag.txt 0ut_0f_\/\/4t3r_ ctf-player@pico-chall$ cat instructions-to-3of3.txt Lastly, ctf-player, go home... more succinctly `~` ctf-player@pico-chall$ cd ~ ctf-player@pico-chall$ ls 3of3.flag.txt drop-in ctf-player@pico-chall$ cat 3of3.flag.txt 71be5264} ctf-player@pico-chall$ cat drop-in/ cat: drop-in/: Is a directory ctf-player@pico-chall$ cd drop-in/ ctf-player@pico-chall$ ls 1of3.flag.txt instructions-to-2of3.txt ctf-player@pico-chall$ exit logout Connection to venus.picoctf.net closed.