-
[pwnable.kr] Level 4 - flagWargame/pwnable.kr 2023. 2. 5. 08:09반응형
Level 4 - flag를 풀어보자.
문제를 보면 리버싱이 필요하다는 것을 알 수 있다.
우선은 파일부터 다운로드받고 시작해보자.

<flag의 문제 화면> Kali에 접속해 wget으로 flag 파일을 다운로드 받았다.

<wget을 이용한 파일 다운로드> 리버싱을 해보기 위해 실행 파일이 되어야 할 것 같은데 유저의 허가권에 실행 권한이 없다.
chmod로 실행 권한을 추가해주고, flag 파일을 실행하니 문구가 한 줄 나타난다.
flag를 어떤 곳에 malloc 하고, strcpy 할 것이니 가져가라는 뜻인 것 같다.

<flag 파일 실행> gdb로 분석을 하면 간단하게 알 수 있을 것 같다.
그런데, gdb로 main 함수를 분석하려고 하면 symbol이 없다고 하며 분석이 되지 않는다.
사진에는 없지만, 구글링을 통해 다른 몇 가지 방법들도 사용해 봤지만 flag 파일은 분석이 되지 않았다.

<분석되지 않는 flag 파일> 이것의 의미는 flag 파일이 패킹이 되어 있다는 것이다.
패킹이란, 간단히 설명하자면 프로그램 분석을 어렵게 하면서 실행 가능하도록 압축을 하는 것이다.
많은 패킹, 언패킹 툴이 있는데 이번 문제에서는 upx를 사용해보도록 하겠다.
먼저 upx를 입력하면 사용 방법이 나온다.
-d 옵션이 decompress로 패킹된 파일을 언패킹 한다는 것을 알 수 있다.

<upx 확인> upx -d flag 명령어로 flag 파일을 언패킹하면 성공하는 것을 볼 수 있다.

<flag 파일 언패킹> 이제 flag 파일을 다시 분석해보도록 하자.
gdb를 이용해 main 함수를 disassemble하면 <main+32>에 flag의 위치가 표시되어 있다.

<flag 파일 분석> flag가 있다는 메모리의 값을 확인해 보도록 해보자.
x/4x 0x6c2070으로 0x00496628의 값을 확인할 수 있다. (little endian)
이제 해당 메모리에 있는 문자열을 확인해보면 답이 나오는 것을 볼 수 있다.

<flag의 flag 확인> 이것을 복사해 웹 페이지에 제출하면 문제가 해결된다.

<flag 문제 완료> 반응형'Wargame > pwnable.kr' 카테고리의 다른 글
[pwnable.kr] Level 6 - random (0) 2023.04.09 [pwnable.kr] Level 5 - passcode (0) 2023.04.01 [pwnable.kr] Level 3 - bof (0) 2023.01.07 [pwnable.kr] Level 2 - col (0) 2023.01.06 [pwnable.kr] Level 1 - fd (0) 2023.01.06