분류 전체보기 (66) 썸네일형 리스트형 1. 개요 & 환경 구축 본 내용은 본인 공부에 대한 정리용으로, 자세한 내용이 포함되지 않음을 참고 바랍니다. Ⅰ. 개요 64비트 멀티코어 OS 인 MINT64 OS를 개발할 예정이다. 큰 순서는 부트로더 -> 32bit OS -> 64bit OS 로 진행된다. 64bit OS 개발 완료 후, 멀티코어 관련 기능을 추가해서 최대 16개의 코어를 지원하게 확장하고 GUI시스템까지 구현할 예정이다. Ⅱ. OS 개발 시, 필요한 지식 1. 하드웨어 지식 32bit에서 64bit로 바꾸는 작성이나 PC주변장치를 다루는 작업은 하드웨어에 대한 지식이 없으면 불가능하다. 다행히, 대부분의 내용은 하드웨어와 함께 제공되는 스펙문서에 존재한다. 스펙문서만 잘 구하면, 하드웨어를 모른다 하여도, 큰 문제가 발생하지 않는다. 2. 어셈블리어 사.. 2022 POXX 예선 & 본선 writeup (pwnable, rev) Ⅰ. 총평 Power Of XX 대회로, 여성들만 참여할 수 있는 해킹대회이다. 이번 대회에는 해킹캠프에서 만났던 숭실대 친구 2명과 함께 참가하게 되었다. 2명 친구들은 web을 위주로 문제를 풀었고 나는 pwnable문제를 풀었다. 내가 팀장으로 "프롬하츠"라는 팀명으로 출전하였다. 본선에서 몇시간동안 공동 2위를 하다가, 대회 마치기 10분전 4등으로 떨어진 마음 아픈 대회이다.. POXX대회는 쉬운 대회라서, 처음으로 좀 높은 등수를 받을 수 있었던 것 같다 그래도 그동안의 공부를 헛되게 하지 않았구나를 생각하게 해준 대회였다. 10분전 등수가 밀려서 아쉬움은 있지만, 그것 또한 나의 실력임을 인정한다. 이번 대회를 통해, 앞으로 더 열심히 공부에 전념해야겠다는 의욕을 일깨웠다. 내년 대회에서는 .. [Wargame] uaf_overwrite 1. 실습 코드 C 코드, 바이너리 파일, libc-2.27.so가 주어진다. // Name: uaf_overwrite.c // Compile: gcc -o uaf_overwrite uaf_overwrite.c #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); } .. [Practice] Use After Free 1. Use After Free (UAF) 해제된 메모리에 접근할 수 있는 취약점으로, 메모리에 남아있던 데이터를 유출하거나 사용할 수 있다. 참고 : 2022.08.20 - [Dreamhack/Lecture & Practice] - [Lecture] Use After Free 2. 실습 코드 // Name: uaf_overwrite.c // Compile: gcc -o uaf_overwrite uaf_overwrite.c #include #include #include #include struct Human { char name[16]; int weight; long age; }; struct Robot { char name[16]; int weight; void (*fptr)(); }; struct .. Malloc(3) - Arena (glibc의 ptmalloc2) 1. Arena란? ptmalloc2는 각 스레드가 서로 간섭하지 않고, 서로 다른 메모리 영역에 액세스 할 수 있게 하는데 이러한 메모리 영역을 "Arena"라고 한다. Arena는 멀티 쓰레드 환경을 지원하기 위해 도입된 개념이다. 각 Arena는 하나 이상의 힙 메모리를 얻는다. main arena는 프로그램의 초기 힙을 사용한다. (.bss 등 직후 시작) 단일 스레드 프로세스 경우에는 하나의 Arena를 가지지만, 멀티 스레드 프로세스 경우 하나 이상의 Arena를 가진다. 서로 다른 Arena안에 존재하는 각각의 스레드는 정지하지 않고, 힙 작업을 수행할 수 있다. 모든 스레드마다 각각의 Arena를 자원고갈 문제로 갖고 있는 것은 아니며, 32bit 또는 64bit system과 system.. Malloc(2) - Bin (glibc의 ptmalloc2) 1. Bin Free chunk는 크기와 히스토리에 따라 다양한 목록에 저장되는데, 이를 "bins"라고 한다. 할당자는 할당 요청을 충족시키기 위해, 적합한 청크를 bins에서 신속하게 찾아 재할당한다. 종류 : Fast bin, Small bin, Large bin, Unsorted bin 2. Fast bin "fastbin"에 포함되는 chunk크기의 범위는 0 ~ 80*sizeof(size_t)/4까지이다. M_MXFAST(1)라는 매개변수를 사용해서 "fastbin"에 포함되는 chunk 범위를 설정한다. "fastbin"의 기본 범위는 0 ~ 64*sizeof(size_t)/4이다. 32bit : 64byte (64 * 4/4) 64bit : 128byte (64 * 8/4) 해당 크기보다 .. Malloc(1) - chunk (glibc의 ptmalloc2) 1. Memory Allocator 메모리 관리를 위해 사용되는 Allocator에는 dlmalloc, ptmalloc2, jemalloc, tcmallc, libumem 등 다양한 종류의 메모리 할당자가 존재한다. 본 글에서는 "GNU C Library"의 메모리 할당자인 ptmalloc2에 대한 내용이다. 1-1. ptmalloc2 dlmalloc코드를 기반이고 멀티 스레드에서 사용되도록 확장되었다. 한 번에 두 개 이상의 메모리 영역을 활성화하여, 멀티 스레드 애플리케이션을 효율적으로 처리할 수 있다. 복수 스레드가 동시에 malloc을 호출하면, 각 스레드는 별도의 힙 세그먼트가 생성되고 해당 힙을 유지 보수하는 데이터 구조도 분리되어 메모리에 할당된다. 즉, ptmalloc2를 사용하면 서로 다.. 2022 Hacking Camp writeup_pwnable 1. Trust me (1) 난이도 : Easy (2) 문제 (3) 풀이 age를 우회한 후, name에 BOF를 발생시켜 read_flag함수를 호출하는 문제이다. age우회 age는 -128면 안되고, -127보다는 작아야 하는 조건문이 존재한다. 이는 디버깅을 하여, 코드를 분석해서 쉽게 우회할 수 있었다. 아래 캡쳐보는 gdb로 디버깅한 사진이다. ①을 보면 0xffffff80이면 안되고, ②을 보면 입력값은 al크기의 값이 0x80인지 확인하고 있다. 따라서, 0xffffff80이 아지만, al이 0x80인 '-3712'값을 age에 넣어주면 우회가 가능하다. name의 BOF취약점 디버깅하여, 확인해보면 ebp-8위치가 func임을 알 수 있다. 위 사진의 ③을 보면 0x25만큼 입력을 받아오.. 이전 1 2 3 4 5 6 7 ··· 9 다음