ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.B] Level 1 - gate
    Wargame/L.O.B 2022. 10. 10. 06:22
    반응형

    새로운 Wargame인 L.O.B를 시작해보자.

    기본적으로는 F.T.Z와 유사하지만, L.O.B는 특이하게 각 Level 마다 이름이 정해져 있다.

    먼저 Level 1이라고 할 수 있는 gate를 푸는 것으로 시작한다. (접속은 gate / gate로 한다.)

     

    접속을 하면 gremlin이라는 실행 파일과 그 실행 파일의 소스 코드인 gremlin.c가 있다.

    따로 hint는 없는데, 우선 gremlin.c 파일을 읽어보자.

     

    먼저 256 바이트 크기의 char 형 배열인 buffer가 선언된다.

    그 후 if 문으로 argc의 수가 2 미만이면 argv error를 선언하고 프로그램을 종료한다.

    argc가 2 이상이면 strcpy 함수를 이용해 argv[1]의 string을 buffer에 복사하고, buffer를 출력하며 종료한다.

    코드만 보자면 L.O.B의 Level 1 격인 문제기 때문인지 F.T.Z에서 많이 풀어 본 그나마 쉬운 수준의 문제이다.

    <gremlin.c 파일의 내용>

     

    gdb를 이용해 분석해보자.

    <main+47>을 보면 ebp에서 256만큼 떨어져 있다는 것을 알 수 있다.

    F.T.Z에서 많이 다룬 내용이므로 자세한 설명은 넘어가도록 하자.

    <gremlin의 gdb 분석>

     

    쉘 코드를 실행할 수 있는 환경변수를 선언하고 환경변수의 주소를 알아보도록 하자.

    역시 F.T.Z에서 많이 다룬 내용이므로 자세한 설명은 넘어가도록 하자.

    <환경변수 선언 및 주소 출력>

     

    argv(파라미터) 방식으로 gremlin 파일을 실행하면서 페이로드를 입력하도록 하자.

    NOP를 buffer의 크기인 256 바이트와 SFP의 4 바이트를 더한 260 바이트만큼 넣어준다.

    다음으로 환경변수의 주소를 littel endian 방식으로 입력해 쉘 코드를 실행한다.

     

    쉘이 실행되면서 gremlin의 uid로 실행이 되는 것을 확인할 수 있다.

    F.T.Z와 마찬가지로 my-pass 명령어를 입력하니 비밀번호가 나타났다.

    <나타난 비밀번호>

     

    새로운 Wargame인 L.O.B의 맛보기를 끝냈다.

    위의 풀이 중에서도 언급했듯 Level 1 격이기 때문에 설명을 많이 생략했다.

    L.O.B는 문제를 풀어나가면서 모르는, 새로운 개념이 나올 때마다 설명을 넣어 정리하도록 하자.

     

    [쉘 코드 직접 삽입 풀이]

    더보기
    <buffer의 주소 분석>
    <쉘 코드 직접 삽입>
    반응형

    'Wargame > L.O.B' 카테고리의 다른 글

    [L.O.B] Level 6 - wolfman  (0) 2022.10.14
    [L.O.B] Level 5 - orc  (0) 2022.10.13
    [L.O.B] Level 4 - goblin  (0) 2022.10.12
    [L.O.B] Level 3 - cobolt  (2) 2022.10.11
    [L.O.B] Level 2 - gremlin  (0) 2022.10.11

    댓글

Designed by Tistory.