Port 53

明日のための技術メモ

picoCTF2021 General Skills WriteUP

picoctf.org

待ってたよpicoCTF, おかえり。
picoCTFの本大会が2年ぶりに帰ってきました。
IPAの試験と被ってたので、今回もディレイ参加です。

ということで今回はGeneral SkillsのWriteUPです。

General Skills

Obedient Cat (5pt)

f:id:saturn-glave:20210530181337p:plain

ダウンロードしたファイルを調べると普通にテキストだったので、
catコマンド実行して中身を確認するだけ。楽勝。

% file flag   
flag: ASCII text

% cat flag 
picoCTF{s4n1ty_v3r1f13d_2fd6ed29}

Python Wrangling(10pt)

f:id:saturn-glave:20210530181957p:plain

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)

f:id:saturn-glave:20210530184205p:plain

とりあえずプログラムをダウンロードして中身を見てみる。

% 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)

f:id:saturn-glave:20210530184259p:plain

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出現。

f:id:saturn-glave:20210530213538p:plain

Static ain't always noise(20pt)

f:id:saturn-glave:20210530215316p:plain

多分想定と違う解き方をした気がする。バイナリファイルをヒントのシェルスクリプト
手がかりにフラグ探して、という問題だったが、シェルスクリプト読まずに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)

f:id:saturn-glave:20210530214228p:plain

素直に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)

f:id:saturn-glave:20210530215847p:plain

インスタンスを立ち上げたあとに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.