티스토리 뷰

HackerSchool FTZ WARGAME Solution

 

Start : 15.07.03

 

LEVEL13

[그림 1]

 

level13의 hint 파일을 열어 보면 [그림 1]과 같이 출력이 된다. i 라는 long 형태의 변수에 0x1234567 이 저장되고 argv를 통해 전달된 값은 buf 배열에 저장된다. level11과 마찬가지로 strcpy 함수를 이용하기 때문에 main 함수 인자값으로 오버플로우를 일으켜서 RET 를 덮어쓰면 되는데 주의할 점이 변수 i 에 0x1234567 이 없다면 그냥 프로그램이 kill 되어서 강제 종료 되어 버린다.

[그림 2]

 

gdb 로 attackme를 열어서 확인해보면 변수 i는 [ebp-12] 영역으로 할당되어 있고, buf 배열은 [ebp-1048] 부터 시작 된다. 이것은 오버플로우를 하되 [ebp-12] 영역에는 0x1234567 를 넣어줘야만 정상적으로 쉘 코드가 실행 된다는 것이다.

 

[그림 3]

 

우선 쉘 코드를 환경 변수에 저장한다.

 

[그림 4]

 

마찬가지로 간단한 코딩을 해서 쉘 코드가 저장된 환경 변수의 주소값을 확인 한다.

[그림 5]

 

[ebp-1048] 에서부터 [ebp-12] 까지의 거리는 1036byte 이므로 그 전까지는 dummy 값으로 채워주고 그 다음 4byte 만큼은 0x1234567을 입력하면 된다. 주의할 점은 리틀엔디언 방식으로 cpu가 처리를 하기 때문에 1byte씩 끊어서 끝자리 부터 입력을 해주면 된다. 그리고 RET전까지 남은 12byte 를 dummy 값으로 채운 다음 쉘 코드 주소값을 넣어 주면 된다.

신고
댓글
댓글쓰기 폼