[Pwnable.kr Prob] flag

코코·2023년 1월 28일
0

Pwnable.kr

목록 보기
5/10

Pwnable.kr 네 번째 문제 풀이

Pwnable.kr의 네 번째 문제를 풀어보려한다~ 고고링

생각보다 쉬운 문제다. 그냥 gdb를 통해 까보면 flag가 나온다..

해당 바이너리를 다운로드 받고, 파일의 아키텍처 및 보호기법을 확인해본다..
checksec 명령어를 통해 확인할 경우, Packer부분에 "Packed with UPX" 라는 문구를 통해 해당 바이너리 파일이 UPX로 패킹되어 있음을 알 수 있다.

Packing은 파일을 실행 가능한 형태로 압축시키는 것을 의미한다.

UPX는 실행 가능한 형태로 압축을 시켜주는 Packer 중 한 종류이다..
UPX에 대해 자세하게 알고 싶다면, 아래의 Link로 이동해보자.
         >  https://github.com/upx/upx


다시 본론으로 돌아와서 우선 Packing되어 있으면, 디버깅을 할 수 없으니 Unpacking부터 시켜준다.
apt-get install -y upx

Ubuntu에서 위의 명령어를 실행하여 upx 모듈을 설치한다.

우리는 Unpacking만 할 것이므로, -d 옵션(decompress)만 기억하면 된다!

-d 옵션을 통해 Unpacking...

Unpacking 한 파일을 다시 checksec 명령어를 통해 살펴보면 아까와는 다르게 적용된 보호기법을 확인할 수 있다!
이제 바로 gdb를 통해 Flag를 획득하러 가보자 고고고고!

해당 바이너리를 실행시켰을 때, "I will malloc() and strcpy the flag there. take it." 이라는 문자열을 출력하는데, 이를 통해 flag가 malloc, strcpy 함수 근처에서 보일 것으로 예상할 수 있다!
이제 진짜로 gdb로 까보자~

우선 main 함수를 disassemble 한 모습이다. main+32부분에 이동하면 flag를 볼 수 있을 것 같다. 빠르게 이동해보자~

해당 부분에 도달한 뒤, rdx 레지스터를 확인해보면,

짠 ! Flag를 획득할 수 있다.
"UPX...? sounds like a delivery service :)"

profile
화이팅!

0개의 댓글