Completed
20 coins 헷갈리는 부분 질문

해당 문제 메커니즘은 대부분 이해했는데 헷갈리는 부분이 있습니다.

더블프리를 해서 청크의 next부분을 stdout (library내의 IOstdout을 가르키는 포인터)로 덮고 alloc을 두번 해주면 library 주소가 leak된다고 하였는데,

stdout이 library영역을 가르킨다면, 청크가 할당 될 때 청크의 위치가 library 영역이 되는거고 그 청크를 프린트하면 나오는건 library 영역에 써져있는 코드여야 하는거 아닌가요?

tcache_entry구조에서 next에 들어가 있는 주소는 다음 할당할 청크의 주소일텐데, 그 청크의 주소가 libary 영역이라고 해도 우리가 프린트할 수 있는 data섹션에 담긴 값은 주소가 아닌 그저 stdoutIO를 이루는 코드인 것 아닌가요?

#pwnable
Author
When you need more in-depth answers
Contact the Dreamhack team and mentors directly!
Answers 1
This answer was accepted. Thanks for sharing!

libc 내의 _IO_2_1_stdout 구조체를 가리키는 stdout 포인터는 bss 영역에 위치합니다.
Tcache Poisoning을 이용하여 "bss 영역의 stdout 포인터 위치" 에 힙 청크를 할당하고 이를 출력하여 libc의 주소를 얻는 것입니다.

2025.08.10. 03:29