본문 바로가기

분류 전체보기

(157)
[SWING] Pwnable 05 - Double Free Bug free 함수로 청크 해제 -> ptmalloc2이 tcache나 bins에 추가하여 관리 malloc으로 비슷한 크기 동적 할당 발생 -> 청크 재할당 free list: tcache, bins free: 청크 추가 함수 malloc: 청크 꺼내는 함수 free 두 번이 가능하다면, 청크를 free list에 여러번 중복해서 추가할 수 있다! => duplicated Double Free Bug 같은 청크를 두 번 해제할 수 있는 버그 ptmalloc2에서 발생 임의 주소 읽기/쓰기/실행, 서비스 거부 등에 활용 가능 대표적인 원인은 Dangling Pointer Double Free Bug 이용하면 duplicated free list 만들기 가능 ptmalloc2: fd -> 자신 이후에 해제된 청..
[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 hu..
[Dreamhack] basic_exploitation_002 환경 정보를 보면 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); } m..
[SWING] Pwnable 04 - Use After Free 원룸을 임대해 거주하다가 계약이 만료되었다고 하자. 그럼 세입자는 임대인에게 원룸 접근 권한 즉, 열쇠나 비밀번호 설정 권한 등을 반납해야할 것이다. 세입자가 나가고 임대인은 원룸을 청소한 뒤 새로운 세입자를 구한다. 이 때 이전 세입자에게서 접근 권한을 회수하고, 방을 깨끗이 청소해 이전 세입자의 정보를 지우는 것은 매우 중요하다. ptmalloc2를 이용한 메모리 관리도 위의 예시와 같다. 메모리 참조에 사용한 포인터를 메모리 해제 후에 적절히 초기화하지 않거나, 해제한 메모리를 초기화하지 않고 다음 청크에 재할당할 때 발생하는 취약점 실습 환경 Dockerfile FROM ubuntu:18.04 ENV PATH="${PATH}:/usr/local/lib/python3.6/dist-packages/b..
[SWING] Pwnable 04 - ptmalloc2
[SWING] Pwnable 04 - Format String Bug Format String 포맷 스트링을 인자로 사용하는 C언어 함수: printf, scanf, fprintf, fscanf, sprintf, sscanf 등 함수 이름이 f (formatted)로 끝나고 문자열을 다루는 함수 %[parameter][flags][width][.precision][length]type 형식 지정자(specifier) : 인자를 어떻게 사용할지 지정 형식 지정자 설명 d 부호있는 10진수 정수 s 문자열 x 부호없는 16진수 정수 n 인자에 현재까지 사용된 문자열의 길이를 저장 p void형 포인터 Format String Bug 포맷 스트링 함수를 잘못 사용하여 발생하는 버그, FSB 포맷 스트링을 사용자가 입력할 수 있을 때, 공격자는 레지스터/스택을 읽고, 임의 주소 ..
Dreamhack CTF
[SWING] Pwnable 03 - PLT&GOT 라이브러리 링크 #include int main() { puts("Hello, world!"); return 0; } PLT&GOT Procedure Linkage Table & Global Offset Table 라이브러리에서 동적 링크된 심볼의 주소를 찾을 때 사용하는 테이블 runtime resolve 바이너리 실행 -> ASLR이 라이브러리 임의 주소에 매핑 -> 라이브러리 함수 호출 시 함수 이름으로 라이브러리에서 심볼 탐색 -> 함수 정의 발견된 주소로 실행 흐름 옮김 반복적으로 호출되는 함수의 정의 매번 탐색하는 것은 비효율적 -> ELF는 GOT 테이블에 resolve된 함수의 주소를 저장 -> 나중에 함수 호출되면 저장된 주소 꺼내서 사용 #include int main() { puts(..