전체 글

전체 글

    ptmalloc free & bin

    메모리를 할당할때 어떤 일이 일어나는지 정리했으니까 이번에는 free를 호출할때 어떤 일이 일어나는지 보자 1. What is BIN? 우선 bin이 무엇인지 알아보자 우리는 c언어에서 malloc과 free를 이용하여서 동적으로 메모리를 관리한다. 만약 malloc을 이용하여서 메모리를 할당하고 free를 이용하여 free chunk를 만들어준다면 이 free chunk는 bin이라는 구조에 들어가게 된다. bin은 크게 4가지 종류로 나뉜다. 1. fast bin 2. unsorted bin 3. small bin 4. large bin bin들에 대한 정보는 malloc_state 구조체에서 확인 할 수 있다. struct malloc_state { /* Serialize access. */ mut..

    [Pwnable] j0n9hyun's secret

    이번에는 j0n9hyun's secret이다. 바로 mitigation check! Partial Relro, no canary, NX, none pie 보호기법이 많이 걸려있지는 않아서 익스가 힘들거 같지는 않다. 바로 코드부터 살펴보자 main이 잡히지 않고 이상한 함수들도 엄청 많은걸 보니 stripped + statically linked binary인거 같다. 그럼 start 함수의 첫번째 인자(sub_4009C9)가 main 함수이므로 바로 살펴보자 stripped binary라 잘 봐서는 모르겠다. 코드만 보고 대충 유추를 해보면 "input name:"이라는 내용을 출력하고 %s format string이 있으니까 문자열을 입력받는거 같다. 그리고 나머지는 알아볼 수 없으니 한번 바이너리를..

    [Pwnable] Unexploitable #2

    이번에는 Unexploitable #2이다. 이 문제는 약간의 trick 문제라 그 trick을 잘 알고 있으면 쉽게 풀 수 있다. 우선 Mitigation check부터 하자 Partial Relro, no canary, NX enable, none pie 코드를 살펴보자 main에서는 그냥 평범하게 fgets 부분에서 BOF 터져서 ROP가 가능해보인다. 근데 이제 문제점이 있다. 사용 가능한 함수중에 출력을 해주는 함수가 존재하질 않는다. 출력을 해주는 함수가 없는 got를 구할 수 없어 libc base를 구할 수 없다. 그래서 gift 함수를 보면 system 함수를 이용한다. 우리는 system 함수로 libc leak 후에 libc base를 구할거다. system 함수는 출력해주는 기능을 ..

    [Pwnable] World Best Encryption Tool

    이번에는 World Best Encryption Tool이다. 이것도 취약점이 대놓고 보여서 쉬우니까 후딱 풀자 Canary, NX, Partial Relro, none pie이다. main이다. src에 입력받는 부분에 %s로 length check가 없어서 BOF가 터진다. 그리고 입력한 문자열을 0x31만큼 0x1C랑 xor연산해준다. dest로 src 문자열을 복사하고, s1에 또 입력받는데 다시 BOF가 터진다. 그럼 우선 익스 시나리오를 구상해보자 1. src 입력 받는 부분으로 canary leak -> strncpy 이용해서 canary 1byte 덮으면 가능 2. s1에 Yes 입력해서 다시 src에 입력받음 3. libc leak, return to main 4. return to sy..

    [Pwnable] Register

    이번에는 register 문제이다. 이건 풀면서 되게 재밌었던 기억이 난다. canary, NX, partial Relro main은 심플하다. 바로 build로 넘어가보자 build에서는 SIGALRM이 발생하면 handler라는 놈으로 처리한다. handler 내부를 뒤적거리다가 exec_syscall_obj가 보이는데 result에는 obj의 주소값이 넘어간다. 그리고 syscall을 해준다. 그리고 get_obj 함수이다. get_obj에는 문제 제목처럼 register 값을 입력하는거 같다. 그리고 validate_syscall_obj 함수인데 v0[0] = rax를 체크하는 루틴같다 그러면 대충 전체적인 로직을 파악했을때 어떻게 익스를 할 수 있을까 간단하다 exec_syscall_obj에서 ..

    [Pwnable] RTC

    진짜 오랜만에 롸업이다 사실 문제는 푼 지는 되게 오래됬지만 최근들어 대학은 가야되는데 해킹 공부를 하고 있는게 맞는건가 싶기도 하고 그냥 요즘 들어 마음이 복잡하기도 해서 여태까지 문제는 많이 풀었는데 롸업은 올리지 않았다 뭐 사실 최근에 힙 다 까먹어서 다시 정리하고 있기는 한데ㅋㅋ; 그냥 오늘은 새벽에 생각 정리도 할려고 롸업을 써보려고 한다 아마도 롸업 여러개가 올라갈거 같긴 한데 어짜피 어려운 문제는 아니니까 후딱 써보도록 하자 잡담이 길어졌는데 진짜 시작~ - Mitigation - 0x200만큼 받아서 bof 발생 -> rop 가능 사용 가능한 함수에 puts가 없어서 rdi 가젯만으로는 libc leak 불가능 그러면 read, write로 libc leak을 해야되는데 gadget도 없음..