ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [F.T.Z] Level 9
    Wargame/F.T.Z 2022. 9. 21. 22:31
    반응형

    Level 9를 풀어보자.

     

    Level 9에 접속해 hint를 읽어보면 /usr/bin/bof 파일의 내용이 나타난다.

    이름을 보니 이제부터 오버플로 문제가 나타나는 듯하다.

     

    소스코드만 살펴보아도 문제 해결이 가능하다고 생각한다.

    우선 buf2와 buf에 10의 공간이 할당된 배열을 char 형식으로 선언한다.

    다음으로 "It can be overflow : "라는 문구가 출력된다.

    그 후 fgets 함수를 통해 문자열을 입력받는데, 그 문자열은 크기가 40이고 표준입력에서 입력을 받는다.

    끝으로 buf2의 문자열과 "go"라는 문자열을 2의 길이만큼 비교하여 같으면 Good Skill 출력, setreuid를 설정하며,

    /bin/bash 명령어를 실행해 bash 쉘을 실행한다.

    <Level 9의 힌트>

     

    그래서 프로그램을 실행한 후 buf에 할당된 10의 공간을 뛰어넘도록 go를 반복해 입력했다.

    그랬더니 ruid와 euid가 Level 10으로 변경되어 유저가 바뀐 것을 알 수 있다.

    my-pass 명령어를 실행하니 비밀번호가 나타났다.

    <나타난 비밀번호>

     

    이번에는 상세한 분석을 통해 어떻게 동작을 하는지를 좀 더 알아보도록 하자.

    아직 gdb를 사용하는 것이 익숙하지는 않지만, 그래도 열심히 구글링을 하면서 해결해보도록 하자.

     

    우선 기존의 /usr/bin/bof 파일의 내용을 복사해 bof.c라는 이름의 컴파일용 파일을 생성한다.

    그 후 gcc 명령어로 컴파일해 bof 파일을 생성한다.

    <bof 파일 생성>

     

    그 다음 gdb -q bof 명령어로 bof 파일에 대한 gdb를 실행한다.

    set disassembly-flavor intel 명령어로 조금은 쉬운 intel 문법으로 디스어셈블 설정한다. (오십보백보..??)

    다음 disas main 명령어로 main 함수를 확인해보자.

     

    main+43과 main+65를 살펴보면 eax에 대입되는 값이 16 byte만큼 차이가 나는 것을 알 수 있다.

    buf와 buf2를 선언한 것을 보면 10씩 공간을 할당했는데 어째서 6byte만큼 크기가 늘어난 것일까??

    구글링을 해보면 중간에 더미값이 생성되어서 그렇다고 한다..

    어쨋든 16byte만큼 문자를 입력하고 go를 입력하면 답이 나온다는 것을 알 수 있다.

    <bof 파일 분석>

    반응형

    'Wargame > F.T.Z' 카테고리의 다른 글

    [F.T.Z] Level 11  (0) 2022.09.25
    [F.T.Z] Level 10  (0) 2022.09.24
    [F.T.Z] Level 8  (0) 2022.09.21
    [F.T.Z] Level 7  (0) 2022.09.21
    [F.T.Z] Level 6  (2) 2022.09.21

    댓글

Designed by Tistory.