[pwnable.kr] bof(5 pts) :: Write-Up

두비니

·

2019. 11. 9. 08:13

 

 

 

Nana told me that buffer overflow is one of the most common software vulnerability. 
Is that true?

Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c

Running at : nc pwnable.kr 9000

 

 

 

우선 코드를 봅시다.

#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;
}

 

gets는 입력에 제한을 두지 않기때문에 이를 이용해 buffer overflow를 일으키면 되겠군요. 대신 key가 어디있는지 파악을 해야겠죠?

 

 

func의 함수를 분석하면 ebp+0x8과 cafebabe를 비교하는 것을 볼 수 있습니다. 즉 저곳이 key가 위치하는 곳이겠죠.

근데 여기서 func+24와 +29를 보면 각각 call <func+25>랑 lea eax, [ebp-0x2c]를 하는 것으로보아 gets함수를 부르고 0x2c부터 값을 입력함을 알 수 있죠. 그럼 0x2c부터 입력을 받고 ebp+0x8까지 채워줘야하니 

 

 

0x2c + 0x8 = 0x34 (dec 52)이므로 더미를 52만큼 채워주고 cafebabe를 채워주면 되겠네요.

 

 

이방법 말고도 직접 값을 넣은 후 분석하는 방법도 있습니다.

귀찮으니 pass.

 

 

굿