시스템 해킹

 1576, 1/79 회원가입  로그인  
   woonkeekim
   해커스쿨 대학교에 있는 버퍼 오버플로우에 관하여 질문이 있습니다

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1680 [복사]


http://www.hackerschool.org/Sub_Html/HS_University/bof_1.html

여기에 있는 강좌를 하나씩 읽어보고 있는 사람입니다.

ch.12에 있는 소스를 보고 한번 따라 해봤는데요..

제 컴퓨터에 나온 답이랑 여기있는 답이랑 완전히 다릅니다.

A*20CAT (AAA20개뜻) 을 해봐도 바뀌지가 않아서 제가 따로 target 이랑 buffer 어드레스를 프린트 하게 해 봤습니다.

그랬더니 buffer가 target 보다 4 byte 뒤에 allocate 됬는데요. 그래서 안되는거 같은데 제 말이 맞나요??

만약에 그렇다면 제가 buffer을 먼저 declare 해봐도 target이 buffer보다 4byte 앞에있습니다..

도움 주시면 감사하겠습니다

  Hit : 3897     Date : 2013/05/27 05:15



    
별빛을담아 저도 같은 부분을 공부하는 입장으로써 제가 공부한 내용을 풀자면...

첫번째로 프로그램은 실행할 때마다 실행되는 곳의 주소가 바뀝니다.
그 이유는 Random Stack 기법이라는 Stack Overflow 공격으로부터 보호하기 위한 기술때문일 수도 있구요
모든 컴퓨터가 스펙이 같을 수 없습니다. RAM 사이즈도 컴퓨터마다 다를 수 있고, OS도 다를 수 있고 다른 기타 하드웨어도 모두 같을 수 없으니까요.
이 때문에 OS가 내 프로그램이 올라간 Stack의 위치보다 앞서는가 뒤에 있는가에 따라서 내 프로그램의 위치도 뒤로 밀릴 수도, 앞으로 당겨질 수도 있습니다.

두번째로 지금 질문하신 것 처럼 각 변수 사이에 필요 이상의 공백이 생기는 경우가 있습니다.
이는 일종의 완충재 역할을 하는 부분으로써 변수에 지정된 크기보다 큰 값이 입력된 경우
큰 값 때문에 프로그램이 영향을 받지 않게 하기 위해 이 공백을 생성합니다. 이러한 부분을 dummy라고 부릅니다.

실제로 FTZ를 하면서도 dummy를 많이 접하시게 되는데요. 이 dummy가 받아주지 못할 만큼 더 많이 넣으면
프로그램은 Segmentation Fault(일명 세그폴트!!)를 일으키며 비정상 종료됩니다.
Stack Overflow를 공부하시게 되면 어쩌면 가장 반가우면서도 가장 보기 싫은 애증의 문장이죠 ㅋ
2013/05/28  
kumi123 더미 문제네요... gcc -v 해서, 2.96 이상이면 더미가 생성되서.. 20바이트보다 더 뒤에 넣어야 되요 2013/06/14