Post

(49) pwnable.kr flag 문제 풀이

문제 설명

Papa brought me a packed present! let’s open it. Download : http://pwnable.kr/bin/flag This is reversing task. all you need is binary

문제 풀이

리버싱 하라고 합니다. 일단 flag파일을 받아서 r2로 열어봤습니다.

분석하려고 함수 목록을 보기 위해 afl을 쳐보니 main이 보이질 않습니다.

보통 이런경우는 패킹된 경우거나 파일이 손상된 경우라고 합니다. 문제 설명을 보니 a packed present라고 하는게 패킹된 파일임을 의미하는듯 합니다.

패커의 종류는 다양한데 upxaspack이 유명하다고 합니다.
xxd flag | more명령어로 열어보았더니

위와 같이 중간 정도에 UPX라는 문자열이 보이네요. 아마도 파일은 upx로 패킹된 듯 합니다.

이대로는 문제를 풀 수 없으니 언패킹을 해줘야 합니다. upx로 패킹된 파일을 언패킹하는건 아주 간단합니다.
upx -d flag 명령어만 입력하면 자동으로 언패킹을 해줍니다.

이제 다시 r2로 열어보면

이렇게 @main을 열 수 있게 되었습니다.

코드를 보면 I will malloc() and strcpy the flag there. take it.를 출력하고 있습니다. malloc하고 flag를 strcpy로 넣는다고 합니다.

조금 더 아래줄을 보면 call sym.malloc이 보입니다. 그리고 그 아래아래 줄을 보면,
mov rdx, qword [obj.flag]로 데이터를 넣고 있습니다.

따라서 ps @[obj.flag]를 쳐보면

이렇게 flag를 얻을 수 있습니다.

This post is licensed under CC BY 4.0 by the author.