-
[FTZ]해커스쿨(HackerSchool) LEVEL13 풀이(Solution)미사용/##Security 2015. 8. 15. 01:19
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 값으로 채운 다음 쉘 코드 주소값을 넣어 주면 된다.
'미사용 > ##Security' 카테고리의 다른 글
[FTZ]해커스쿨(HackerSchool) LEVEL15 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL14 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL12 풀이(Solution) (0) 2015.08.15 [FTZ]해커스쿨(HackerSchool) LEVEL11 풀이(Solution) (0) 2015.08.15 [SystemHacking] 버퍼 오버플로우(BufferOverflow)의 개념과 방법 (3) 2015.07.28