-
[Stack 3]System/Protostar 2018. 2. 2. 20:42
[Stack 3 Code]
[Stack 3 실행]
64바이트 버퍼공간을 입력받는다.
그 후, 포인터fp안에 있는 주소값을 출력하고
그 주소값으로 fp함수를 호출한다.
따라서, BOF로 우리가 원하는 주소의 함수를 호출할 수 있게된다.
여기선 win함수를 호출하면 된다.
그럼 code flow successfully changed 라는 문자열이 출력된다.
===========================================================
동작 모습은 확인 했으니 gdb로 main함수를 열어봤다.
①에서 fp를 0으로 초기화 시켜준다.
②에서 buffer를 입력받는다.
③에서 fp가 0인지 아닌지 판별 후
④ je(jump equal) 결과가 0과 같으면 ④-2로 jump하고
다르면, ④-1로 계속 진행한다.
그후 ⑤에서 fp에 들어있는 주소값을 호출한다.
그럼 win함수의 시작주소값만 알아내면 된다.
[objdump]
문제에서 힌트를 준 것 처럼
objdump툴을 이용해서 stack3를 열면
main함수 외에도 다른 함수들의 정보를 알 수 있다.
문제를 다 풀고 생각 난건데 gdb에서도 win함수 주소값을 알아낼 수 있었다..
[disassemble win]
아무튼 win함수의 주소값이 '0x08048424' 인걸 알아냈다.
win함수 printf("code flow successfully changed")가 실행됐다.
댓글