본문 바로가기

System Hacking

(26)
[Dreamhack] Tcache Poisoning 풀이 - 티스토리 문제 코드 #include #include #include int main() { void *chunk = NULL; unsigned int size; int idx; setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); while (1) { printf("1. Allocate\n"); printf("2. Free\n"); printf("3. Print\n"); printf("4. Edit\n"); scanf("%d", &idx); switch (idx) { case 1: printf("Size: "); scanf("%d", &size); chunk = malloc(size); printf("Content: "); read(0, chunk, size - 1); bre..
[Dreamhack] uaf_overwrite 풀이 - 티스토리 문제 코드 #include #include #include #include struct Human { char name[16]; int weight; long age; }; struct Robot { char name[16]; int weight; void (*fptr)(); }; struct Human *human; struct Robot *robot; char *custom[10]; int c_idx; void print_name() { printf("Name: %s\n", robot->name); } void menu() { printf("1. Human\n"); printf("2. Robot\n"); printf("3. Custom\n"); printf("> "); } void human_func..
[Dreamhack] basic_exploitation_003 풀이 - 티스토리 이전 문제와 비슷하다 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char *heap_buf = (char *)malloc(0x80); char stack_buf[0x90] = {}; initialize(); read(0, he..
[Dreamhack] basic_exploitation_002 풀이 - 티스토리 32비트 환경에 NX만 걸려있는 상황이다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0); } 개인적으..
[Dreamhack] out_of_bound 풀이 - 티스토리 코드를 보면 idx로 command 배열의 인덱스에 접근하는데 인덱스 범위를 검사하는 코드가 없기 때문에 Out Of Bound가 발생한다 따라서 name에 적절한 문자열을 삽입하고 oob를 이용해서 읽어 flag를 따면 된다 두 변수의 위치 차이는 76바이트 이다 따라서 인덱스로 접근하면 command[19]을 읽을 시 name을 읽을 수 있다 처음에 접근은 name에 /bin/sh 문자열을 입력한 뒤 idx에 19를 입력해 command[19] 접근해서 /bin/sh을 읽으려 했다 그러나 쉘이 안 따여서 삽질 끝에 질문 창 찾아봤는데 system함수는 인자로 const char* 을 받는 함수이기 때문에 문자열의 주소 값이 위치해야 된다 근데 /bin/sh을 입력할 경우 메모리에 저장되는 /bin/s..
[드림핵] hook (hook overwrite) 풀이 - 티스토리 코드를 처음 보고 당황했는데 역시 계속 보니까 이해가 된다 이해하고 보니까 그다지 어려운 문제는 아니고 그냥 hook overwrite하는 문제같다 코드 분석 먼저 gdb 스택 내부를 본다 main stack frame 사실 이번 문제는 ret를 덮는게 목적이 아니므로 stack 내부는 딱히 중요하지는 않아 보인다 코드 내에서 system("/bin/sh")이 주어져 있으므로 이걸 활용하는 쪽으로 생각했다 .1. __free_hook 주소 릭 2. __free_hook주소가 가리키는 값을 코드 내 system("/bin/sh")로 덮으면 free함수 실행시 쉘이 따인다 __free_hook주소는 코드 내 stdout 주소를 출력하고 있는 부분을 통해 릭 가능하다 다음은 이 부분을 해석하는게 관건이다 내 ..
[드림핵] oneshot (원가젯) 풀이 - 티스토리 원샷~ 딱 봐도 원 가젯 이용해서 푸는 문제 같다 소스코드를 보면 stdout 주소를 출력하고 있으므로 이를 읽어서 libc주소 구한 후 원가젯 주소까지 릭 가능할 것 같다 원 가젯 찾기 0x45226부터 넣어 볼 예정 중간에 더미 발견 중간에 0을 넣어주는 이유는 check값이 덮여서 강제종료 되는 것을 막기 위함 이거 두개때메 둘중 뭐 써야되는지 몰라서 삽질좀 함.. 근데 결론은 아직 모름 ** %p로 출력되는 주소랑 메모리 내에서 바로 출력되는 주소랑 구분해서 잘 받기
[드림핵] fho 풀이 - 티스토리 PIE가 적용된 바이너리를 대상으로 실습하도록 설계된 문제이다 그동안 배운 보호기법들이 전부 적용된 모습을 볼 수 있다 코드를 살펴보면 buf에서 BOF가 발생하고 이를 통해 원하는 값을 얻을 수 있다 또한 addr과 value의 관계를 보면 addr에 들어간 주소가 가리키는 값에 value에 입력 받은 값을 넣어주고 있다 문제 자체가 hook-overwrite하는 문제이므로 adrr에 __free_hook의 주소 값을 넣고 value에 system주소 값을 넣는 것으로 추측 가능하다 마지막에 addr에 한 번 더 입력 받고 있다 이미 __free_hook변수가 가리키는 값은 바꼈으므로 addr에 인자를 전달해주면 된다 여기서 addr에 /bin/sh의 주소값을 넣어주면 free인자로 addr이 오고 있..