0ctf 2017 babyheap 문제를 푸는데, chunk의 size를 조작해서 free()하고 재할당하려는데 자꾸 오류가 발생한다 ㅡㅡ;


*** Error in `/home/0ctf_BabyHeap2017/0ctfbabyheap': free(): invalid next size (fast): 0x0000555555757040 ***


위와 같은 오류가 발생하는데... 대체 뭐가 문제인거지 ㅁㄴㅇㄹ 하면서 열심히 찾아보면서 원인을 알아내려했는데

나와 같은 에러때문에 고민하시는 분이 없는건지, 정확한 자료가 나오지않았다가 방금 갑자기 깨달아서 글로 남긴다ㅇ



그냥 에러 그대로였다. invalid next size다. 

allocated chunk와 freed chunk가 있을 때 인접한 앞/뒤 chunk의 주소를 prev_size와 size로 계산하게 되는데, 

chunk를 free()하게 되면 next chunk(chunk address + size)로 접근해서 prev_inuse bit를 바꿔주게된다. 그런데 이 size를 조작하게 되면 다음 chunk를 찾지못해서 오류가 발생한다.


즉, 위 에러가 뜬 이유는 chunk를 free()하고 (해제한 chunk + 조작된 size)에 있는 chunk의 prev_inuse bit를 바꿔주러갔더니? 

웬걸, 아무것도 없넹??? 해서 발생한것이였다...;



그러므로 size조작을 할때 위와 같이, next chunk의 위치를 제대로 잡을 수 있는 size로 조작해주는게 좋다.

끝!



아 참고로 이분이 heap에서 발생하는 에러에 대해서 pseudo-code잘 정리해두셨길래 링크남기고 글을 끝낸다.

http://dokydoky.tistory.com/460


'Pwnable!!' 카테고리의 다른 글

[main_arena_offset] libc파일에서 main_arena 오프셋 구하기  (0) 2019.01.27
[C] read 함수  (0) 2019.01.21
gdb에서 __malloc_hook / __free_hook 주소 찾기  (0) 2018.10.06
pwntools 사용해서 ssh 연결  (0) 2018.07.23
setvbuf란?  (0) 2018.07.10

+ Recent posts