8주차과제

조승현·2022년 11월 30일

FTZ 문제 풀이

level 9


먼저 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를 입력하면 해결!

level 11


위와 같은 과정 반복
이번에는 특이하게도 attackme 파일이 있네요

소스코드를 살펴보니 char str은 256 byte의 배열인 것을 알 수 있습니다


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

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

한 번 이라도 오류가 안 뜨면 입에 가시가 돋습니다

x/32x $esp

원래 이것도 다른 값이 나와야 하는데 왜 다 똑같은 값일까요..

의도는 이걸 쓰면 level12로 자동으로 올려줍니다.. ㅠㅎ

0개의 댓글