본문 바로가기

FTZ

FTZ level 18

FTZ level 18

hint

while문 안의 내용을 무한반복한다.

switch문에서 string에 데이터가 저장되면서 count값이 변하는데 100이상이면 what are you trying to do?를출력

check에 0xdeadbeef가 들어있으면 shellout함수 실행

FD_ZERO(&fds);부터 if(FD_ISSET(fileno(stdin),&fds))까지 키보드로 입력을 받아 입력버퍼에 저장하는 과정

read(fileno(stdin),&x,1); 입력버퍼에서 1byte를 읽어 &x에 저장하고 데이터에서 1byte만큼 옮겨 간다. while문 반복이 되면서 다음 1byte를 입력버퍼에서 읽어 &x에 저장하여 조건에 맞는 switch문이 실행

x값이 0x08 이면 count 1감소

우선 gdb로 메모리를 확인해보면

LOW | count | x | check | string[100byte] | SFP | RET | HIGH

입력된 데이터는 string에 저장이 된다. check에 0xdeadbeef를 넣으면 되는데 check가 string보다 주소가 낮아 이때까지 해오던 BOF로 풀 수가 없다.

count에 0x08이 들어가면 count값이 감소해서 초기값이 0으로 선정되어있을 때 0x08을 받으면 count값이 –1이 되므로 string[-1] = x;가 된다. 이거는 string의 시작 주소보다 1byte 낮은 곳에 x값이 저장된다. 그렇다면 초기에 0x08을 4개 입력하여 string의 시작 주소보다 4byte 낮은 곳으로 내려가 0xdeadbeef를 입력하자.


'FTZ' 카테고리의 다른 글

FTZ level 19  (0) 2016.12.23
FTZ level 17  (0) 2016.12.23
FTZ level 16  (0) 2016.12.23
FTZ level 15  (0) 2016.12.23
FTZ level 14  (0) 2016.12.23