이건 왜 안되는건가요
문제는 풀었으나, 서버와 다르게 로컬(ubuntu 16.04, /lib/x86_64-linux-gnu/libc-2.23.so
GNU C Library (Ubuntu GLIBC 2.23-0ubuntu11.3) stable release version 2.23, by Roland McGrath et al.
Copyright (C) 2016 Free Software Foundation, Inc.)
에서는 flag를 steal 하면 이상한 0x1241 정도의 큰 unsorted bin 청크가 생깁니다. 왜 그러는 지 궁금합니다.
그리고 서버에서도 궁금한 점은
steal 하는 size가 꼭 borrow 된 사이즈에 맞추어야 하는지 의문이 드는데,
같은 주소를 가리키고 있다면, 만약 0x100만큼을 borrow하고 UAF 한다고 할 때 steal을 0x30만큼 하더라도 읽을 수 있는게 아닌가요?
왜 안되는지 모르겠습니다..
#pwnable
작성자 정보
답변
1
wyv3rn
무플 방지 위원회장
heap 영역 할당 방식을 이해하셔야 합니다.
기본적으로 uaf는 힙이 해제되고 동일 사이즈가 할당 되었을때 동일 위치에 할당된다는 점을 이용하는거라 그렇습니다.
단, 읽어들이는 크기(할당되는 크기가 아니라)를 매우 크게 설정한다면, 그리고 널바이트도 무시하고 출력해준다면 앞의 힙에서 뒤의 힙 내용도 출력 가능하긴 합니다.