-
[L.O.B] Level 1 - gateWargame/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