-
FTZ 18번 Write-up표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 6. 13:17
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다.
FTZ 18번이다~
코드를 보면 check값이 0xdeadbeef가 되면 shellout()함수가 실행되면서
다음 권한으로 "/bin/sh"이 실행된다.
하지만 입력받는 양이 100보다 크거나 같으면
"What are you trying to do?"가 나오게 된다ㅎㅎ
이 문제를 풀기 위해서는 switch문에 있는 0x08을 이용해야하는데
그 이유는 우선 스택에 어떤식으로 변수들이 쌓이는지 봐야한다.
일단 어셈블리어로 코드를 보자.
우선 C로된 코드와 어셈블리어 코드를 비교해보았다.
(굳이 어셈블리어 코드를 안봐도 스택은 그릴 수 있지만 그래도..ㅎㅎ)
그랬더니 아래와 같이 스택이 쌓인다는 것을 알 수 있었다.
C코드와 마찬가지로
x가 먼저 0으로 초기화되고
다음으로 count가 0으로 초기화되었다.
그리고 check값이 0xdeadbeef가 되어야 문제를 해결할 수 있었다.
그런데??..
"값은 string에 담기는데 check를 어떻게 가지??"
라고 생각했지만
우리에겐 0x08이 있었다!!
위의 그림은 switch문을 어셈블리어로 본 것이다.
순서대로 case문 두개와
count-- 그리고 default문이다.
스택의 그림을 보면 check와 string은 -4의 크기 차이가 난다.
그러므로 우리는 -4만큼 즉, 0x08을 4번해주고
0xdeadbeef를 진행해주면 역으로(?) 채워짐으로
다음단계로 넘어갈 수 있게 된다!!
다음단계로~~
반응형'표튜터와 함께하는 Pwnable > FTZ Write-up (11~20)' 카테고리의 다른 글
FTZ 19번 Write-up (0) 2019.02.06 FTZ 17번 Write-up (0) 2019.02.05 FTZ 16번 Write-up (0) 2019.02.05 FTZ 15번 Write-up (0) 2019.02.05 FTZ 14번 Write-up (0) 2019.02.05 댓글