진행중
20 코인 헷갈리는 부분 질문

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

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

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

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

#pwnable
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
kwakmu18
시스템 해킹 전문가
kwakmu18
시스템 해킹 전문가

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

2025.08.10. 03:29