LEVEL 16
[level16] passcode : about to cause mass
(NO DRAG, NO PASSCODE)
attackme.c 이라는 파일이 있지만 읽기 권한이 거부되어 있다. 그냥 attackme의 소스 코드인 것 같다. hint의 코드를 살펴보자.
새로운 오버플로우 문제이다. 문제 해결은 다음과 같다.
- fgets 함수에서 입력 받는다.
- 앞의 버퍼들을 다 채우고 fgets 함수가 종료되면 다음 call 함수가 호출되는데, 이는 printit 함수의 주소가 들어가 있다.(함수의 이름 = 그 함수의 주소)
- 따라서 *call의 메모리 영역을 shell 함수의 주소로 덮으면 마지막에 쉘이 실행될 것이다.
따라서 우리는 메모리 구조를 분석하고 shell 함수의 주소를 찾아야 한다.
먼저 메모리 구조를 분석하자.
- 할당된 메모리 → (0x38 + 0x8) = 64
- 예상되는 메모리 구조 → *buf(20) + dummy(20) + call(4) + dummy(4) + crap(4) + dummy(4) + SFP(4) + RET(4) = 64
이제 shell 함수의 주소를 구하자. gdb에는 프로그램에 저장된 함수나 새롭게 선언한 함수의 이름으로 그의 주소를 출력해주는 기능이 있다.
- p(print) 함수이름 : 해당 함수의 주소를 출력
따라서 shell 함수의 주소가 0x80484d0 임을 알 수 있다. 이제 쉘을 따보자.
[level17] : king poetic
'Pwnable > FTZ' 카테고리의 다른 글
FTZ - level18 [Buffer Overflow 𝜽] (0) | 2020.08.28 |
---|---|
FTZ - level17 [Buffer Overflow 𝜼] (0) | 2020.08.28 |
FTZ - level15 [Buffer Overflow 𝜺] (0) | 2020.08.28 |
FTZ - level14 [Buffer Overflow 𝜹] (0) | 2020.08.28 |
FTZ - level13 [Buffer Overflow 𝜸] (0) | 2020.08.28 |