ghkdtlwns987
UAF vs Double free Bug간단 정리 본문
UAF vs Double free Bug
UAF(Use After free) 는
malloc() 하고 free() 했을때 , 또다시 동일 size를 malloc() 하게 되면
기존에 존재하던 heap 영역을 재사용 할 수 있다.
근데 만약 heap 에 포인터가 존재한다면 그 포인터를 system() 과 같은 주소로 덮게 되면
exploit 이 된다.
하지만 UAF 는 glibc2.23 이상은 막혔다.
Double free Bug
DFB는 free() 를 연속으로 하게되면 발생하는 버그이다.
free(ptr1)
free(ptr1)
-> glibc 2.23 까지는 이와같이 free() 해도 무방했는데,
이제 더이상 위와같이 free()하게 되면 오류가 발생한다.
free(ptr1)
free(ptr2)
free(ptr1)
그래서 위와같이 free() 시켜주어야 한다.
DBF는 unlink 취약점과 관련이 있는데,
fd + 12 -> bk 가 들어가고,
bk + 8 -> fd 가 들어가게 되는데,
만약 fd의 위치에 function@got - 12 를 넣고
bk 의 위치에 system@plt 를 넣으면
exploit 이 된다.
혹은 heap overflow 가 가능할시,
P_flag의 값을 변경해서 flag 값과 prev_size값을 수정해주고, size 값을 변경하게 되면
실제로 free() 하지 않았는데도, 컴퓨터가 free() 되었다고 착각하도록 만드는 것이다.
이렇게 착각하게 되면 unlink 매크로가 실행되면서 exploit 이 가능해 진다.
'Heap Exploitation' 카테고리의 다른 글
[Heap Exploit Technique] fastbin_dup_into stack (0) | 2021.01.31 |
---|---|
[Heap Techniques] Heap Memory leak (Unsorted bin)(main_arena) (0) | 2021.01.31 |
[glibc2.23] Heap bins 정리 4 (largebin) (0) | 2021.01.28 |
[glibc2.23] Heap bins 정리3 (smallbin) (0) | 2021.01.28 |
[glibc2.23] Heap bins 정리 2 (Unsorted bin) (0) | 2021.01.28 |
Comments