ABOUT ME

-

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

     

    문제를 해결하기 위해서 한번 .c 코드를 확인해 보겠습니다.

     

     

    일단 인자로 flag 라는 변수를 넘겨 줍니다. 

    그렇다면 스택 구조를 잠시 예상해 보자면

    buf[64] + SFP + RET(main으로 돌아가는 주소) + 인자값 주소 의 형식을 것 으로 예상합니다.

     

    일단 gdb로 열어보겠습니다.

     

    여기다가 break를 걸고 실행해서 $esp를 확인해보겠습니다.

     

    flag.txt 가 필요하다고 하네요! flag.txt를 임의적으로 만들어 보겠습니다.

     

    $esp 값을 확인해 보겠습니다.

     

    $esp-12로 한이유는 입력을 받으면 다음과 같이 나오기 때문에 똑같이 맞춰주기 위해서 한것입니다.

     

    61616161이 들어간 4번 오프셋을 기준으로 한번 인자값 부분을 찾아보겠습니다.

     

    buf[64] + SFP[4] + RET[4] + 인자값[4]

    RET에는 main함수로 가는 주소가 들어있을 것입니다.

     

     

    RET의 주소 : 0x0804928a

     

    64바이트는 16오프셋! buf의 공간은 다음과 같이 드래그 해 두었습니다.

     

    그리고 SFP와 RET가 나와야 하는데 RET가 buf 끝으로 부터 4오프셋 자리에 있기 때문에 다음과 같이 정의가 가능합니다.

     

    드래그 블록처리 한부분 : buf[64]

    파란 박스 : 쓰레기값 

    녹색 박스 : SFP

    빨간 박스 : RET

    밑줄 : ★인자값★

     

    인자값은 24오프셋 자리에 flag 인자값의 데이터가 들어있습니다.

     

    %24$s 라고 입력했습니다.

    왠지 모르게 칼리리눅스에서 %값이 겹쳐져서 보입니다.

     

    Flag : nactf{Pr1ntF_L34k_m3m0ry_r34d_nM05f469}

     

     

     

    댓글

Designed by Tistory.