ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pwn] Beginner_Heap
    CTF write_up/Hack CTF 2019. 9. 24. 00:31

     

    Heap 관련된 문제 인것 같습니다.

     

    한번 문제를 실행해 보겠습니다.

     

    입력을 2번 받고 아무런 행위가 일어나지 않습니다.

     

    64비트 파일이군요.

     

    IDA 64bit으로 열어보겠습니다.

     

    main에서 malloc으로 동적할당 하고 있고 함수를 보니 다음과 같은 함수가 있었습니다.

     

     

    먼저 main에서는 다음과 같은 행위를 합니다.

     

    1. v3에 16 공간 할당

    2. v3+1에 8 공간 할당

    3. v4에 16 공간 할당

    4. v4+1에 8 공간 할당

    5. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v3+1에 저장

    6. s라는 변수에 최대 0x1000의 크기의 값을 입력받고 v4+1에 저장

     

    여기서 문제는 동적할당해준 크기 보다 입력받는 크기가 더 크다는 점입니다.

     

    그래서 Heap Overflow 가 여기서 일어납니다.

     

    일단 heap 공간은 아래와 같이 되어 있을 것 입니다.

     

    |------------| <---- 높은 주소

    | v4+1 [ 8 ] |

    |------------|

    |  v4  [ 16 ] |

    |------------|

    | v3+1 [ 8 ] |

    |------------|

    |  v3  [ 16 ] |

    |------------| <---- 낮은 주소

     

    일단 2번째 입력을 받을 때 데이터가 들어가는 값이 v4+1에 들어가게 됩니다.

     

    그렇기 때문에 변조할 값의 주소를 v4+1에 넣으면 될것 같습니다.

     

    첫번째 입력 : v3,v3+1,v4 까지 전부 A라는 값으로 덮은뒤[40바이트] + 덮여질 주소[4바이트] 입력

    두번째 입력 : 덮힐 주소[4바이트] 입력

     

    덮여질 주소는 exit함수의 GOT 주소를 넣을 수 있습니다.

    함수의 GOT주소를 다른 특정 주소로 덮으면 그 주소로 JMP 하기 때문에 exit의 GOT 주소를 넣고 덮힐 주소를 알아보겠습니다.

     

     

    0x400826을 넣어보겠습니다.

     

    exploit code는 아래와 같습니다.

     

     

    Flag : HackCTF{4r3_y0u_r34dy_w3lc0m3_70_h34p_53k41}

     

    'CTF write_up > Hack CTF' 카테고리의 다른 글

    [Pwn] Random Key  (0) 2019.09.24
    [Pwn] 1996  (0) 2019.09.24
    [Pwn] Poet  (0) 2019.09.24
    [Pwn] g++ pwn  (0) 2019.09.24
    [Pwn] BOF_PIE  (0) 2019.09.24

    댓글

Designed by Tistory.