본문 바로가기

wargame/ftz

FTZ level16





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함수의 주솟값을 입력해준다.






'wargame > ftz' 카테고리의 다른 글

ftz level18  (0) 2016.09.13
FTZ level17  (1) 2016.07.13
FTZ level16  (0) 2016.07.12
FTZ level15  (0) 2016.07.12
FTZ level14  (0) 2016.07.12
buffer over flow 필독 자료  (0) 2016.07.12