tcache를 잘못 알고있는건가해서 여쭈어봅니다

맨 처음에 해제된 청크가 제일 마지막에 재할당되는 LIFO 방식으로 알고있었는데

실습문제 코드에서 DFB로 duplication을 일으킨 뒤 libc Leak 과정 중에
첫 번째 할당 alloc(0x30, "BBBBBBBB")에서는 예상과 달리 맨처음 해제되었던 청크가 할당되고,
두 번째 할당 alloc(0x30, "\x60")에서야 stdout에 만든 free chunk가 할당되는게 이해가 안됩니다.

제 생각으로는 stdout에 만든 free chunk가 먼저 재할당되어야하는게 아닌가 싶었습니다

제가 완전 다르게 이해하고있는걸까요?.. ㅠ

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

음...? 제가 질문을 잘 이해하지 못하고 있는 느낌이긴 하지만...

티캐시 포이즈닝의 경우 기본 원리가

  1. 힙을 할당한다.
  2. 힙을 해제한다.
  3. 해제한 청크의 bk 값을 수정한다
  4. 해제한 청크의 fd 값을 티캐시에 쓸 값으로 수정한다.
  5. 할당한다. 이때 티캐시에 4의 값이 삽입된다.
  6. 할당한다. 이때 4의 값 위치에 할당된다.

입니다.

혹시 이 댓글로도 궁금하신 부분이 해결이 안된다면 댓글 부탁 드립니다.

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