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

13번

728x90

 

13번 문제 역시 존나 쉽다.

 

함정이라면 i라는 변수에 0x1234567이 들어가있는데 해당 i를 삽입하는 코드 부분은 안보인다.

 

이는 카나리 기법으로 오퍼플로우를 방어하기 위한 기법 중 하나로 strcpy함수가 문자열을 복사할 때 버퍼의 크기를 검사하지 않는 취약점이 있다고 했는데

 

이러한 취약점을 이용하여 ret주소까지 덮어쓰는걸 막는 방법이다.

 

방어 기법

1. argv[1]을 buf로 복사할때 중간에 0x1234567이라는 값을 박아놓는다.

 

2. 그럼 1024크기를 넘는 문자열을 복사하면서 ret까지 만약 채워졌다면 중간의 0x1234567의 값을 복사되는 값으로 덮어 씌어질것이다.

 

3. 이러한 0x1234567의 값이 변경됬다면 이를 감지하고 바로 종료를 시켜버려 해커가 원하는 동작을 못하게 한다.

 

 

 

공격 기법 

1. 그렇다면 0x1234567의 값을 건드리지 않고 ret주소까지 덮어쓴다음 11, 12번 문제처럼 똑같이 하면 된다.

 

2. 0x1234566의 위치를 확인해보자.

 

 

이 말인 즉슨 0x1234567은 ebp로부터 12만큼 떨어진 곳에 위치해 있다는 소리이다. 따라서 스택프레임으 모양은 다음과 같다.

 

 

결론적으로 1024의 버퍼와 24바이트의 더미값이 존재하는데

 

24바이트의 더미값 (12 + 4 + 8)

- 12바이트는 아무값이나 채우고

- 나머지 12바이트중 4바이트는 카나리를 위한 0x1234567의 값을

- 나머지 8바이트와 sfp의 크기인 4바이트를 채운다

 

이렇게 하면 총 1048 바이트의 값이 채워지고 그다음이 ret주소이므로 여기다가 똑같이 환경변수에 쉘 코드를 등록하고 해당 주소를 가져와 실행하면 된다.

 

728x90

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

16번  (0) 2019.05.11
12번  (0) 2019.05.11
11번  (0) 2019.05.11