힌트 소스를 보면 파일디스크립터와 관련된 여러가지 새로운 함수들이 추가되었다.
그리고 쉘을 실행시키는 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 |