블로그 이전했습니다. https://jeongzero.oopy.io/
16번
본문 바로가기
워게임/FTZ

16번

728x90

 

13번 까지 하다가 14번 15번도 다 똑같은 문제이므로 패스하겠다.

 

16번도 머 다 똑같은 문제이긴 하지만 그래도 간단히 포스팅을 해보겠다.

 

위 코드를 보면 shell() 함수가 있다. 

 

또한 fgets함수가 있다.

 

버퍼의 크기는 20인데 48바이트만큼 입력을 하니 이역시 오퍼플로우의 취약점을 가지고 있다.

 

메인함수에서 crap 변수, call 함수포인터 변수가 존재한다.

 

 

 

공격 흐름

1. buf부터 함수포인터인 call 변수까지의 거리를 알면 call 함수포인터가 shell함수를 부르게 하면 끝

 

 

gdb로 메인을 봐보자.

 

 

 

버퍼의 크기를 0x38 즉 56바이트 만큼 할당하므로 ebp부터 버퍼까지의 공간은 56바이트이다.

 

버퍼가 20바이트 이므로

 

36바이트가 더미 값인데

 

그중 ebp-16이 함수포인터 call의 위치이므로 스택은 다음과 같이 구성되어 있을 것이다.

 

 

따라서 버퍼 20바이트 + 아무값 20 바이트를 채워주고 shell() 함수의 주소값을 확인한다음 해당 주소를 그다음 넣는다.

 

이전 문제에서는 ret값을 쉘코드의 주소로 채웠는데 여기서는 shell함수를 실행만 시키면 알아서 되므로 여기까지만 해도 된다.

 

이렇게 shell함수의 시작 주소를 알아내고

 

 

다음과 같이 입력해주면 17레벨의 비밀번호가 나온다.

 

728x90

'워게임 > FTZ' 카테고리의 다른 글

13번  (0) 2019.05.11
12번  (0) 2019.05.11
11번  (0) 2019.05.11