본문 바로가기

분류 전체보기

(66)
25회 해킹 캠프 참가 후기 3년만에 오프라인으로 열린 해킹캠프에 참여하고 왔습니다! 코로나로 인해, 오프라인 모임을 처음으로 참여하는 것이라 엄청난 설렘 가득 안고 참가하고 왔습니다! 날짜 : 2022.08.27(토) ~ 08.28(일) 장소 : 국제청소년센터 유스호스텔 (강서구) 해킹캠프의 장점을 뽑자면, 첫째, 많은 보안인들을 만나고 소통할 수 있어서 좋았습니다. 코로나로 인해 온라인으로만 사람들을 만났던 이전과는 달리, 오프라인으로 만나니 더욱 즐겁게 다녀왔습니다! 또한, 많은 보안인분들과 소통하며 불붙는 열정과 좋은 시너지를 얻을 수 있었습니다. 둘째, 진행 프로그램이 알차고 재미있었습니다. 잘하시는 분들의 발표를 들으며, 많은 것을 배우고 느꼈던 경험이 되었습니다. 오랜만에 수련회에 참가하는 기분이라서, 더 재미있었던 것..
2022 SSTF writeup 1. BOF101 (1) 문제 설명 바이너리 파일과 C 코드가 주어진다. bof101.c #include #include #include int printflag(){ char buf[32]; FILE* fp = fopen("/flag", "r"); fread(buf, 1, 32, fp); fclose(fp); printf("%s", buf); return 0; } int main() { int check=0xdeadbeef; char name[140]; printf("printflag()'s addr: %p\n", &printflag); printf("What is your name?\n: "); scanf("%s", name); if (check != 0xdeadbeef){ printf("[Warni..
[ROP_32bit] ropasaurusrex 본 문제는 2013년도 pCTF의 문제이다. 해당 문제는 간단한 풀이만 작성되어 있으며, 해당 기법에 대해 공부하고 싶다면 아래 링크를 참고하기 바란다. 2022.07.10 - [Dreamhack/Wargame] - [Wargame] basic_rop_x86 1. 바이너리 파일 2. 풀이 (1) 보호 기법을 확인한다. 32bit 프로그램으로, NX와 ASLR이 적용되어 있음을 알 수 있다. (2) 바이너리를 실행해보면 입력받은 후, WIN이라는 문자열을 출력하고 종료된다. 아래 사진은 임의로 dasfsd를 입력한 결과이다. (3) IDA를 이용하여, 디컴파일한다. sub_80483F4 함수에서 buf에 입력값을 받아온다. buf의 크기가 136byte인데, 256byte만큼 입력받아오기 때문에 BOF취약..
[Lecture] Use After Free 1. Use-After-Free 메모리 참조에 사용한 포인터를 메모리 해제 후, 제대로 초기화하지 않아 발생하는 취약점이다. 해제한 메모리를 초기화하지 않고 다음 청크에 재할당해주기 때문이다. 즉, 해제된 메모리에 접근할 수 있을 때, 발생하는 취약점이다. Chunk(청크) 란? • malloc에 메모리 할당을 요청하면, 넓은 메모리의 영역을 다양한 크기의 덩어리(chunk)로 나눈다. • chunk는 사용중인 덩어리, 해제된 덩어리, Top 덩어리, Last Remainder 덩어리가 있다. • 위에서 말하고 있는 청크는 "해제된 덩어리"로 응용프로그램에서 시스템에 반환한 덩어리를 의미하는 것이다. 2. Dangling Pointer 2-1. 정의 컴퓨터 과학에서 'Dangling Pointer'는 유..
[Practice] 64bit_FSB (Format String Bug) 1. Format String Bug (FSB) 포맷스트링을 사용하는 함수에서 발생할 수 있는 취약점이다. 리눅스 라이브러리 함수에서는 printf, fprintf, sprintf와 같은 함수들에서 발생한다. 참고 : 2022.08.10 - [Dreamhack/Lecture & Practice] - [Lecture] Format String Bug (FSB) 2. 실습 코드 changeme의 값을 1337로 바꾸는 것이 실습의 목표이다. // Name: fsb_overwrite.c // Compile: gcc -o fsb_overwrite fsb_overwrite.c #include #include #include void get_string(char *buf, size_t size) { ssize_t ..
[Wargame] basic_exploitation_003 1. 실습 코드 #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, heap_..
[Wargame] basic_exploitation_002 1. 실습 코드 #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); } 2. 코드 분석 initialize..
[Lecture] Format String Bug (FSB) 1. 포맷 스트링 버그 (Format String Bug, FSB) 포맷 스트링을 인자로 사용하는 함수는 대표적으로 scanf, fprintf, fscanf, sprintf, sscanf가 있다. 포맷 스트링을 채울 값들은 레지스터나, 스택에서 가져온다. 하지만, 포맷 스트링을 사용하는 함수의 내부에는 필요로 하는 인자 개수와 함수에 전달된 인자의 개수를 비교하는 루틴이 존재하지 않는다. 포맷 스트링을 사용자가 입력할 수 있을 때, 공격자는 레지스터와 스택을 읽을 수 있고, 임의 주소 읽기 및 쓰기를 할 수 있다. 포맷 스트링 함수를 잘못 사용하여, 발생하는 버그를 "포맷 스트링 버그"라고 한다. 2. 레지스터 및 스택 읽기 2-1. 실습 코드 사용자가 임의의 포맷 스트링을 입력할 수 있는 코드이다. s..