Dork's port

FTZ Level16 Write-up(FTZ Level16 풀이) 본문

Hackerschool FTZ Write-up

FTZ Level16 Write-up(FTZ Level16 풀이)

Dork94 2018. 3. 26. 02:32

정말로 끝이 보이기 시작하네요!


16번 입니다!


힌트를 보니 printit의 함수를 포인터 형태로 저장하여 마지막에 call()을 통해 포인터에 저장된 함수를 call하네요!


원래대로라면 Hello there!이 출력되는 함수가 실행되어야 하지만 그 위에 의심스러운 함수가 있네요!



자연스럽게 gdb를 사용하여 main의 코드를 볼까요!


fgets의 인자로사용하는 저 c8의 주소가 buf의 주소이겠네요!


그리고 마지막에 어떠한 주소를 저장하고 call을하는 저 주소가 바로 call의 변수 이겠네요! 역시 차이는 0x28만큼 납니다!


그리고 우리는 여기서 shell 함수의 주소를 찾기 위해 아래와 같이 명령어를 입력하면 친절하게 gdb가 시작주소를 알려줍니다!


(gdb) disass shell



만세!



그리고 늘 그랬듯 아래와 같이 명령어를 작성해주시면~~~


짜란~~ 쉘이 나타났네요 ㅎ



my-pass를 통해 다음 문제로 귀귀씽!



Comments