
House of SpiritHouse of Spirit은 free함수의 인자를 우리가 원하는 값으로 보내서, 이 값에다가 재할당해서 AAW이나 AAR등을 할 수 있는 기법이다. 해당 기법으로 원하는 위치(Heap 영역이 아니어도 상관 x! 스택이나 다른 곳도 가능~~)에 청크를 할당하여 임의의 주소의 값을 알거나 덮을 수 있다! 예) free(main의 return address) - 이렇게 해서 return address overwrite 하기위 예시와 같은 공격을 하기 위해서는 당연히 main의 return address를 알아야할 것이고 그렇다면 스택의 주소를 구하는 과정 또한 선행되어야겠다! 예시 1// gcc -o spirit1 spirit1.c -no-pie #include #include i..

House of Force 힙을 안한지 너무 오래되어서 오랜만에 힙 공부를 하는겸 House of Force 기법에 대해 분석하고자 한다. House of Force 기법은 Top Chunk의 사이즈를 조작해서 원하는 위치에 청크를 할당 할 수 있게 하는 공격 방법이다. House of Force를 보기 전에 Top chunk에 대해 다시 복습해보자. -> [Heap] Background : Chunk [Heap] Background : Chunk Heap 시리즈 [Heap] Background : Memory Allocator [Heap] Background : Chunk [Heap] Background : Bin (Fastbin, Unsorted bin, Small bin, Large bin) [He..

tcache를 알기 전에 왜 tcache가 도입되었는지 배경을 살펴보자. 이전에 우리는 'Arena'라는 개념을 알아야 한다. 이에 대해 포스트를 작성할 예정이지만 여기서는 간단히만 arena가 무엇인지 살펴보고 tcache로 넘어가자. Arena란? '멀티스레드' 환경을 지원하기 위해 도입된 것으로, arena는 각 스레드의 freelist와 chunk들을 관리하는 malloc_state 구조체이다. 기존 dlmalloc은 멀티스레드 환경을 지원하지 않았기에 동시에 두 스레드가 malloc을 호출할 경우, 한 스레드는 다른 스레드의 malloc이 끝날 때까지 그저 기다려야만 했다. 하지만 ptmalloc에서는 각각의 스레드가 분배된 힙 영역을 사용하고 freelist 또한 분배되어 사용할 수 있게 하여..

배경지식 : Double Free Bug [Heap] Exploitation : Double Free Bug [Heap] Exploitation : Double Free Bug Double Free Bug Double Free Bug(DFB)는 free(ptr1); free(ptr1);처럼 같은 메모리를 여러번 free했을 때 나타나는 버그이다. 이게 왜 문제인지는 아래에서 설명할 것임 free(ptr1); free(ptr1); free 함수는 포인터를 초 hannahsecurity.tistory.com Duble Free Bug에 대해 모르는 분들은 위 글 꼭읽고 오기! 다시 한번 DFB에 대해 복습해보자. Double Free Bug은 free등으로 동일한 힙 메모리를 중복으로 해제했을 때 일어나는 ..

이번 포스트는 [Heap] Exploitation : Double Free Bug을 알아야 읽을 수 있다. Fastbin dup & poisoning Fastbin dup fastbin dup은 double free bug을 통해 이미 할당된 청크에 다른 청크를 또 할당하는 기법이다. 아까 위에서 재할당을 통해서 ptr3만 0x602030을 가리키게 했지만 만약 추가적으로 ptr4,ptr5로 두번이나 재할당하게 되면 ptr5또한 0x602030을 가리키게 된다. 그래서 0x602030에 두개의 청크가 할당되게된다. Fastbin Poisoning fastbin poisoning은 이미 해제된 힙 청크의 fd를 조작하여 임의의 주소에 힙 청크를 할당할 수 있게 하는 공격이다. 아까 위에서 ptr3이 0x6..

Poison NULL Byte 이 공격은 인접한 청크의 메타 데이터를 조작하는 방법으로 size의 하위 1바이트를 overwrite하는 기법이다. 데이터 영역과 다음 청크 size의 flag부분은 바로 붙어있으므로 입력한 값이 조금만 넘쳐도 overwrite하게 된다. 이를 통해 다른 공격과 연계할 수 있다. 이 버그를 트리거하는 함수로는 readdata,strncat,fgets 등이 있다. 꼭 힙이 아니더라도 Off-by-one 등 다른 공격으로도 이어질 수 있다. // gcc -o null1 null1.c #include #include #include int readdata(char *buf, int len){ read(0, buf, len); *(char *)(buf + len) = '\x00';..