FTZ WriteUp

Level16

 

 

이번 문제는 함수 포인터에 대한 문제다

저번 단계의 포인터문제에서도 조금 머리를 썩였는데 이번은 어떨지

 

일단 스택 구조부터 알아보자

 

 

 

먼저 스택 프레임으로 0x38. 56바이트 만큼 할당된다

그리고 buf의 시작은 ebp-56부터 시작한다 그리고 call함수가 호출되는 부분이 ebp-16이다

 

그렇다면 ebp-56에서 20만큼 그리고 다음 변수인 call ebp-16에서부터 4만큼

Buf call사이에 20만큼이 빈다, 더미다

그리고 call다음에 crap이 온다

그 후에 dummy 8만큼온다

 

다음 처럼 보일 수 있다

 

 

 

이렇게 되는 것이다

 

자 이제..main+33 BP를 걸고 아무값이나 넣고 뭐가들어가있는지 확인해보자

 

 

 

call부분에 printit이 들어가 있다 그럼 여기에 shell의 주소를 넣게 된다면 shell()이 실행 되는걸까?

한번 해보자

 

 

 

역시나! Call shell()의 주소값을 넣었더니 shell()함수가 실행됬다

 

함수 포인터라길래 겁을 먹었는데 의외로 쉽게 풀린 것 같다

Phantom@TeamH4C

댓글

댓글 본문
작성자
비밀번호
버전 관리
홍승표
현재 버전
선택 버전
graphittie 자세히 보기