nc로 접속하면 그 때 그때 다른 바이너리를 준다. 따라서 직접 실시간으로 바이너리를 받아와 분석해야 한다. 기본 구조를 살펴보면 canary값을xxd로 바이너리를 열었을 때 기준으로 0x3020 오프셋 부터 총 10개의 카나리 값이 저장되어 있고, 이 중 하나를 카나
glibc 2.34이후 훅변수가 사라지면서 aaw 취약점이 있어도 덮을 곳이 사라지는 문제가 생겼다. 이런 상황에서 보통 libc got를 덮는 방법도 많이 쓰지만 또 다른 방법을 소개하고자 한다. 바로 exit_handler함수를 이용하는 방법이다. 인자를 직접 지정
\>glibc 2.25<익스 시나리오>14개의 청크 할당 (fastbin 범위 내여야 함)그 중 7개를 free하여 tache를 다 채우기 청크를 하나 더 해제 (=victim청크, fastbin으로 이동)1~6개의 청크를 더 해제 (모두 fastbin으로 이동)
\>glibc 2.25에서 가능<익스 시나리오>=========사전 준비=========0x100 크기의 청크 7개 할당 (추후에 tcache를 채우기 위함)0x100크기의 병합을 위한 청크 1개 할당 (=prev chunk)Double free할 0x100크기의
stdout 구조체에 값을 쓸 수 있고, fflush(stdout)를 호출할 수 있을 경우 사용 가능한 libc leak 방법을 소개하려고 한다.libc leak이 필요한데 바이너리 내에 출력 함수가 아예 존재하지 않을 경우 사용할 수 있는 방법이다.다음은 \_IO_f
힙 관련 문제이다. 64bit Full relro, CANARY, NX, PIE 최종 익스 코드는 아래와 같다. 쉘이 따졌다. 이 문제.. 로되리안 때문에 거의 며칠동안 삽질했는데 알고보니 오프셋 문제였다. 뭔가 이상해서 libc를 다시 다운받아 확인했더니 이전에
이전에 개인적으로 libc_malloc을 살펴본 적이 있는데, libc_malloc 내부에서 \_int_malloc의 호출이 이루어졌었다. 그때 분석한 바로는 tache bin에 있는 청크의 재할당은 libc_malloc에서 이루어졌었고 그 외의 상황에서는 \_int_
size_t형의 bytes(동적할당 크기)를 인자로 받아 void형 포인터 victim(할당된 힙 영역의 주소)를 반환한다.부분을 나눠 자세하게 살펴보자.우선 mstate형 ar_ptr변수와 void형 포인터 victim이 선언된다.mstate는 malloc_state
\_int_free의 내부를 살펴보자. 우선 함수의 형태와 맨 처음 선언된 변수들을 살펴보자.mstate형 av와 mchunkptr형 p를 입력받는다. \_int_free를 호출하는 \_\_libc_free함수를 살펴보면, p는 할당 해제할 청크를 가리키는 포인터이며
Potluck Ctf의 문제 중 난이도가 어려운 건 아니지만 풀이 방식이 인상적이었던 문제가 있어 WU을 적어보려 한다.ctf 중 익스에는 실패했지만, 종료 후 디코에서 힌트를 얻어 풀었다. 바이너리와 libc파일이 주어졌다. 우선 IDA로 코드를 살펴보자. 메인 함수