Pwnable/FTZ

FTZ - level16 [Buffer Overflow 𝜻]

Lucvs 2020. 8. 28. 13:13

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