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