[5pt]bof

Pwnable.kr 2015. 8. 6. 22:15
#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;
}


Introduction:

  간단한 bof문제, main안에 func함수 인자로 "0xdeedbeef"를 받고 있는데, 이 부분을 "0xcafebabe"로 덮어 씌우면 됨


How to solve:

  소스코드에서 func함수 시작 시 캐릭터형 배열 32칸을 만든 것을 확인하여, 일단 표준 입력에 "A"를 32개 입력해보았다. 그 결과 그림 1과 같은 결과가 나타났는데, 32칸의 스택이 A(0x41로) 채워진 후 "0xdeadbeef"까지 덮으려면 약 20바이트를 더 채워야 되는 것을 확인할 수 있다. 이에 따라 그림 2와 같이 명령어를 작성하여 다시 공격해 보았다.

<그림 1> 프로그램 실행중 스택을 캡쳐


  그림 2는 "A"로 52바이트를 채운 후 마지막에 "0xcafebabe"을 붙여 스택에 있던 "0xdeadbeef" 를 덮어씌우는 명령어를 작성해 공격을 수행하는 과정을 나타낸다. 다음과 같이 공격을 수행했을 때 정상적으로 쉘을 얻어낸 것을 확인하였다.

<그림 2> flag 정보 획득




'Pwnable.kr' 카테고리의 다른 글

[1pt]mistake  (0) 2015.08.06
[1pt]cmd1  (0) 2015.08.06
[1pt]fd  (0) 2015.08.06
[1pt]random  (0) 2015.08.06
[2pt]lotto  (0) 2015.08.06
Posted by Hugh_K
l