본문 바로가기
Security/Pwnable

FTZ Level 18

by J0DEV 2021. 8. 9.
반응형

Level 18에 접속해서 힌트를 봅니다.

이전과는 다르게 길이가 제법 되는 코드들이 나오는데요;;

 

우선  check는 string 뒤에 위치합니다.

 

그럼으로 기존의 버퍼오버플로우를 시키는 방식은 사용할 수 없습니다.

 

이를 해결하기 위해 case문이 있네요

 

 

 

 

이 부분 입니다.

메모리

 

0x08이 입력되면 count--가 됩니다.(버퍼를 한개 빼주는 역활입니다.)

그리고 string[count-1] = x; 가 되는 것이죠.

 

그렇다면 

string[-1] = x;의 경우 string의 시작주소보다 1바이트 낮은 곳에 x의 값이 저장됩니다.

string[-2]의 경우는 2바이트 낮은 곳이겠지요.

 

그럼으로 0x08을 이용하여 cout--를 일으켜 check에 deadbeef를 넣어주면 됩니다.

 

 

 

메모리 구조를 보면

RET
SFP
String 100
int check
int x
int count

 

이렇게 되어있습니다.

 

그렇다면 (더미가 있을 수도 있으니) 0x08을 4개(int형 변수 check)부터 넣어봅시다.

 

(python -c 'print "\x08"*4 + "\xef\xbe\xad\xde"';cat)|./attackme

 

 

반응형

'Security > Pwnable' 카테고리의 다른 글

FTZ Level 20  (0) 2021.08.09
FTZ Level 19  (0) 2021.08.09
FTZ Level 17  (0) 2021.08.09
FTZ Level 16  (0) 2021.08.09
FTZ Level 15  (0) 2021.08.09