Tcache LIFO

Tcache가 LIFO 순서로 할당된다는데 그렇다면
# Append address of stdout to tcache[0x40]
# tcache[0x40]: chunk A -> stdout -> IO_2_1_stdout -> ...
addr_stdout = e.symbols['stdout']
alloc(0x30, p64(addr_stdout))

# tcache[0x40]: stdout -> IO_2_1_stdout -> ...
alloc(0x30, b'BBBBBBBB')

해당 과정에서 chunk A가 BBBBBBBB로 할당되는 것이 아니라 나중에 들어온 stdout이 할당되어야 하는 것 아닌가요?

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

음... 어떻게 헷갈리시는지 잘 모르겠습니다만,
tcache의 0x40에 해당하는 힙의 주소가 최초에는 A였고, 여기서 A는 stdout의 주소를 가지고 있고 stdout의 주소는 IO_2_1_stdout의 주소를 가지고 있을 것입니다.
이후 alloc 2회를 통해 tcache poisoning 이 이루어졌으며, 이로 인해 tcache 0x40 주소에 stdout 주소가 들어간 것입니다.

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