ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JMP Table Write-up
    System/Pwnable.xyz 2020. 1. 20. 02:51

    [그림 1] JMP Table (100)

    간단한 OOB문제다.

    OOB도 바로 터지고 원샷 함수도 있어서 익스를 수월하게 진행할 수 있다.

     


    Problem

    [그림 2] 바이너리 실행

    바이너리에서 메뉴마다 각 기능을 제공해주고, 각 기능을 통해 Exploit을 진행하는 방식이다.

     

    [그림 3] main( )

    특이사항은 메뉴를 호출할 때, 전역변수 vtable을 인덱싱하여 실행하고 있다.

    여기서 포인트는 사용자 입력값으로 인덱스를 참조하고 있다는 점이다.

     

    [그림 4] 전역변수 View

    vtable외에도 sizeheap_buffer가 전역변수로 관리되고 있다.

     

    [그림 5] Menu - malloc( ) 

    size와 heap_buffer는 malloc( )메뉴에서 값을 입력할 수 있다.

    size는 malloc( )으로 할당할 크기가 저장되고, heap_buffer는 할당된 Chunk의 주소가 저장된다.

     


    Solve

    위에서도 말했듯이 이 문제는 OOB(Out of Bound)취약점이 발생한다.

     

    [그림 6] OOB Point

    메뉴를 실행할 때, vtable을 사용자 입력으로 인덱싱하는데 큰 값에 대한 예외처리는 이루어지고 있지만 작은 값에 대한 예외처리는 이루어지지 않고 있다.

     

    [그림 7] Size 저장공간

    따라서, -n으로 다른 공간에 저장된 주소를 호출할 수 있게 된다.

    vtable 이전 주소에 우리가 입력할 수 있는 공간은 malloc( ) size가 저장되는 0x6020B0이 있다.

     

    [그림 8] Size - oneshot( ) 주소 저장

    size공간에 oneshot( )주소 0x400A31(4196913)을 저장해주고, -2로 vtable을 인덱싱해주면 size공간을 참조하게 된다.

     

    [그림 9] vtable size공간 참조

    메뉴를 호출할 때 size공간에 저장된 0x400A31을 참조하게 되면서 oneshot( )가 호출된다.

     

    [그림 10] Solve

    'System > Pwnable.xyz' 카테고리의 다른 글

    two targets Write-up  (1) 2020.01.20
    note Write-up  (0) 2020.01.19
    misalignment Write-up  (0) 2020.01.19
    xor Write-Up  (1) 2019.12.22
    Welcome Write-Up  (0) 2019.12.08

    댓글

Designed by Tistory.