|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|


1576, 1/79 |
![]() |
![]() |
![]() |
![]() |
|
wjsqud011 | ||||||
|
http://없다. | ||||||
|
쉘코드에 대해 다시 질문하겠습니다. | ||||||
|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1522 [복사]
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 | |
|
|