Large bin attackLarge bin attack?Large bin은 크기가 큰 청크들을 순서대로 정렬하여 관리한다.Large bin에 있는 청크(fwd)의 bk를 조작하여 임의 주소에 청크(victim) 주소를 덮어쓰는 공격 기법이다.이때 victim과 fwd의 크기가 같을 때 bk_nextsize까지 이용하여 임의 주소 2곳에 청크 주소를 덮어씌울 수 있다. 1. 공격 조건Unsorted bin 청크를 만들 수 있어야 한다.large bin 청크를 만들 수 있어야 한다.large bin 에 있는 청크의 bk, bk_nextsize를 조작할 수 있어야 한다. 2. glibc 2.23 large bin 동작 과정_int_malloc 함수가 Unsorted bin에서 Large bin으로 청크를 ..
Unsortedbin
Unsorted bin Memory LeakUnsorted bin Memory Leak?Unsorted bin에 청크가 처음 들어갈 때 fd, bk에 main arena 영역의 주소가 쓰이게 된다.main arena는 libc 안에 있는 구조체이기 때문에 fd, bk를 알아낸다면 libc base를 구할 수 있다. 1. 공격 조건공격자가 malloc과 free를 할 수 있어야 한다.malloc이 초기화 되지 않아야 한다.free된 청크가 tache나 fastbin이 아닌 unsorted bin에 들어가도록 큰 크기여야 한다. 예제 코드#include #include int main(){ char *ptr = malloc(0x510); char *ptr2 = malloc(0x510); free(ptr)..
Unsorted bin attackUnsorted bin attack?Unsorted bin은 다양한 크기의 해제된 청크들이 다른 bin으로 정렬되기 전에 임시로 저장되는 공간이다.해제된 청크가 Unsorted bin에 들어오면 청크의 fd, bk 포인터는 unsorted bin의 헤더를 가리키게 되어 이중 연결 리스트를 생성한다.이 때 Unsorted bin에 있는 청크의 bk 포인터를 공격자가 덮어씌울 수 있다면 임의의 주소에 main arena 영역의 값을 쓸 수 있다. 1. 공격 조건Unsorted bin에 들어갈만한 청크를 생성할 수 있어야 한다.Unsorted bin에 들어간 청크의 bk 포인터 값을 변경할 수 있어야 한다.해제된 청크와 동일한 크기의 청크를 요청할 수 있어야 한다.(동일하지 ..