저번 시간에 이어 heap영역의 취약점을 이용하는 방법에 대해 알아보자.
필자의 pwndbg가 올바르게 작동하지 않아 bound7님의 자료를 참고하여 글을 포스팅함을 알린다.
(감사합니다 형님 꾸벅 (_ㅇ_) )
1. Libc leak Tech
Unsorted bins, Small bins, Large bins를 이용하여 main_arena의 주소를 알아내는 방법이다.
만약 Fastbins 이외의 사이즈를 할당한 후 Free하면 FD, BK영역에 main_arena 주소가 들어가는 것을 응용하는 것이다.
2. Fastbin duplicate(Double Free)
더블 프리 취약점이 있을 때 이용할 수 있는 기술로 우리가 원하는 곳에 원하는 값을 쓸 수 있는 방법 중 하나이다.
이러한 취약점이 발생하는 이유는 fast top chunk와 지금 free 하려 하는 chunk가 동일한지만 검사하기 때문이다.
즉, 아래와 같은 상황에서
malloc 0x30 이후 0x603410 주소를 할당하고 0x603410에 값을 쓸 수 있게 된 것이다!
우리는 이 공간에 aaaaaaaa을 입력하였다고 가정하자!
그럼 데이터(aaaaaaaa)를 썼으니 malloc을 2번 더 사용하여 0x603410을 다시 한 번 할당받은 후
fast top이 0x6161616161616161(aaaaaaaa)을 가르키도록 만든다.
이후 한번 더 malloc을 통해 메모리를 할당받으면 0x6161616161616161의 메모리를 할당받게 된다.
물론 이 경우 segmentation fault가 발생하지만 만약 이 부분에 printf_got, puts_got같은 got영역을 주면
got overwrite가 가능하겠다!
하지만...
Fastbin Size Check를 통과해야 우리가 원하는 got overwrite를 할 수 있겠다!
즉, (fd로 사용할 곳의 주소) + 0x8 위치에 fastbins의 임의의 사이즈 값이 존재해야한다.
예를 들어 만약 __malloc_hook주변을 사용한다 할 때 __malloc_hook에서 fastbin size로 줄 수 있는 주소를 찾아야 한다.
이때 각 주소마다 MSB값이 주소 타겟이 된다(0x7f).
이런 식으로 위치를 계산해가며 0x7f값을 chunk의 size에 옮겨 사용한다(단, 더블 프리한 곳의 size가 0x70이어야 함).
'Systemhacking > Base info' 카테고리의 다른 글
unsorted bin attack (0) | 2023.06.02 |
---|---|
unsafe Unlink in heap (0) | 2022.11.07 |
Heap Base (0) | 2021.04.03 |
What is GOT & PLT (0) | 2021.01.24 |
Security Techniques 1. (0) | 2021.01.22 |
댓글