.
Chunk(addr=0x555555559010, size=0x1240, flags=PREV_INUSE)
    [0x0000555555559010     78 1b dd f7 ff 7f 00 00 78 1b dd f7 ff 7f 00 00    x.......x.......]
Chunk(addr=0x55555555a250, size=0x20, flags=)
    [0x000055555555a250     7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00    .ELF............]

위의 올린 청크 모양에서 borrow_book 을 호출한 뒤 return_book 을 호출하면 해당 책이 있었던 자리 0x555555559010 부분이 UAF 취약점으로 인해 leak 이 된다는 것을 확인 하였습니다.
상단에 있는 0x555555559010 청크 때문에 0x55555555a250 청크를 어떻게 leak 해야하는지 모르겠습니다. -
처음에는 0x555555559010 청크가 unsorted bins 로 가길래 해당 size 만큼 재할당 시켜주면 0x555555559010 청크를 무력화 시킬 수 있다고 생각하였지만 소용이 없었습니다(원하는 만큼의 size 의 재할당이 힘들었습니다)

혹시 실례가 안된다면 힌트좀 부탁드려도 될까요?


수정

문제는 풀었습니다 하지만 tcache 할땐 되고 small bin 안되는지 궁금합니다

#pwnable
작성자 정보
답변 2
avatar
Pocas
워게임 고인물

ㄷㄷㄷ

2021.05.12. 07:50
avatar
Sechack
CTF First Place

small bin크기의 chunk를 해제하게 되면 먼저 unsorted bin에 들어가게 됩니다. 하지만 이 unsorted bin은 top chunk와 인접한 주소의 chunk가 들어온 경우에는 top chunk와 병합해 버리게 됩니다. 따라서 UAF가 안먹히게 되는겁니다.

이런 이유로 다른 힙문제에서 unsorted bin attack을 사용할때는 병합을 방지하기 위해서 거의 항상 chunk를 2개이상 할당하고 기법을 사용합니다.

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