반응형
안녕하세요, Pwnable.kr에서 bof문제의 풀이를 작성하겠습니다.
풀이 문제는 [bof] 입니다.
BOF
문제의 제목인 bof는 프로그램 취약점 중 하나인 Buffer Overflow 의 줄임말입니다.
BOF는 버퍼 즉, 변수의 공간과 같은 것을 초과하여 다음 메모리를 덮어 씌우도록 유도합니다.
BOF의 개념에 대해서는 https://xixon.tistory.com/5 에서 더욱 쉽게 이해하실 수 있습니다.
C 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#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;
}
|
cs |
코드는 문제에서 제공합니다. bof 파일을 다운로드하여 리눅스 환경에서 실습바랍니다.
코드에서는 overflowme라는 배열을 32바이트 선언하였습니다. 이후에 gets 함수를 사용하여 overflowme 함수의 값을 입력받습니다.
gets 함수는 문자열을 담는 길이에 제한이 없이 입력받기 때문에 BOF에 굉장히 취약한 함수입니다.
만일 key의 값이 0xcafebabe 이면 shell 코드를 실행합니다. 그렇다면 플래그를 얻을 수 있을 것입니다.
main 함수에서 인자인 key에 0xdeadbeef를 대입하였습니다. 처음 key의 값은 0xdeadbeef 입니다.
풀이
절대 제가 힘들고 귀찮아서 발표한 걸로 대체하는건 아닙니다...!
반응형