power-girl0-0

[pwnable] bof 풀이 본문

War game/pwnable.kr

[pwnable] bof 풀이

power-girl0-0 2022. 1. 20. 13:01
728x90

안녕하세요. 간결한 풀이입니다. (๑•̀ㅂ•́)و✧


1. 문제

문제에 접속하면, 아래와 같이 코드와 바이너리를 다운로드 할 수 있는 링크가 주어진다.

코드는 아래와 같다. 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void func(int key){
        char overflowme[32];
        printf("overflow me : ");
        gets(overflowme);       // smash me!
        if(key == 0xcafebabe){
                system("/bin/sh");
        }
        else{
                printf("Nah..\n");
        }
}
int main(int argc, char* argv[]){
        func(0xdeadbeef);
        return 0;
}

 

2. 풀이

func함수 코드를 살펴보면, key값이 0xcafebabe일 경우 shell 획득이 가능한 것을 알 수 있다.

gdb를 통해, stack크기 + dummy값을 찾아야 한다.

아래 두개의 코드만 확인하면 실제로 할당된 stack의 크기를 알 수 있다.

① lea eax, [ebp-0x2c]   => gets로 사용자에게 입력받아온 값을 ebp-0x2c에 저장함.
② cmp DWORD PTR [ebp+0x8], 0xcafebabe
    => main에서 받아온 인자값(ebp+0x8)과 0xcafebabe를 비교해주는 코드

즉, ebp+0x8위치를 0xcafebabe값으로 변경하면 된다.

 

따라서, 할당된 크기는 0x2c+0x8한 값으로 52byte가 할당되었음을 알 수 있다.

찾은 stack의 크기만큼 임의의 쓰레기 값으로 채우고, 존재하는 key값(ebp+0x8)을

0xcafebabe로 덮어버리면 shell을 획득할 수 있다.

 

3. flag 획득

 

728x90

'War game > pwnable.kr' 카테고리의 다른 글

[pwnable] flag 풀이  (0) 2022.02.12
[pwnable] collision 풀이  (0) 2022.02.09
[pwnable] input 풀이  (0) 2022.02.07
[pwnable] asm 풀이  (0) 2022.01.21
[pwnable] fd 풀이  (0) 2021.12.27
Comments