문제 설명을 보면 리버싱쪽에 가까운 문제인거같다.
wget으로 바이너리를 받고 혹시나해서 strings로 문자열들을 보았는데 upx패킹이 되어 있었다.
kimg00n@kimg00n:~/Desktop/upx-3.96-amd64_linux$ ./upx -d ~/pwnable.kr/flag/flag
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2020
UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020
File size Ratio Format Name
-------------------- ------ ----------- -----------
883745 <- 335288 37.94% linux/amd64 flag
Unpacked 1 file.
언패킹하고
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
─────────────────────────────────────────────────────────────────────────[ REGISTERS ]──────────────────────────────────────────────────────────────────────────
RAX 0x6c96b0 ◂— 0x0
RBX 0x401ae0 (__libc_csu_fini) ◂— push rbx
RCX 0x8
RDX 0x496628 ◂— push rbp /* 'UPX...? sounds like a delivery service :)' */
*RDI 0x6c96b0 ◂— 0x0
RSI 0x496628 ◂— push rbp /* 'UPX...? sounds like a delivery service :)' */
R8 0x1
R9 0x3
R10 0x22
R11 0x0
R12 0x401a50 (__libc_csu_init) ◂— push r14
R13 0x0
R14 0x0
R15 0x0
RBP 0x7fffffffde40 ◂— 0x0
RSP 0x7fffffffde30 —▸ 0x401a50 (__libc_csu_init) ◂— push r14
*RIP 0x401195 (main+49) ◂— call 0x400320
───────────────────────────────────────────────────────────────────────────[ DISASM ]───────────────────────────────────────────────────────────────────────────
0x401180 <main+28> mov qword ptr [rbp - 8], rax
0x401184 <main+32> mov rdx, qword ptr [rip + 0x2c0ee5] <0x6c2070>
0x40118b <main+39> mov rax, qword ptr [rbp - 8]
0x40118f <main+43> mov rsi, rdx
0x401192 <main+46> mov rdi, rax
► 0x401195 <main+49> call 0x400320 <0x400320>
0x40119a <main+54> mov eax, 0
0x40119f <main+59> leave
0x4011a0 <main+60> ret
0x4011a1 nop
0x4011a2 nop
───────────────────────────────────────────────────────────────────────────[ STACK ]────────────────────────────────────────────────────────────────────────────
00:0000│ rsp 0x7fffffffde30 —▸ 0x401a50 (__libc_csu_init) ◂— push r14
01:0008│ 0x7fffffffde38 —▸ 0x6c96b0 ◂— 0x0
02:0010│ rbp 0x7fffffffde40 ◂— 0x0
03:0018│ 0x7fffffffde48 —▸ 0x401344 (__libc_start_main+404) ◂— mov edi, eax
04:0020│ 0x7fffffffde50 ◂— 0x0
05:0028│ 0x7fffffffde58 ◂— 0x100000000
06:0030│ 0x7fffffffde60 —▸ 0x7fffffffdf38 —▸ 0x7fffffffe2bf ◂— '/home/kimg00n/pwnable.kr/flag/flag'
07:0038│ 0x7fffffffde68 —▸ 0x401164 (main) ◂— push rbp
─────────────────────────────────────────────────────────────────────────[ BACKTRACE ]──────────────────────────────────────────────────────────────────────────
► f 0 0x401195 main+49
f 1 0x401344 __libc_start_main+404
f 2 0x401081 _start+41
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
pwndbg> quit
gdb로 보다보면 레지스터에 플래그가 떠 있다 ㅋㅋㅋㅋ
레지스터에 들어가는거보니 그냥 함수 인자로 넘겨주나보다.
flag = UPX...? sounds like a delivery service :)