#include<stdio.h>
int main(int argc, char* argv[]){
char buffer[512];
strcpy(buffer, argv[1]);
printf("%s", buffer);
return 0;
}
void func(){
printf("Success!!");
}
JavaScript
복사
해당 코드에서 func함수가 호출되지 않고 있으며 해당 func함수를 BOF를 통해 호출하는 것이 목적이다,.
프로그램 실행 시 1개의 인자값을 받으며 전달받은 인자값을 그대로 출력한다.
gdb 명령을 이용하여 디컴파일 시 0x208(520)byte 만큼 버퍼가 할당된 것을 확인
info functions 명령을 이용하여 func함수의 주소를 구한다.
해당 문제를 스택으로 나타낼 경우 위 그림과 같으며 RET가 가리키는 값이 func의 주소(0x080483a7)가 되도록 buffer와 EBP를 다른 값으로 채워 넣어야 한다. 520 + 4 = 524 Byte
프로그램을 실행하고 A를 524만큼 입력해 buffer와EBP를 가득 채운 후 func의 주소를 리틀엔디안 형태로 삽입하고 실행하면 func함수가 실행되어 Success!! 문자가 출력되는 것을 확인할 수 있다.