ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • |Lord Of Bufferoverflow| #1 gate - gremlin
    Wargame Site/BOF 2019. 5. 18. 23:21

     

    미뤄왔던 포스팅을 다시 시작해보려한다 ^^

     

    LOB 의 첫 번째 관문은 'gate' 이다.

    id , pw 가 각각 'gate' 이다. 

     

    우선, 자신이 누구인지 먼저 확인해보도록 한다. 'gate' 다. 

    자기 자신을 확인해야만 권한을 정확히 파악할 수 있고, 접근할 수 있는 파일의 범위를 정확히 파악할 수 있기 때문이다.

     

     

    보이는 것은 gremlin.c 의 읽기, 쓰기 권한과 gremlin 실행 파일의 읽기 실행 권한이다. 

    gremlin 파일의 setUID, setGID 가 눈에 들어온다. 우선은 코드를 살펴보자.

     

     

    buffer 를 strcpy 즉, 버퍼오버플로우에 취약한 함수를 통해 받고 있다.

    strcpy 를 이용한다면 SFP, RET 를 포함한 스택의 내용을 모두 바꿔 버릴 수 있다.

    그럼 버퍼를 가득 채우고 + 4 byte(SFP) + 4 byte(RET) + SHELL CODE 의 구조로 만들어 버리면 되는 것이다.

     

     


     

    하지만, LOB 에서 원할한 실습을 위해 두 가지 과정을 선행해야했다. ( 방법적으로 알기 보다 그렇게 하는 이유가 궁금했다. )

     

     

    1. 첫 번째 과정, Bash2 로 쉘을 옮겨줄 것!!

    기존의 bash SEHLL 은 /ff 를 /00 로 처리한다고 한다.

     

    2. 두 번쨰 과정, w 권한이 없을 때 gdb 를 사용할 시 권한 에러가 뜬다.

     

    사실, 첫 번째 문제를 해결하는데 있어서, 이론적으로 접근했을 떄 문제가 없는 풀이였는데

    여느 포스팅한 글들을 보면서 이 두 가지 규칙을 봤다. 그런데 그에 대한 이유에 납득을 할 수 없어서 여기저기 조언을 구했다.

    이를 해결하기 위해 gremlin 을 복사해주는 과정을 했다.

    그 결과 gdb 를 사용할 수 있게 된 것이다. 디버깅에도 권한이 필요함을 느낀 좋은 예 였다.

     

    이 때 중요한 점을 cp 하는 파일의 이름을 원본 파일의 byte 와 맞춰주는 것이었다.

    프로그램 내부에서 그 추가된 바이트들 때문에 gremlin 과 복사파일이 다르게 동작할 수도 있다고 한다. 

     


     

     

    자, 그럼 본격적으로 풀이해볼까아

     

    A 라는 문자로 256 크기의 버퍼를 채운 뒤, SFP 를 AAAA 로 채웠다.

    그 뒤, RET 에 BBBB 를 넣고 SHELL code 가 들어갈 자리에 C 로 채웠다.

     

    그 결과 정상적으로 BBBB 가 RET 로 작동되고 있는 것을 확인했다.

    그럼 이제 CCCC 의 위치를 찾아보도록하자.

     

    CCCC 는 0xbffffbd0 부터 시작되는 것을 알 수 있었다.

    그럼 이제 BBBB 를 0xbffffbd0 으로 돌리고, CCCC 에 Shell code 를 삽입한다면, 정상적으로 SHELL 이 동작할 것이다.

     

    " \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80 "

    가장 유명한 25 byte Shell Code 이다. /bin/sh 을 실행하는 opcode 의 나열이다.

     

     

     

     

    위의 로직 대로 인자를 넣어준 결과 /bin/sh 이 열린 것을 알 수 있었다. 하지만, gremlia 로 했기 때문에 gate 의 쉘이다.

    gremlin 으로 바꿔주기만 하면 끝!! 

     

     

     그 결과, 'hello bof world' 라는 패스워드를 알아낼 수 있었다.

    'Wargame Site > BOF' 카테고리의 다른 글

    |Lord Of Bufferoverflow| #3 cobolt - goblin  (0) 2019.05.19
    |Lord Of Bufferoverflow| #2 gremlin - cobolt  (0) 2019.05.19
    BOF ASLR  (0) 2019.04.24
    BOF 들어가기 앞서  (0) 2019.04.24
    BOF 준비운동 (4)  (0) 2019.04.23

    댓글

Designed by Tistory.