FTZ (Free Training Zone) level16
1. 환경 : window10
2. VM, Red Hat Linux 9.0, putty
id : level16
pw : about to cause mass
1. Cat hint를 사용하여 코드를 본다.
2. 코드를 분석한다.
Int crap 은 crap이라는 이름의 변수 [4byte]를 만든다.
Void(*call)()=printit; call이라는 포인터 함수에 printit의 주소를 넣는다
Char [20] char의 변수명에 20의 버퍼 공간을 만든다.
Feget 함수를 이용하여 입력받는다 (stdin은 키보드 같은 표준입력 장치에서 입력을 받는 것 )
Call() 함수를 호출 한다.
3. 분석
Call이라는 함수 호출 이전에 printit의 주솟값을 넣어주었다.
이 주솟값 대신 bof과정 중에 환경변수를 제작하여 그 주소를 넣어주면
Call 함수를 호출할 때 환경변수의 주솟값을 호출하여 권한을 얻고 쉘을 실행시킨다.
5. Gdb를 사용하여 스텍의 구조를 확인한다 .
여기서 확인 할 것은 [ebp-16]의 위치에 printit의 주솟값을
넣어주었다는 것이다.
gdb로 printit을 확인해보면 주솟값이 [ebp-16]윛;에 넣어준 것과 같다.
gdb를 사용하여 shell 함수의 주솟값을 찾아낸다.(0x080484d0)
그 후 [ebp-16] = 56-40=40
40까지 아무런 값을 넣어준 후 shell함수의 주솟값을 입력해준다.
'Study > ftz' 카테고리의 다른 글
ftz level18 (0) | 2016.09.13 |
---|---|
FTZ level17 (1) | 2016.07.13 |
FTZ level15 (0) | 2016.07.12 |
FTZ level14 (0) | 2016.07.12 |
buffer over flow 필독 자료 (0) | 2016.07.12 |
댓글