calloc 이란?calloc은 malloc과 같이 동적으로 메모리를 할당하는 함수이다.calloc은 할당과 동시에 메모리를 초기화 해서 기존에 남이있던 데이터의 재사용을 방지한다.void *calloc(size_t nmemb, size_t size);calloc함수는 다음과 같고 첫 번째 인자는 할당할 크기, 두 번째 인자는 자료형의 크기다.그래서 총 크기는 nmemb * size 가 된다. calloc의 특징- calloc으로 할당한 힙을 해제하면 tcache_entry에 추가되긴 하지만 다시 calloc 함수를 통해 할당 요청을 하면 tcache_entry를 참조하지 않는다. 즉, tcache에 들어가기는 하지만 tcache에서 가져오지는 않는다. breaking calloccalloc 함수를 호출..
2024년 4월 27일에 열린 핵테온 예선전에 참가하였다. 이번 대회는 고급과 초급으로 나뉘어서 진행되었는데 문제는 같지만 배점을 다르게 하고 고급에서 20팀, 초급에서 20팀 해서 본선에 40팀이 올라가게 된다. 아쉽게도 예선 탈락을 했다.. 문제 카테고리는 포너블, 웹, 리버싱, 포렌식, 트렌드 가 나왔다. 포너블은 3문제가 나왔으며 작년에 비해 난이도가 꽤 어려웠다. 아쉬운대로 유일하게 풀었던 Intelitigation 문제 라업을 적어볼까 한다.해당 문제는 제공파일은 주어지지 않았으며 서버로 접속만 가능했다. 접속을 하면 base 64 로 인코딩 된 문자열이 출력됬는데 이를 디코딩 하면 해당 문제의 바이너리를 얻을 수 있다.바이너리는 다음과 같다. 뭐 별거 없다. 그냥 buffer overfl..
사실 이전 블로그에 이미 등장했지만 어쩌다보니 순서가 이렇게 되었다.공격조건임의의 주소 참조 가능, 혹은 임의의 주소에 fake chunk 만들기 가능, 2.34 부터 hook 없어짐 __malloc_hook overwrite란?__libc_malloc에는 hook 함수 포인터가 존재하는데 이는 malloc함수가 시작할 때 실행할 함수의 주소를 가진다. 일반적으로는 null이며 인자값으로는 malloc함수의 인자값을 그대로 사용한다. 그래서 이것을 one_gadget으로 overwrite하고 malloc을 호출하거나 hook을 system함수로 overwrite 하고 malloc(”/bin/sh”의 주소)를 실행하면 셸을 획득할 수 있다.free에도 free_hook이 존재하기 때문에 똑같이 적용할 수 ..
공격조건2.27에서는 가능, heap overflow 발생 Heap Feng Shui란?힙의 레이아웃을 조작하여 원하는 객체를 덮어쓸 수 있게 하는 기법이다.중요한 점은 tcache에서는 size검증을 안해서 heap overflow를 통해 free된 tcache chunk의 fd(next)를 아무 주소로 overwrite하면 그 주소를 chunk로 할당 가능하다.별다른 특징이 없는 기법이다. 예제// gcc -o fengshui1 fengshui1.c -no-pie #include #include #include int add();int del();int edit();int show();char *ptr[20];int ptr_size[20];int heap_idx = 0;int main(){ int i..
공격조건2.27에서는 가능,glibc 2.27의 tcache는 Double Free에 대한 검증이 없는 것으로 알려져 있으나, 로컬에서 사용 중인 Glibc 2.27의 버전은 Ubuntu GLIBC 2.27-3ubuntu1.4로 이후 버전에서 도입된 검증 로직이 적용되었다.사실상 2.26까지 가능하다.임의의 할당과 해제가 가능해야한다.Tcache dup란?tcache는 double free와 같은 버그의 검증이 존재하지 않아 다른 공격기법에 비해 난이도가 낮다. tcache dup는 double free bug를 이용하여 tcache_entry를 조작해 이미 할당된 메모리에 다시 힙 청크를 할당하는 공격기법이다. 2.26 으로 도커짜기도 귀찮으니 그냥 패스 하자. 공격 방식은 fastbin dup와 거의..
공격조건2.23에서는 가능, malloc을 임의로 할 수 있어야함. top chunk의 size를 조작할 수 있다. 임의의 주소를 알고있어야 한다.House of Force란?top chunk의 size를 조작함으로써 임의의 주소에 힙 청크를 할당 할 수 있는 공격 기법이다. 아래는 top chunk를 처리하는 _int_malloc 코드이다.static void *_int_malloc (mstate av, size_t bytes){ INTERNAL_SIZE_T nb; /* normalized request size */ ... mchunkptr remainder; /* remainder from a split */ unsigned long remai..
공격조건2.23에서는 가능, malloc과 free를 임의로 할 수 있어야함. heap영역의 주소를 알 수 있어야 함, free된 chunk에 접근 가능해야함, fake chunk의 주소 알아야 함.House of Lore란?smallbin 크기의 힙이 존재 할 때 bck→fd를 조작하여 임의의 주소에 청크를 할당할 수 있는 공격 기법이다.하지만 이에는 몇 가지 검증 코드가 있기 때문에 이를 우회해야 한다.if (in_smallbin_range (nb)){ idx = smallbin_index (nb); bin = bin_at (av, idx); if ((victim = last (bin)) != bin) { if (victim == 0) /* initialization check */ mal..
공격조건2.23에서는 가능, fake chunk의 주소(stack 주소) 알아야 함. 임의의 주소 free 가House of Spirit이란?stack에 fake fastbin chunk를 만들고 이를 free하면 이 fake chunk가 fast bin에 들어가게 된다. 그리고 다시 재할당을 하면 fake chunk가 할당된다. 단, fake chunk의 header 크기를 정상적인 크기로 해줘야 한다. 간단하니까 실습은 패스