picoCTF 2022 writeup[rev]

問題ファイルや私がかいたソルバは()にあります。

file-run1 (100pts)

実行ファイルを走らせるだけ。

$ ./run
The flag is: picoCTF{U51N6_Y0Ur_F1r57_F113_5578e314}

file-run2 (100pts)

実行ファイルを走らせるだけ2。実行時引数に"Hello!"を入れます。

$ ./run Hello!
The flag is: picoCTF{F1r57_4rgum3n7_981abfb5} 

GDB Test Drive (100pts)

言われた通り、*(main+99)で止めて*(main+104)に飛ぶとflagを出せます。

$ gdb ./gdbme
(gdb) break *(main+99)
(gdb) run
(gdb) jump *(main+104)
picoCTF{d3bugg3r_dr1v3_93b87433}

patchme.py (100pts)

配布されたpythonプログラムを見ると、passwordはak98-=90adfjhgj321sleuth9000であることがわかります。

$ echo ak98-=90adfjhgj321sleuth9000 | python3 patchme.flag.py 
Please enter correct password for flag: Welcome back... your flag, user:
picoCTF{p47ch1ng_l1f3_h4ck_4d5af99c}

Safe Opener (100pts)

配布されたプログラムを見ると、encodedkeyがcGwzYXMzX2wzdF9tM18xbnQwX3RoM19zYWYzであることがわかります。encode形式がbase64なので、base64デコードすればよいです。

$ echo cGwzYXMzX2wzdF9tM18xbnQwX3RoM19zYWYz | base64 -d
pl3as3_l3t_m3_1nt0_th3_saf3

picoCTF{pl3as3_l3t_m3_1nt0_th3_saf3}

unpackme.py (100pts)

printデバッグするだけ。
picoCTF{175_chr157m45_8aef58d2}

bloat.py (200pts)

printデバッグするだけ。arg133()とかいう関数内のif文で入力とpasswordを比較していそうなので、print(a[71]+a[64]+a[79]+a[79]+a[88]+a[66]+a[71]+a[64]+a[77]+a[66]+a[68])すればpasswordがhappychanceであるとわかります。
picoCTF{d30bfu5c4710n_f7w_c47f9e9c}

Fresh Java (200pts)

Javaのclassファイルが渡されるので、Java Decompilerに通して頑張って読みます。
picoCTF{700l1ng_r3qu1r3d_126c59f0}

Bbbloat (300pts)

angrに投げたら解いてくれました。favorite numberとして34360287623を答えるとflagが出力されます。
picoCTF{cu7_7h3_bl047_2d7aeca1}

unpackme (300pts)

upxでcompressされているので、upx -d ./unpackme-upxでunpackしてから解析してみます。main関数を見てみると、

gdb-peda$ disas main
...
0x0000000000401eeb <+120>:   mov    eax,0x0
0x0000000000401ef0 <+125>:   call   0x410f80 <__isoc99_scanf>
0x0000000000401ef5 <+130>:   mov    eax,DWORD PTR [rbp-0x3c]
0x0000000000401ef8 <+133>:   cmp    eax,0xb83cb
0x0000000000401efd <+138>:   jne    0x401f42 <main+207>
0x0000000000401eff <+140>:   lea    rax,[rbp-0x30]
...

と、入力をscanfでとってからcmp命令で比較し、何らかの値と比較して一致しなかったらjneで遠くに飛ばしています。ここの処理をskipすればよいはずです。よって、*(main+138)にbreakpointを置き、*(main+140)に飛んでみます。

gdb-peda$ b *(main+138)
Breakpoint 1 at 0x401efd
gdb-peda$ r
Starting program: /home/altair626/workspace/picoctf2022/rev/unpackme/unpackme-upx 
What's my favorite number? x
[----------------------------------------------------------------registers-----------------------------------------------------------------]
RAX: 0x0 
RBX: 0x400530 --> 0x0
RCX: 0x0
RDX: 0x0
RSI: 0x78 (b'x')
RDI: 0x7fffffffd8c0 --> 0x0
RBP: 0x7fffffffde50 --> 0x402f50 (<__libc_csu_init>:    endbr64)
RSP: 0x7fffffffde00 --> 0x7fffffffdf88 --> 0x7fffffffe1d7 ("/mnt/c/Users/ke"...)
RIP: 0x401efd (<main+138>:      jne    0x401f42 <main+207>)
R8 : 0x78 (b'x')
R9 : 0x7c (b'|')
R10: 0x4df800 --> 0x4e53a0 --> 0x0
R11: 0x246
R12: 0x402ff0 (<__libc_csu_fini>:       endbr64)
R13: 0x0
R14: 0x4df018 --> 0x44f220 (<__strcpy_avx2>:    endbr64)
R15: 0x0
[-------------------------------------------------------------------code-------------------------------------------------------------------]
Display various information of current execution context
Usage:
    context [reg,code,stack,all] [code/stack length]


Breakpoint 1, 0x0000000000401efd in main ()
gdb-peda$ jump *(main+140)
Continuing at 0x401eff.
picoCTF{up><_m3_f7w_ed7b0850}
[Inferior 1 (process 19120) exited normally]

ビンゴですね。
picoCTF{up><_m3_f7w_ed7b0850}

