목적 : 공격자가 만든 fake chunk를 fastbin으로 반환해서 fastbinsY에 원하는 주소를 등록하는 것.
malloc() 호출로 리턴된 chunk 주소를 포함하는 변수를 overwrite
Ex. malloc(0x40) 이 성공적으로 되면 chunk 주소를 리턴해주는데, 이 chunk 주소 값을 buf 포인터 변수가 저장한다.
buf는 할당된 chunk를 가리키게 된다.
buf를 fake chunk에 대응하는 메모리 주소로 수정할 수 있음
방법은
1. fake chunk의 size를 malloc()이 요청되는 사이즈와 같게 만든다.
-> “free(): invalid size” Security check 우회
2. glibc에서 free할 때, 뒤에 인접한 청크의 크기를 검사한다.
따라서 fake chunk 뒤에 또 하나의 다른 fake chunk가 필요하다.
=> “free():invalid next size (fast)” Security check 회피
이때 size는 원래 사용하려던 fake chunk와 같아도 되고, top chunk를 흉내내듯 큰 자릿수도 상관없음
포인터 값을 변조했으므로, free() 시 fake chunk가 해제되어 fastbin에 들어감
같은 크기로 malloc하면 fastbin에 들어간 fake chunk가 할당된다.
[Heap Exploitation] fast_dup (0) | 2019.11.25 |
---|---|
[Heap Exploitation] Use-After-Free (UAF) (0) | 2019.11.25 |
[TechNote] malloc (Heap) (0) | 2019.11.02 |
[Exploit Tech] JOP(Jump-Oriented Programming) (0) | 2019.11.02 |
[Exploit Tech] One gadget (3) | 2019.11.02 |