ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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")가 실행됐다.


    'System > Protostar' 카테고리의 다른 글

    [Stack 6]  (0) 2018.02.10
    [Stack 4]  (0) 2018.02.02
    [Stack 2]  (0) 2018.02.01
    [Stack 1]  (0) 2018.02.01
    [Stack 0]  (0) 2018.02.01

    댓글

Designed by Tistory.