아래 실습환경은 glibc 2.23 이다. unsorted bin attack공격조건해제된 청크의 bk 포인터를 조작할 수 있어야 한다. 기본적으로 모든 버전에서 free된 chunk에 접근하여 값을 쓸 수 있어야한다. unsorted bin attack이란?해제된 청크의 bk 포인터를 조작할 수 있을 때, 임의 주소에 main_arena 영역의 주소를 쓸 수 있는 공격 기법이다.쓰여지는 값은 주로 특정 버퍼의 사이즈를 덮는 등 추가적인 공격을 연계하기 위해 사용된다. 재할당 과정fastbin의 크기가 아닌 청크를 처음 해제하면 fd, bk 영역에 main_arena 영역의 주소가 써진다. 그리고 같은 크기로 힙을 할당하면 fd를 찾아 해당 주소에 재할당 한다.위 사진은 free직후의 free된 chun..
아래 실습환경은 glibc 2.23 이다. double free란?하나의 chunk에 대해 free를 두번 하게 되면서 생기는 오류이다.if (__builtin_expect (old == p, 0){ errstr = "double free or corruption (fasttop)"; goto errout;}이러한 코드로 인해 free를 두번 할 경우 오류가 생긴다. 하지만 만약 chunk1 해제후 chunk2를 해제하고 다시 chunk1을 해제하면 old는 chunk2이고 p는 chunk1이여서 이 오류검출을 우회할수있다. 그러면 같은 binlist에 같은 주소가 2개가 생긴다. 이렇게되면 재할당시 두개의 객체가 한 개의 주소를 가리킬수 있게 된다.#include #include int main(){ ..
UAF란?Use After Free해제된 메모리에 접근할 수 있을때 발생하는 취약점공격조건메모리 참조에 사용한 포인터를 메모리 해제 후에 적절히 초기화하지 않는경우해제한 메모리를 초기화하지 않고 다음 청크에 재할당Dagling Pointer란?유효하지 않은 메모리 영역을 가리키는 포인터취약한 부분malloc함수는 할당한 메모리의 주소를 반환하여 선언된 포인터에 저장된다. 그리고 free를 하면 chunk를 반환하는데 이때 chunk의 주소를 담고 있던 포인터를 초기화하지 않는다. 따라서 free이후에 프로그래머가 포인터를 초기화하지 않으면 포인터는 해제된 chunk를 가리키는 Dangling Pointer가 된다.따라서 공격자에게 공격 수단으로 활용될 수도 있다.예1// Name: dangling_ptr..