ghkdtlwns987

UAF vs Double free Bug간단 정리 본문

Heap Exploitation

UAF vs Double free Bug간단 정리

2020/03/31 2021. 1. 29. 14:49

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 이 가능해 진다.

Comments