ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • FTZ 18번 Write-up
    표튜터와 함께하는 Pwnable/FTZ Write-up (11~20) 2019. 2. 6. 13:17

    혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다.


    FTZ 18번이다~

    코드를 보면 check값이 0xdeadbeef가 되면 shellout()함수가 실행되면서

    다음 권한으로 "/bin/sh"이 실행된다.


    하지만 입력받는 양이 100보다 크거나 같으면 

    "What are you trying to do?"가 나오게 된다ㅎㅎ


    이 문제를 풀기 위해서는 switch문에 있는 0x08을 이용해야하는데

    그 이유는 우선 스택에 어떤식으로 변수들이 쌓이는지 봐야한다.





    일단 어셈블리어로 코드를 보자.

    우선 C로된 코드와 어셈블리어 코드를 비교해보았다.

    (굳이 어셈블리어 코드를 안봐도 스택은 그릴 수 있지만 그래도..ㅎㅎ)

    그랬더니 아래와 같이 스택이 쌓인다는 것을 알 수 있었다.





    C코드와 마찬가지로

    x가 먼저 0으로 초기화되고

    다음으로 count가 0으로 초기화되었다.

    그리고 check값이 0xdeadbeef가 되어야 문제를 해결할 수 있었다.



    그런데??.. 


    "값은 string에 담기는데 check를 어떻게 가지??"

    라고 생각했지만


    우리에겐 0x08이 있었다!!


    위의 그림은 switch문을 어셈블리어로 본 것이다.

    순서대로 case문 두개와

    count-- 그리고 default문이다.







    스택의 그림을 보면 check와 string은 -4의 크기 차이가 난다.

    그러므로 우리는 -4만큼 즉, 0x08을 4번해주고

    0xdeadbeef를 진행해주면 역으로(?) 채워짐으로

    다음단계로 넘어갈 수 있게 된다!!



    다음단계로~~




    반응형

    '표튜터와 함께하는 Pwnable > FTZ Write-up (11~20)' 카테고리의 다른 글

    FTZ 19번 Write-up  (0) 2019.02.06
    FTZ 17번 Write-up  (0) 2019.02.05
    FTZ 16번 Write-up  (0) 2019.02.05
    FTZ 15번 Write-up  (0) 2019.02.05
    FTZ 14번 Write-up  (0) 2019.02.05

    댓글

Designed by Tistory.