본문 바로가기

WARGAME/FTZ [system]

ftz level 16 [level16]

 

level16

 

 

 

역시 bof 로 보이고, fgets 함수의 취약점을 이용하면 될 것 같다.

20 바이트 크기의 buf 를 할당하고, 사용자로부터 48바이트 만큼의 입력을 받는다.

 

그리고 printit 의 주소를 출력해주는 실행파일로 보인다.

 

 

우리는 위에 보이다시피 shell() 의 주소가 call() 되도록 만들면 쉘을 딸 수 있을 것이다.

 

 

 

 

 

 

 

 

하도 많이해서 익숙해진 gdb 로 buf 와 call() 의 거리를 확인해보자.

스택까지 그려보자.

 

 

 

 

 

 

 

 

손으로 써서 알아보기 어렵지만,

대충 esp-56(0x38) 이 buf 의 시작주소, esp-16 이 call() 의 시작주소가 된다는 뜻.

 

즉, esp-16 에 들어간 주소 값이 printit() 의 주소가 된다는 뜻이다.

 

 

 

 

 

 

 

 

이자리에 shell() 의 시작주소를 넣고 싶은거니까, shell() 을 disas 해서 시작 주소를 알아내자.

 

0x080484d0 이 shell() 의 시작 주소이다.

 

 

 

 

 

 

 

 

 

 

그럼 buf 와 call() 의 주소가 40만큼의 차이가 나므로 

페이로드를 작성해서 입력해주면,

 

level17 password "king poetic" 획득 !

 

 

 

 

 

 

 

 

계속 비슷한 형태의 스택 구조가 나와서 문제 풀이는 간단한 것 같다.

 

 

 

 

'WARGAME > FTZ [system]' 카테고리의 다른 글

ftz level 18 [level18]  (0) 2020.05.01
ftz level 17 [level17]  (0) 2020.05.01
ftz level 15 [level15]  (0) 2020.05.01
ftz level 14 [level14]  (0) 2020.04.30
ftz level 13 [level13]  (0) 2020.04.30