-
해커스쿨 ftz level9(2)System/HackerSchool ftz level 2019. 3. 6. 23:31
char 타입 buf2 배열과 buf 배열을 초기에 설정한다(글자수는 10으로 제한),
It can be overflow : 문장 뒤에는 buf 배열을 입력하도록 하는데, 이 때는 40바이트만큼 입력받는다.
그 뒤에 buf2 배열의 첫 두글자가 go 일 경우에 레벨 10의 권한을 주고,
그 권한으로 패스워드를 알아내면 되는 레벨이다.
라고 (1)에서 C 소스코드를 해석했다.
알고 있으리라 믿고, 그 다음단계부터 바로 풀이하겠다
음, 다음
저 hint 파일의 소스코드를 cp 명령어로 복사하자.
여기서 문제가 뭐냐, 하면
저기 C 코드로 짜여진 프로그램의 10바이트짜리 buf 배열 다음에 buf2 배열로 넘어가기까지
덤프 메모리가 얼마나 될지 모른다는 게 이번 문제이다.
프로그램마다 덤프 메모리가 얼마나 되는지도 다 다르기 때문에
그게 10이 될지 100이 될지도 모르는데 여기서 노가다를 한다는 것은 바다에서 뗏목타고 어디론가 가겠지
하는 거랑 비슷한 거고, 좀 무리가 있다
해서 gdb 디버거로 프로그램을 디버깅한 뒤에 buf 에서 buf2 까지의 주소상 거리를 파악하고
그것을 토대로 It can be overflow : 칸에 알맞은 글자수를 입력하는 게 이번 문제의 정석이다.
미안, 딴 블로그들은 그림도 첨부하던데 나는 너무 귀찮아서 그런거 첨부 안 함
그 다음으로는 cd /tmp 로 tmp 디렉토리로 들어가서 그 hint의 코드를 실험해본다.
나같은 경우에는 뒤에 test.c 니 testgdb니 이것저것 좀 만들었지만 최종적으로는 level9 가 들어간 파일을 썼다.
- cp 명령어를 사용하여 hint의 소스코드를 tmp 디렉토리의 level9.c로 복사했다
cp 명령어를 사용하여 level9.c 에 복사를 했다면, vi 에디터를 사용해 소스코드 이외에
다른 것들을 제거하자
뭐, 예를 들면 저 아래에 글자 깨진 문장이라든지
level9file 이라는 파일로 컴파일해준다. 성공적으로 컴파일이 되면 그 뒤에 아무것도 뜨지 않는다
이제 그 파일을 디버깅해보자
저 명령은 다른 블로그에서 퍼왔다. 무슨 뜻인지는 모른다. 알고 싶지도 않다. 레벨9 그냥 빨리좀 풀 생각에
봐야 할 부분은 맨 왼쪽에서 두번째에 <main+43> 과 <main+65> 에 해당하는 명령이다
차례로 eax, [ebp-40] 과 eax, [ebp-24] 의 명령인데
각 명령의 바로 아래를 보면 곧 fget 명령과 strncmp 명령이 나오는 것을 알 수 있다.
그런데 40에서 24까지는 16바이트만큼 차이가 나므로 알 수 있다.
덤프 메모리는 16바이트만큼이라는 것을
고로 어떤 문자, 숫자가 됐던 16글자수를 채운 뒤 go 를 덧붙이면 레벨10의 권한으로 넘어간다.
거기서 my-pass 입력하면 패스워드 나오고, 글로만 보면 그리 어려워보이진 않을 거다.
뭐 그거야 각자 해보면 알테지만 (*^^*)
기빨린다. 다른 글에서 이제 레벨 10을 제외한 나머지 10문제들은 다 bof 문제라는데
빨리 gdb 와 어셈블리어와 친해져야한다. 윽엑 숙제생김;
아무튼 뿌듯하다
2019.3.6
'System > HackerSchool ftz level' 카테고리의 다른 글
해커스쿨 ftz level11 (0) 2019.06.11 아!!!(해커스쿨 level 관련) (0) 2019.03.06 해커스쿨 ftz level9(1) (0) 2019.03.06 해커스쿨 ftz level8 (0) 2019.03.04 해커스쿨 ftz level7 (0) 2019.03.03