시스템 해킹

 1576, 1/79 회원가입  로그인  
   wjsqud011
   http://없다.
   쉘코드에 대해 다시 질문하겠습니다.

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


안녕하세요.
전병선 입니다.

전에 제가 '쉘코드에 대해'라는 제목으로 질문을 했는데요...

아직도 잘 이해가 안됩니다.

제가 책과 인터넷을 분석한 결과

쉘코드는 프로그램을 디버깅하여 어셈블리어로 보면
메인 함수에서 필요한 코드만 뽑고...
다른 함수에서는 int 0x80와 관련된 것만 모아서 만들고...
그것들을 gdb와 같은 것들을 이용하여 기계어와 가까운 쉘코드를 만드는 것인데...

근데.... 여기서 문제 입니다.
오버플로어에 취약한 프로그램을 실행할 때 강좌나 책 또는 인터넷에서 보면
./test [쉘코드][주소]
이렇게 치는데.... 왜 쉘코드를 치는 거죠???
그 이유를 알고 싶습니다. 그 쉘코드로 어떻게 root 권한을 얻을수 있죠???
그리고 위 [주소] 부분에 어떤 주소를 넣는건가요???
그 쉘코드의 주소를 넣는 건가요???

  Hit : 4318     Date : 2011/08/23 10:53



    
늅늅 우선 어떤권한에 있을때 /bin/sh 나 /bin/bash 같은 쉘을 실행시키게 되면
그 권한으로 명령을 내릴 수 있습니다.
쉘코드는 말그대로 쉘을 실행시키는 기계어 코드구요

예를들어 취약한 프로그램 이름이 vul 이고 루트의 setuid가 걸려있으며(setuid에 관해서는 ftz trainer9였나 10에 나옵니다)
버퍼가 520바이트라고 쳐볼게요
그러면 프로그램이 실행되는순간에는 루트의 권한이 되므로 이상태에서 쉘을 실행시키게되면
루트의 권한을 갖게 됩니다.

vul 의 소스를 대충 만들어볼게요
#include <stdio.h>
int main(int argc, char **argv[]){
char buffer[500];
strcpy(buffer,argv[1]);
}
gcc 3.2.2버젼(ftz에 깔려있어요)으로 컴파일했고 ftz에 있는 gdb로 뜯어봤습니다
gdb로 까보시면 버퍼크기가 520인것을 알 수 있습니다.
여기에 sfp를 더해서 nop+쉘코드가 되야할 바이트수는
524바이트 입니다.
깔끔하게 맞아 떨어뜨리기위해
./vul `perl -e 'print "\x90"x424,25바이트쉘코드,"\x90"x75,"리턴어드레스(nop주소로 하시면되용)"'`
네 이런식으로 이루어집니다.

제가 방금 gdb로 봤을때는 리턴어드레스가 버퍼 시작점이 0xbffff940 으로 나왔는데 안되길래 0xbffff840 으로 했더니 되더군요

더 자세한 내용은 달고나님이 작성하신 해커지망생을위한 buffer overflow 기초 문서를 읽어보시길 바랍니다
http://wowhacker.org/board.php?bid=174&bs_type=&bs_str=&cate=0&pg=20&mode=filedown&puid=154748&uid=28
2011/08/24