|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1927 [복사]
자유게시판에 gdb로 디버깅할때랑 실행할때 메모리가 다른 이유가 궁금해서 글을 올렸는데
댓글 달아주신분들 의견듣고 직접 자료 찾아서 정리해봤습니다.
------------------------------------------------------------------------
Buffer Overflow 공격은 메모리와 깊은 연관이 있다.
Exploit을 넣을 메모리 부분을 지정해 줘야하기 때문이다.
gdb로 디버깅을 할때 분석한 메모리와
실제 프로그램을 실행할때 메모리에 차이가 날수 있다.
SEGMENT의 Stack Segment의 최상위 메모리부분에 환경변수, 파일이름, 경로, 인자값 등이 들어가기 때문에
환경변수, 파일이름, 경로, 인자값 등이 달라질 경우 stack의 메모리 주소가 바뀔수 있다.
(Stack 공격시)
그리고 Buffer Overflow로 return adrress에 함수주소를 넣을때는
Code Segment(명령어집합이자 함수들의 주소가 있음)를 공략해야되는데
공유 라이브러리 함수 등이 제일 최하단에 위치해있고
Code Segment같은 경우는 그위에 위치해 있다.
그래서 공유 라이브러리 함수같은 것들이 메모리를 더 차지하거나 적게 차지하면
상대적으로 함수의 주소가 커지거나 작아져 다를수 있다.
(함수 공격시)
|
Hit : 7945 Date : 2012/01/18 02:08
|