ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LOB Stage1 gremlin]
    System/LOB 2018.02.21 05:06

    [gremlin Code]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(int argc, char *argv[])
    {
        char buffer[256];
        if(argc < 2){
            printf("argv error\n");
            exit(0);
        }
        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);
    }
     
    cs

    첫 번째 문제니 만큼 워밍업 문제인 듯하다.

    strcpy( )에서 길이값 체크를 하고있지 않으므로, BOF취약점이 발생한다.

    나는 RET공간에 system( )주소를 올려서 쉘을 따도록 하겠다.


    우선, RET까지의 offset을 구해야한다.

    버퍼의 크기가 256Byte니까, SFP공간 4Byte를 더한 260Byte뒤에 RET공간이 존재할 것이다.

    확인해보도록 하자



    [Buffer Address]

    strcpy( )호출 후에 BP를 걸고 AAAA를 입력한 뒤, 스택상황을 봤다.

    buf시작주소는 [0xbffff1a8]이다.


    [EIP]

    EIP - [0xbffff2ac]


    #EIP[0xbffff2ac] - Buffer[0xbffff1a8] = 260

    실제로 260Byte뒤에 공간이 RET공간임을 확인했다.


    그럼 이제 System( )의 주소와 인자값으로 넘겨줄 /bin/sh문자열 주소를 알아내야 한다.


    [System( ) Address]

    System( ) - [0x40058ae0]


    /bin/sh문자열을 라이브러리에 있는 문자열을 사용해야 한다.


    [libc 버전확인]

    gremlin의 라이브러리는 /lib에 위치한 libc.so.6이다.

    objdump -s 옵션으로 문자열 파싱이 가능하다.


    [/bin/sh offset]

    빨간박스안에 위치한 문자열을 쓰면 될 것같다.

    /bin/sh offset - [0xe8778]

    여기서 실제 문자열 위치를 주는 것이 아니기 때문에, libc base주소를 구해서 거기에 더해줘야 실제주소를 알 수 있다.

    libc base주소는 위에서 구한 System( )에서 System offset을 빼주면 된다.


    [System offset]

    System offset - [0x40ae0]


    System[0x40058ae0] - offset[0x40ae0] = libc_base[0x40018000]


    libc_base[0x40018000] + /bin/sh offset[0xe8778] = [0x40100778]


    따라서, /bin/sh문자열의 주소는 [0x40100778]이다.

    이제 쉘을 한번 따보도록 하자!


    PAYLOAD : A*260 + System( ) + dummy + /bin/sh

    성공적으로 쉘을 딴 것을 확인할 수 있다.

    다음 문제로 넘어가도록 하자!




    [여담]

    원래 Shellcode를 이용해서 쉘을 따려고 했었다.

    Egg shell로 환경변수에 쉘을 올리고, RET에 환경변수 주소를 저장하는 식으로 진행을 했는데

    이상하게 이 방법으로 하면 공격이 먹히질 않았다...

    내 생각으론 환경변수를 이용한 공격은 먹히지 않는 것 같다.

    'System > LOB' 카테고리의 다른 글

    [LOB Stage6 Darkelf]  (0) 2018.02.27
    [LOB Stage5 Wolfman]  (0) 2018.02.27
    [LOB Stage4 orc]  (0) 2018.02.27
    [LOB Stage3 goblin]  (0) 2018.02.27
    [LOB Stage2 Cobolt]  (0) 2018.02.25
    [LOB Stage1 gremlin]  (0) 2018.02.21

    TAG

    댓글 0

Designed by Tistory.