cgy12306
FTZ 18번 level18 본문
ID : level18
PW : why did you do it
check와 deadbeef와 비교해서 같으면 shellout 함수를 호출해서 쉘을 획득하는 것 같다.
이 부분을 보면 x버퍼에 1바이트씩 읽어서 스위치 문을 돌린다.
x에 0x08이면 count-1을 해주고, 일반적인 값이 들어오는 경우 string[count]위치에 x를 넣고 count+1을 해준다.
디버깅을 해보면 main+91에서 ebp-104와 0xdeadbeef를 비교하는 것을 보면 ebp-104 부분은 check변수가 들어가는 곳 임을 알수 있다.
이 부분은 switch문의 영역이다. main+444부분을 보면 epb-2520와 0x8과 비교한다. ebp-252에 x가 들어가는 것을 알 수 있다. 그리고 0x8048731을 따라가 보면
ebp-112를 1 감소 시킨다. ebp-112는 count--에 해당하는 것을 알수 있다.
main+499를 보면 ebp-100영역이 string[count]임을 알 수 있다. 스택을 대충 그려보면
string 바로 위에 check가 위치하는 것을 볼 수 있다. string[0]이 문자열 저장위치라면 string[-4]에 deadbeef를 넣어주게 되면 check값이 deadbeef가 되며 deadbeef와 비교 할 수 있게 된다.
0x08을 4번 입력해주면 count는 -4가 된다. 그리고 그곳에 deadbeef를 넣어주면 쉘을 획득할 수 있게 된다.
비밀번호는 swimming in pink이다.
'Wargame > FTZ' 카테고리의 다른 글
FTZ 20번 level20 (0) | 2019.07.06 |
---|---|
FTZ 19번 level19 (0) | 2019.07.06 |
FTZ 17번 level17 (0) | 2019.07.06 |
FTZ 16번 level16 (0) | 2019.07.06 |
FTZ 15번 level15 (0) | 2019.07.06 |