|
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
|