
먼저 ls로 어떤 파일이 있는지 확인
hint 파일을 보기 위해 cat hint 사용
코드를 하나씩 살펴봅시다
char buf2[10];
char buf[10];
buf와 buf2의 크기는 10임을 알 수 있습니다
fgets(buf,40,stdin);
buf의 크기인 10을 넘겨서 40만큼 입력을 받기 때문에 이 때 버퍼오버플로우 취약점 발생
buf2가 buf 보다 먼저 선언 -> buf를 먼저 채워서 buf2로 넘어가기
buf2에 들어갈 값을 "go"로 만들어주면 되는 문제

gcc -o /tmp/bof /tmp/bof.c
gdb -q /tmp/bof
(gdb) disas main


두가지 문장을 통해 buf의 시작점은 ebp-40, buf2의 시작점은 ebp-24임을 알 수 있음
둘 차이가 16임을 알았으므로 16바이트를 모두 채우고 17, 18번째 바이트에 go를 입력하면 해결!


위와 같은 과정 반복
이번에는 특이하게도 attackme 파일이 있네요
소스코드를 살펴보니 char str은 256 byte의 배열인 것을 알 수 있습니다

또 gdb로 어떻게 돌아가는 코드인지 확인

+51과 +69 부분에서 ebp-264부터 입력을 받음
str에 256byte 할당
264-256 = 8-byte가 dummy로 존재

한 번 이라도 오류가 안 뜨면 입에 가시가 돋습니다
x/32x $esp
원래 이것도 다른 값이 나와야 하는데 왜 다 똑같은 값일까요..
의도는 이걸 쓰면 level12로 자동으로 올려줍니다.. ㅠㅎ