ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Binary Exploitation] Format #1
    CTF write_up/NACTF 2019. 9. 24. 00:23

     

    일단 c코드를 확인해 보겠습니다.

     

    vuln함수의 FSB 취약점을 이용해서 num의 값을 42로 맞춰주면 Clear 되는 것 같습니다.

     

    파일을 실행해 보면 다음과 같은 문자열이 출력됩니다.

     

    앞전 format-0문제와 똑같이 4번 오프셋에 값이 들어 갑니다.

     

    %n이란?

    앞에 나온 문자열의 공간의 개수 만큼을 다음 주소에 넣어 주는 것 입니다.

     

    이러한 코드가 있을때 num의 값은 4라는 값이 들어가게 됩니다.

    123\0 => 4개의 공간을 차지하기 때문입니다.

     

    그렇다면 일단 num 인자가 어디에 있는지 확인해 보겠습니다.

     

    vuln+77에 break를 걸고 확인해 보겠습니다.

     

    buf 변수의 ret에는 main으로 나가는 주소값이 있을 것이므로 미리 확인해 가겠습니다.

     

    RET의 주소는 0x080492a9입니다.

     

    앞전과 같은 24 오프셋에 num이 있습니다.

     

    24오프셋에 42라는 값을 넘겨 보겠습니다.

     

    페이로드가 잘 안보여서 다시 입력 하겠습니다.

     

    (python -c 'print "%c"*22+"%20c%n"') | nc shell.2019.nactf.com 31560

     

    이렇게 작성한 이유는 24번째 오프셋에 입력값이 들어가기 때문에 %n을 24 오프셋에 맞춰 주기 위해서 앞에 %c를 23개 적고 %n을 적어주면 앞에 있는 공간을 %n자리인 24오프셋에 넘겨 줄 수 있습니다.

     

    하지만 "%c"*22+"%c%n"이라고 적으면 총 공간이 23 밖에 안되기 때문에 %n이 23이 되고 num에 23이라는 값이 들어가게 됩니다.

    그래서 "%c"*22+"%20c%n"을 적어서 22+20=42의 공간을 만들어서 24오프셋인 num에 42라는 값을 넘기게 되는 것 입니다.

     

    Flag : nactf{Pr1ntF_wr1t3s_t0o_rZFCUmba}

     

     

     

     

    댓글

Designed by Tistory.