소스를 보면 함수 포인터에 printf함수의 주소가 들어가있는걸 볼 수 있다. 간단하게 shell함수의 주소로 함수 포인터 변수인 call변수의 메모리 영역을 덮어주면 된다.
먼저 gdb로 printit의 함수주소와 shell의 함수주소를 구했다.
그 다음 스택구조를 확인해보니 총 40바이트(buf 20byte + dummy 20byte) 후에 printit함수의 주소가 담겨있는걸 확인할 수 있었다.
필요한건 다 구했으니 이제 printit함수의 주소가 담겨있는 영역에 shell 함수의 메모리주소값을 덮어씌워주면 된다.
'Wargame > FTZ' 카테고리의 다른 글
FTZ level18 (0) | 2018.01.07 |
---|---|
FTZ level17 (0) | 2018.01.07 |
FTZ level15 (0) | 2018.01.06 |
FTZ level14 (0) | 2018.01.06 |
FTZ level13 (0) | 2018.01.06 |