Keygenme (400pts)

angrに投げたら解いてくれました2。
picoCTF{br1ng_y0ur_0wn_k3y_247d8a57}

Wizardlike (500pts)

簡単な迷路ゲームが渡されますが、普通にプレイすると途中で絶対に進めないマップが出てきてしまいます。マップの形状が怪しいので、.data領域からマップデータを取ってきて全10面あるマップを頑張って復元します。
すると、各マップにflagの断片が書かれていることがわかります。これを集めればよいです。
picoCTF{ur_4_w1z4rd_2a05d7a8}

1面 picoCTF{

#########
#.......#  ......#...................................
#.......#  ....................####.#####.#####..###.
#........  .####.#..###..###..#.......#...#......#...
#.......#  .#  #.#.#....#   #.#.......#...###...#....
#.......#  .####.#.#....#   #.#.......#...#......#...
#.......#  .#....#..###..###...####...#...#......###.
#.......#  .#........................................
#.......#  ..........................................
#.......#
#.......#
#.......#
#.......#
#.......#
#......>#
#########

2面 ur_4_w1z4rd_

#####. .............................................................
#.<.#. ...............#..#.............##.......#..#........#.......
#...#. .#..#.###......#..#.......#...#..#.####..#..#.###....#.......
#...#. .#..#.#........####.......#.#.#..#...#...####.#...####.......
#...#. .####.#...####....#.#####..#.#..###.####....#.#...####.#####.
  .    .............................................................
  .    .............................................................
  .    .............................................................
#....
#...#
#...#
#...#
#...#
#...#
#.>.#
#####

3面 2

#################   .......
#<..............#.  ..###..
#...............#.. .#...#.
#..............#........#..
#...#.......#...#.. ...#...
#..###.....###..#.  .#####.
#...#...#...#...#   .......
#......#>#......#   .......
#...............#
#...#.......#...#
#..###.....###..#
#...#.......#...#
#...............#
#...............#
#...............#
#################

4面 A

...             ..  .......
.<.          ####.  ..###..
...          ...#.. .#...#.
...          ...#....#####.
             ..>#.. .#...#.
             ####.  .#...#.
                ..  .......
                    .......

5面 0

########################
#<.............#.......#
#..............#..###..#
#..............#.#...#.#
#..............#.#...#.#
#..............#.#...#.#
#..............#..###..#
#..............#.......#
#..............#.......#
########################







################
#..............#
#..............#
#..............#
#..............#
#..............#
#..............#
#..............#
#.............>#
################

6面 5

.......
.<.....
.......
.......
.......
.......
.......
.......
.......
.......
.......
.....>.
.......
#######
.......
.#####.
.#.....
.####..
.....#.
.####..
.......
.......

7面 D

...
.<.........
...........
...      ..
         ..
         ..
         ..
         ..
         ..
         ..
   ..............
   ..##########..
   .#          #.
   .#  ....... #.
   .#  .####.. #.
   .#  .#...#. #.
   .#  .#...#. #.
   .#  .#...#. #.
   .#  .####.. #.
   .#  ....... #.
   .#  ....... #.
   .#          #.
   ..##########..
   .............>

8面 7

#########################
#<#......#.#.......###..#
#.#.###..#.#.......##..##
#.#.#.#..#.#.......#..###
#.#.#.#..#.#.......#...##
#...#....#..#......#....#
#.######.##..###.###....#
#.#.....................#
#.###.#################.#
#.......................#
#########.###.#########.#
#.......#.#.#.#.........#
#.#####.#.#...#.#########
#....#..#.#.#.#.........#
#...#...#.#.#.#########.#
#..#....#.#.#.#.........#
#..#....#.#.#.#.#########
#.......#.#.#.#.........#
#.......#.#.#.#########.#
#########.#.#.#...#...#.#
#...........#.#.#.#.#.#.#
#########...#.#.#.#.#.#.#
#.......#...#.#.#.#.#.#.#
####.####...#.#.#.#.#.#.#
##..........#.#.#.#.#.#.#
#.#..####...#.#.#.#.#.#.#
#..#....#####.#.#.#.#.#.#
#...#...#...#.#.#...#...#
#....#........#.#########
#...........#.#........>#
########################.

9面 A

...                                                                                          .......
.<.                                                                                          ..###..
...                                                                                          .#...#.
...                                                                                          .#####.
                                                                                             .#...#.
                                                                                             .#...#.
                                                                                             .......
                                                                                             .......
             .




      .











           .
            .

           .


                        .
                 .








                          .
                           .

                          .









                                     .




                                     .    .









                                           ..

                                            .

                                                     .








                                                         .           .                   .



                                                                .                  .



                                                   .





                                                                                                 ...
                                                                                                 ...
                                                                                                 .>.
                                                                                                 ...

10面 8}

<...................................................................................................
................................................................................................#...
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
#####################################################################################..............#
#####################################################################################..###..###....#
#####################################################################################.#...#...#....#
#####################################################################################..###.....#...#
#####################################################################################.#...#...#....#
#####################################################################################..###..###....#
#####################################################################################..............#
#####################################################################################..............#
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
####################################################################################################
................................................................................................#...
....................................................................................................