sprintf seg fault

basic_exploitation_002 처럼 바꿀 값의 주소를 처음 스택에 입력하고 해당 주소에 %n을 이용해 값을 입력하는 풀이를 사용해보았는데
sprintf에서 seg fault가 납니다.

sprintf함수 에서 segfault가 나는 이유가 스택으로 복사된 문자열
ex) AAAA%2050c.... => 414141412020202020202020.... 이 너무 길어서 그런거라고 대충이해했는데,
너무 큰 값을 스택영역으로 옮기다보니, 그 값이 스택영역을 벗어나는 경우가 생겨 세그폴트가 났다.. 라고 이해해도 될까요??

문제는 해결하였지만 basic_exploitation_002와 같은 방법으로는 풀이가 왜 불가능한지 여쭤보고싶습니다.

#pwnable
작성자 정보
답변 1
Karatus
워게임: 50

스택 영역을 벗어나 해당 유저의 권한으로는 쓰기가 불가능한 공간을 침범해서 생기는 경우 세그폴트가 뜹니다. 자세히 알고 싶으시면 디버깅을 통해서 프로세스가 올라갔을 때 메모리 맵이 어떻게 되어 있는지 확인해보세요. 아마 대부분의 경우 스택을 넘어선 메모리가 할당되지 않은 빈 공간에다가 쓰려고 해서 생기는 경우일 것입니다.

2022.02.09. 12:53
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기