BOB 11기 합격 후기

지난 22년 6월 22일 17시에 BOB 11기 최종 합격자가 발표났습니다. 지난 7기 도전에 실패하고 이후 군 전역 후 11기에 지원하게 됐는데 합격한 후기를 남겨볼까 합니다. 일단 10기와 달라진 점은 기존 4가지 취약점분석, 디지털포렌식, 보안컨설팅, 보안개발 트랙을 각각 선발했는데, 이번 11기는 통합 선발 후 내부 교육평가를 통해서 트랙을 선발한다고 합니다. 우선 BOB 공식 페이지의 11기 모집요강입니다. https://www.kitribob.kr/board/detail/1/6943?current_page=1&per_page=15 서류평가 BOB는 1단계 서류평가 이후 2배수 합격자 대상으로 인적성 검사, 필기평가, 면접평가를 진행하게 됩니다. 1단계 서류평가에서는 다음과 같은 항목을 평가합니다. ...

6월 26, 2022 · 3 분 · Yunjoker

Dreamhack 시스템 해킹 basic_rop_x64

이번에 풀어볼 문제는 기존의 32비트 환경 pwn이 아니라 64비트 환경 pwn이다. 기본적으로 32비트와 64비트는 함수 호출 규약에 다른점이 있다. 기존 32비트 환경에서는 함수 실행에 필요한 인자들을 스택에 저장해 하나씩 불러와 사용한다면 64비트 환경은 레지스터에 먼저 저장한 후 레지스터보다 많은 인자가 필요하면 스택을 이용한다. 이러한 차이점으로 32비트 환경에서는 버퍼 오버플로우 등으로 덮어 씌우기만 하면 성공했던 시스템 해킹이 64비트로 오면서 gadget(가젯)을 이용해 함수 실행에 필요한 인자를 넣어줘야 한다 이번 문제는 ROP(Return-oriented programming)에 관한 문제이며 이 ROP 기법은 공격자가 실행 공간 보호(NXbit) 및 코드 서명(Code signing)과 같은 보안 방어가있는 상태에서 코드를 실행할 수있게 해주는 기술이다. ...

5월 21, 2022 · 4 분 · Yunjoker

Dreamhack sint 문제풀이

오랜만에 풀어보는 pwn문제이다. 드림핵에 베이직으로 있는 sint의 취약점을 이용한 문제로 문제이름 또한 sint이다. 문제 압축파일을 다운 받으면 .c로 된 코드 파일과 컴파일한 elf 파일을 제공한다. 우선 .c 파일을 열어보면 내용은 다음과 같다. #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> 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() { char buf[256]; int size; initialize(); signal(SIGSEGV, get_shell); printf("Size: "); scanf("%d", &size); if (size > 256 || size < 0) { printf("Buffer Overflow!\n"); exit(0); } printf("Data: "); read(0, buf, size - 1); return 0; } 위 코드를 살펴보면 Size를 입력 받고 if 구분을 통해 조건 비교 후 Data를 read 함수로 입력받는 구조이다. if문을 보면 256보다 크거나, 0보다 작으면 printf("Buffer Overflow!\n");를 실행하고 코드를 종료한다. 따라서 Size에 입력되는 값은 0~256까지의 범위를 가질 수 있다. ...

5월 3, 2022 · 4 분 · Yunjoker

discord.py로 금지어 삭제봇 개발하기

요즘 게임과 각종 온라인 커뮤니케이션 수단으로 디스코드를 많이 사용하는 것 같다. 어떤 대회나 컨퍼런스 등등 문의사항이나 커뮤니케이션을 위한 디스코드 채널을 개설하는걸 많이 봤기 때문이다. 필자 또한 친구들과 게임을 하거나 단톡방 느낌으로 디스코드 채널을 이용하고 있는데 채널 안에 여러 사람이 있을 시 발생하는 여러가지 문제점이 있다. 이는 카카오톡을 이용할 떄에도 비슷하게 발생하는데, 각종 욕설이나 금지어 등등 이런 룰을 정해 숙지하는 편이다. 필자가 속한 채널은 금지어를 작성하면 필자와 다른 관리자 인원이 해당 채팅을 지우는 방식을 사용하고 있는데 이는 관리자 들에게 많은 피로감을 가져왔고, 관리자가 자리를 비웠 때 발생하는 비매너 채팅에 대해서 반응할 수 없다는 단점이 있었다. 따라서 여기서 디스코드 봇을 만들기로 생각했다. ...

5월 1, 2022 · 9 분 · Yunjoker

Dreamhack rev-basic-7 문제풀이

이번 문제는 드림핵 rev-basic-7 리버싱 문제를 풀어보자. 우선 basic-6과 동일하게 문자열을 입력 받고 정답이면 Correct, 아니면 Wrong을 출력한다. 바이너리 실행결과는 다음과 같다. 우선 가장 먼저 해야할 일은 main함수를 찾는것이다. 윈도우 바이너리인 PE파일의 헤더 구조를 보면 매우 많은 정보들이 들어있다. 그것들 중 리버싱을 할떄 중점으로 봐야할 부분은 .text영역이다. 실질적으로 코드가 컴파일되어 저장되는 영역으로 대부분의 main함수는 이 영역 시작 지점과 인접하게 존재한다. 컴파일러의 보안 미티게이션의 추가로 메모리 주소 랜덤화가 자동으로 걸려 0x401000주소에 main이 들어가는 경우는 이젠 없을 것이다. ...

5월 1, 2022 · 6 분 · Yunjoker