힌트 소스를 보면 파일디스크립터와 관련된 여러가지 새로운 함수들이 추가되었다.


그리고 쉘을 실행시키는 shellout이라는 함수가 선언되었다.


일반적인 오버플로우 문제랑은 조금 다르다.

오버플로우를 할 수 있는 구조가 없는 것 같다.

파일디스크립터 문서들을 읽다가 이해가 안돼서 답을 조금 봤다.


푸는 방법은 의외로 간단했다.

case 문에서 값을 비교할 때 0x08이 있을 때 count를 --하는 부분이 있다.

일단 스택 구조는 아래와 같다.


fds     : ebp-240

count : ebp-112

x       : ebp-108

check : ebp-104 <- 여기가 같아야함

string : ebp-100


그리고 배열의 인덱스 값이 음수이면 스택의 낮은 주소를 가리키게 된다. 이를 이용해 문제를 풀면 된다.


일단 stdin에 0x08을 4번 넣어주게 되면 count가 4번 -가 되므로 string[-4]를 가리킬 수 있다. string[-4]는 스택의 구조에 의해서 check변수가 위치할것이다.

string[-4]에 0xdeadbeef를 넣어주면 두번째 if문에서 check가 0xdeadbeef와 같으므로 shellout함수를 실행할 수 있다.





'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level20@ftz  (1) 2017.11.26
[FTZ] level19@ftz  (0) 2017.11.26
[FTZ] level17@ftz  (0) 2017.11.25
[FTZ] level16@ftz  (0) 2017.11.25
[FTZ] level15@ftz  (0) 2017.11.23

+ Recent posts