ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.B] Level 3 - cobolt
    Wargame/L.O.B 2022. 10. 11. 05:08
    반응형

    Level 3 - cobolt를 풀어보자.

     

    cobolt 문제도 쉽다.

    역시나 F.T.Z에서 했던 내용 중 하나이고, 앞의 문제들처럼 간단한 문제이다.

     

    소스 코드를 확인해보자.

    아마 다음 Level의 이름은 goblin인 것 같다.

    그리고 Level 3이나 되어서야 본 것인데 소스 코드마다 어떤 문제인지 주석으로 설명이 되어 있다.

    small buffer + stdin인 것으로 보아 표준입력으로 페이로드를 작성하는 작은 buffer 문제이다.

     

    먼저 16바이트 크기의 char 형 buffer 배열이 선언되어 있다.

    다음으로 gets로 buffer에 입력하고, printf 로 출력하며 프로그램이 종료된다.

    gets_s 함수가 아닌 gets 함수이므로 이것을 이용해 overflow 공격을 하면 된다.

    <goblin 소스 코드의 내용>

     

    gdb를 이용해 goblin을 분석해보자.

    <main+6>을 보면 gets의 인자인 buffer의 주소가 ebp에서 16 바이트만큼 떨어져 있다는 것을 알 수 있다.

    <goblin의 gdb 분석 결과>

     

    쉘 코드를 삽입한 환경변수를 선언하자.

    다음으로 선언한 환경변수의 주소를 알기 위해 소스 코드를 작성하고 컴파일하여 주소를 알아낸다.

    <환경변수 선언과 주소 확인>

     

    처음 소스 코드에서 small buffer + stdin 문제라는 것을 알 수 있었다.

    표준입력으로 페이로드를 작성해 goblin 파일을 실행하자.

    gdb 분석으로 buffer의 주소가 ebp와 16 바이트만큼 떨어져 있는 것을 알았다.

    NOP로 ebp와의 거리 16 바이트와 SFP의 크기 4 바이트를 더한 20 바이트를 채운다.

    다음으로 환경변수의 주소 0xbffffc9f를 little endian 방식으로 입력하면 페이로드는 완성이다.

     

    완성된 페이로드를 입력하여 goblin을 실행해 goblin 권한의 쉘이 실행되도록 한다.

    my-pass를 입력하면 비밀번호가 나타난다.

    <나타난 비밀번호>

    반응형

    '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 2 - gremlin  (0) 2022.10.11
    [L.O.B] Level 1 - gate  (1) 2022.10.10

    댓글

Designed by Tistory.