처음에 ida로 열게되면 함수 이름들이 sub~어쩌구로 되어있는데 메뉴를 이용해서 복구를 시키게 되면 main은 일케 된다. 먼저 setup함수를 보면 대부분의 문제들은 setvbuf를 통해 stdin과 stdout을 버퍼링을 하지 않도록 하게 두는데 왜냐하면 버퍼링을 사용하게 되면 heap영역에 할당을 받아서 버퍼링을 하기 때문에 방해요소가 될 수 있기 때문이다. 여기서 stdout만 버퍼링을 하는 것으로 보아 stdin을 이용해야 될 것이라고 추측할 수 있다. 다음은 input()함수로 입력을 받아서 숫자로 변환시켜준다. free부분인데 여기서 ptr에 있는것을 free하는데 ptr을 초기화하지 않는다. 그래서 취약점이 발생하게 된다. 여기가 중요한데 보통의 문제에서 give_up처럼 포기하는 메뉴가..
문제를 ida로 디스어셈을 봤을 때 구조는 단순하다. malloc을 해주고 free를 해주게 된다. 이 문제를 익스 플로잇하는 방법은 간단하다. 1. fastbin 크기로 malloc (순서 조심) - libc leak 2. stdin _IO_buf_base 수정 3. 다시 stdin _IO_buf_base 수정 4. one_gadget 또는 system 주소 입력 첫번째로 fastbin 크기로 작은것 1개 그것보다 큰 크기로 1개를 할당한뒤 다시 한번 할당을 하면 libc leak이 이루어지게 되는데 그 이유는 malloc_consolidate라는 함수 때문이다. 코드로 나타내면 이렇게 되는데 ### libc leak malloc(24,'a' *24) malloc(50, 'a') malloc(200, ..