9일차

2021. 11. 20. 22:00FTZ [해커스쿨]/level

Login Id : level9

Password : apple

 

힌트를 열어보면

위를 보면 코드가있는것을 볼 수 있다. 이 코드가 우리가 /usr/bin/bof라는 파일을 실행시킬때 사용되는 명령어이다.

그러면 이 명령어가 어떻게 생겼나 한번보자

일단 메인 함수를 열고 문자형 배열 buf와 bu2를 각각 10의 크기로 만들고 

"It can be overflow : "라는 문자열을 출력한다. 그 다음 buf에 문자를 40byte만큼 받아오고 

만약 buf2에 처음으로부터 2바이트 가량의 내용이 go와 같은지 비교한 후 같을 경우 "Good Skill!"를 출력하고 

레벨 10이라는 권한을 부여 한뒤 쉘을 실행시킨다.

 

자 그러면 지금 우리가 해야할 것은 buf2에 go라는 값이 들어가게 해야하는데 분명히 입력을 받는 변수는 buf이다. 

하지만 문제를 보면 buf의 크기는 10byte인데 왜 40byte의 값을 받는걸까? 만일 10byte를 넘게 값을 입력하면 어떠한 일이 생길까라는 의문이 들지 않는가? 이러한 의문에서 나온 기법이 bof(buffer overflow)이다. bof가 그럼 무엇이냐?

일단 이를 알기전에 우리는 main함수가 호출 되었을 때 즉 이 프로그램이 실행될 때 어떤식으로 메모리에 저장되는지 확인해보자

 

일단 root계정으로 level9의 위치에 bof.c라는 파일을 만들었다. 위의 코드를 그냥 복사 붙여넣기를 했다.

자 그러면 이 프로그램을 분석해보자 

 

일단 root로 bof.c를 컴파일 후 gdb를  통해 어셈블리 코드를 분석해보자

이렇게 입력을 하게 되면 이렇게 긴 영어문장이 나오는데 이 것들을 없애기 위해서 -q를 사용했다.

자 이렇게 하면 gdb에 들어와지는데 gdb(GNU Debugger)란 GNU 소프트웨어 시스템을 위한 기본 디버그 즉 

디버그는 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산을 찾아내고 그 원인을 밝히고 수정하는 과정이라 위키백과에 정의 되어있다.

우리는 이러한 디버거 과정을 통해서 bof프로그램을 분석할 것이다.

 

실행을 하게 되면 이러한 어셈블리 코드가 나온다. 자 그럼 이것을 스택으로 변환하여서 보면 이러한 모양이 된다.

음.... 내가 스스로 이 자료를 해석할 줄 모르겠어서 내일 부터는 드림핵(dreamhack)의 리버스 엔지니어링을 공부하고 와서 다시 시작해야겠다.

'FTZ [해커스쿨] > level' 카테고리의 다른 글

8일차  (0) 2021.11.19
7일차  (0) 2021.11.18
6일차  (0) 2021.11.17
5일차  (0) 2021.11.16
4일차  (0) 2021.11.15