0. 들어가기 전에
드디어 FTZ의 마지막 문제다! 구글링도 하고 해법도 찾아보며 몇 주동안 열심히 달려왔던 것 같다. 마지막 문제를 확인해보자!
1. Level 20 (..?)
어..? 소스코드를 확인해보니 뭔가 이상하다.
바로 길이 검사를 진행하고 있다는 것이다. 배열의 길이보다 항상 적은 byte를 받아오기 때문에 계속 사용해왔던 BOF 공격은 사용할 수 없다! 그럼 뭘 사용해야 하지…?
2. Format String Attack
여기서 대신 사용할 수 있는게 Format String Attack이라는 새로운 공격법이다. 사실 알고는 있었는데 제대로 배워보기가 무서워서 미루고 미루다가 결국 마지막 레벨에서 발목을 잡히고 말았다.
일단 Format String 취약점에 대해 처음부터 설명하기는 너무 길어지니 내가 보면서 공부한 링크를 공유하도록 하겠다.
천천히 보면서 곱씹어보자. 나도 완전히 이해하고 문제를 풀어보는데에는 몇 시간정도 걸린 것 같다. 컨셉을 대충 이해했다면 지금부터 Level20에 맞춰서 차근차근 따라해보자!
3. Level 20 풀이 with Format String Attack
자, 그렇다면 본격적으로 Format String 기법을 이용해 Level 20을 풀어보자. 먼저 고려해야 할 사항은 다음과 같다 :
- 메모리 구조는 어떠한가? 어디에서 입력을 받고 그곳부터 실제 매개변수까지의 거리는 얼마나 되는가?
- 소멸자 .dtors의 위치는 어디인가?
- 우리가 저장해놓은 쉘코드 환경변수의 주소는 어디인가?
- 입력을 받는 곳으로부터 쉘코드의 주소까지는 얼마만큼의 입력을 어떻게 넣어야 하는가?
Source
- 해커스쿨 FTZ
- Me!