오늘의 문제는 리버싱(reversing) 관련한 문제다.
wget 명령을 이용해 우분투에 문제 파일을 다운로드 받아준다.
문제에서 리버싱에 대해서 언급했기에 디버거를 실행해 보았지만, 디버깅이 되지 않는다. 때문에 윈도우 환경에서 flag 파일의 구조에 대해서 파악하고자 한다!
windows 환경에서 그냥 chrome에 url 치고 flag 파일을 다운로드 받았다.
헥스 에디터인 HxD에 flag 파일을 넣어봤더니 헤더 시그니터에 ELF가 보이고, 아래에 UPX도 눈에 띈다.
ELF(Executable and Linkable Format})은 유닉스 계열의 실행파일임을 나타내며, UPX(Ultimate Packer for eXecutables)는 여러 운영 체제에서 수많은 파일 포맷을 지원하는 오픈 소스 실행 '압축' 프로그램이다.
압축돼있어서 디버깅이 안된거였구만!
아래 사이트에서 upx를 다운로드 받아준다. 나는 찌랭이라 리눅스에 어떻게 다운받는지 몰라서 firefox에 들어가서 직접 설치했다. Download Latest Release로 들어가서 최신꺼 다운받아주면 된다.
가장 위에 있는 걸 그냥 다운로드 받았다.
upx를 설치하고 나면, upx가 있는 디렉터리에 들어가서 flag 파일도 이 디렉터리로 옮겨준다.
./upx -d flag 명령을 이용해 flag 파일을 unpacking, 즉 압축풀기를 해준다.
그 다음, gdb flag 명령을 입력해 준 뒤, disas main 명령을 내리면 정상적으로 디버깅이 된다.
메인 함수를 살펴보면, 친절하게도 <+32>에서 flag로 넘어가는 것을 제시해준다.
flag의 주소가 0x6c2070으로 나와있으니 이 주소를 한번 확인해보자!
※mov는 기본 어셈블리어로, "mov [저장될 위치], [복사할 위치] "의 형식을 갖는다.
정답이다! 7point를 획득했다 ;;
flag: UPX...? sounds like a delivery service :)
'포너블(pwnable) > CTF(pwnable.kr)' 카테고리의 다른 글
[Toddler's Bottle] input 문제풀이 (0) | 2021.04.07 |
---|---|
[Toddler's Bottle] random 문제풀이 (0) | 2021.04.05 |
[Toddler's Bottle] bof 문제풀이 (0) | 2021.03.23 |
[Toddler's Bottle] collision 문제풀이 (0) | 2021.03.20 |
[Toddler's Bottle] fd 문제풀이 (0) | 2021.03.20 |
댓글