해당 문제를 실행하면 오류가 발생한다. 파일이 패키징되어 있다고 추측이 되었고, 이를 확인하기 위해 아래와같은 명령어를 사용하여 확인하여 upx 패킹이 되어있는 것을 확인 할 수 있었다.
(base) ✘ KIM 🔥 ~/Downloads
strings ./flag| grep packed
$Info: This file is packed with the UPX executable packer http://upx.sf.net $
upx 언패킹을 하기위해 아래와같이 실행하여 언패킹을 해주었다.
(base) KIM 🔥 ~/Downloads
upx -d 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.
아래 코드를 분석해보면 0x6c2070 에 플래그가 들어있는 것을 확인 할 수 있었고, x/1s *0x6c2070를 입력하여 답을 얻을 수 있었다.
pwndbg> disassemble main
Dump of assembler code for function main:
0x0000000000401164 <+0>: push rbp
0x0000000000401165 <+1>: mov rbp,rsp
0x0000000000401168 <+4>: sub rsp,0x10
0x000000000040116c <+8>: mov edi,0x496658
0x0000000000401171 <+13>: call 0x402080 <puts>
0x0000000000401176 <+18>: mov edi,0x64
0x000000000040117b <+23>: call 0x4099d0 <malloc>
0x0000000000401180 <+28>: mov QWORD PTR [rbp-0x8],rax
0x0000000000401184 <+32>: mov rdx,QWORD PTR [rip+0x2c0ee5] # 0x6c2070 <flag>
0x000000000040118b <+39>: mov rax,QWORD PTR [rbp-0x8]
0x000000000040118f <+43>: mov rsi,rdx
0x0000000000401192 <+46>: mov rdi,rax
0x0000000000401195 <+49>: call 0x400320
0x000000000040119a <+54>: mov eax,0x0
0x000000000040119f <+59>: leave
0x00000000004011a0 <+60>: ret
End of assembler dump.
pwndbg> x/1s *0x6c2070
0x496628: "UPX...? sounds like a delivery service :)"
pwndbg>