본문 바로가기
포너블(pwnable)/CTF(pwnable.kr)

[Toddler's Bottle] flag 문제풀이와 UPX 설치

by LIZ0904 2021. 3. 27.
반응형

문제

오늘의 문제는 리버싱(reversing) 관련한 문제다. 

 

 

wget

wget 명령을 이용해 우분투에 문제 파일을 다운로드 받아준다.

 

 

엥?

문제에서 리버싱에 대해서 언급했기에 디버거를 실행해 보았지만, 디버깅이 되지 않는다. 때문에 윈도우 환경에서 flag 파일의 구조에 대해서 파악하고자 한다!

 

 

windows에서 문제 다운로드

windows 환경에서 그냥 chrome에 url 치고 flag 파일을 다운로드 받았다.

 

 

HxD로 flag 열기

헥스 에디터인 HxD에 flag 파일을 넣어봤더니 헤더 시그니터에 ELF가 보이고, 아래에 UPX도 눈에 띈다.

ELF(Executable and Linkable Format})은 유닉스 계열의 실행파일임을 나타내며, UPX(Ultimate Packer for eXecutables)는 여러 운영 체제에서 수많은 파일 포맷을 지원하는 오픈 소스 실행 '압축' 프로그램이다.

압축돼있어서 디버깅이 안된거였구만!

 

 

아래 사이트에서 upx를 다운로드 받아준다. 나는 찌랭이라 리눅스에 어떻게 다운받는지 몰라서 firefox에 들어가서 직접 설치했다. Download Latest Release로 들어가서 최신꺼 다운받아주면 된다.

upx.github.io/

 

UPX: the Ultimate Packer for eXecutables - Homepage

Welcome UPX is a free, portable, extendable, high-performance executable packer for several executable formats. Please also see the Wikipedia entry for some more background info. Blog Posts 23 Jan 2020 » UPX 3.96 released 26 Aug 2018 » UPX 3.95 released

upx.github.io

 

 

 

upx 다운로드

가장 위에 있는 걸 그냥 다운로드 받았다.

 

 

upx 설치 완료

upx를 설치하고 나면, upx가 있는 디렉터리에 들어가서 flag 파일도 이 디렉터리로 옮겨준다.

 

 

upx -d

./upx -d flag 명령을 이용해 flag 파일을 unpacking, 즉 압축풀기를 해준다.

 

 

gdb flag

그 다음, gdb flag 명령을 입력해 준 뒤, disas main 명령을 내리면 정상적으로 디버깅이 된다. 

메인 함수를 살펴보면, 친절하게도 <+32>에서 flag로 넘어가는 것을 제시해준다.

flag의 주소가 0x6c2070으로 나와있으니 이 주소를 한번 확인해보자!

 

※mov는 기본 어셈블리어로, "mov [저장될 위치], [복사할 위치] "의 형식을 갖는다. 

 

 

x/xg 0x6c2070

 

 

 

flag 발견

 

 

 

정답!

정답이다! 7point를 획득했다 ;;

flag: UPX...? sounds like a delivery service :)

반응형

댓글