해킹 공부/시스템 해킹 25

DreamHack Stage 13_type Error

변수 자료형 선언시 담을 값의 크기, 용도, 부호 여부 고려 필요 Type error 부적절한 자료형을 사용했을 때 발생 - Out of Range: 데이터 유실 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // Name: out_of_range.c // Compile: gcc -o out_of_range out_of_range.c #include unsigned long long factorial(unsigned int n) { unsigned long long res = 1; for (int i = 1; i = 50) { fprintf(stderr, "Input is too large"); return -1; } res = factoria..

DreamHack stage 9_Memory Corruption: Out of Bounds

배열은 같은 자료형의 요소(Element)들로 이루어짐 각 요소의 위치 = 인덱스(Index) 배열의 임의 인덱스에 접근할 수 있는 Out of Bounds (OOB) 가 취약점 OOB 요소를 참조할 때, 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생 인덱스 범위 검사 명시적으로 프로그래밍하지 않으면, 프로세스는 계산한 주소가 배열의 범위 안에 있는지 검사하지 않음 만약 사용자가 배열 참조에 사용되는 인덱스를 임의 값으로 설정할 수 있다면, 배열의 주소로부터 특정 오프셋에 있는 메모리의 값을 참조할 수 있음 임의 주소 읽기 OOB로 임의 주소의 값을 읽으려면, 읽으려는 변수와 배열의 오프셋 알아야 함 배열, 변수가 같은 세그먼트에 할당됨 -> 둘 사이의 오프셋은 항상 일정(디버깅 통해 파악) 같은..

DreamHack_System hacking stage 4

- 익스플로잇(Exploit) : '부당하게 이용하다'라는 뜻으로, 해킹 분야에서는 상대 시스템을 공격하는 것을 말함 - 셸코드 : 익스플로잇을 위해 제작된 어셈블리 코드 조각. 일반적으로 셸을 획득하기 위한 목적으로 셸코드를 사용 셸코드 공유 사이트 : http://shell-storm.org/shellcode/ 셸코드는 공격을 수행할 대상 아키텍처와 운영체제에 따라, 셸코드의 목적에 따라 다르게 작성해야 함 => 따라서 직접 상황에 맞추어 작성하는 것이 제일 좋음 - orw(open-read-write) 셸코드 파일을 열고, 읽은 뒤 화면에 출력해주는 셸코드 “/tmp/flag”를 읽는 동작을 하는 c언어 코드 line3) int fd = open(“/tmp/flag”, O_RDONLY, NULL) ..

DreamHack_System hacking stage1

- 시스템 해킹 로드맵 수강 위한 기초 능력 시스템 해킹에 필요한 기초 c언어, python 해석 능력 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 //"Welcome Hackers :)"가 출력되는 입력값을 찾아보자 #include #include #include int main() { int sz = 0x30; // 0x30은 십진수로 48 char *buf = (char *)malloc(sizeof(char) * sz); // 문자열 메모리 할당 puts("Hello World!"); // puts는 문자열만 출력 가능 printf("Education + Hack = ?\\n"); // printf는 정수,실수,문자(열) 출력 가능 fgets(bu..

[해커스쿨 LOB] level11_skeleton

id : skeleton pw : shellcoder 1. 문제 파일 내용 확인 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [skeleton@localhost skeleton]$ ls // 파일 목록 확인 golem golem.c [skeleton@localhost skeleton]$ cat golem.c // golem.c 내용 확인 /* The Lord of the BOF : The Fellowship of the BOF - golem - stack destroyer */ #include #include extern char **environ; main(in..

[해커스쿨 LOB] level 6_wolfman

id : wolfman pw : love eyuna 1. 파일 목록 확인, 소스코드 분석 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [wolfman@localhost wolfman]$ ls -al //파일 목록 확인 total 48 drwx------ 2 wolfman wolfman 4096 Mar 29 2010 . drwxr-xr-x 25 root root 4096 Mar 30 2010 .. -rw-r--r-- 1 wolfman wolfman 24 Feb 26 20..

해커스쿨 LOB level 5 orc

id : orc pw : cantata 1. 파일 목록 확인, 소스코드 분석 ls -al로 파일 목록을 보니 이번 단계의 문제 파일은 wolfman인 듯 하다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [orc@localhost orc]$ cat wolfman.c // 파일 내용 확인 /* The Lord of the BOF : The Fellowship of the BOF - wolfman - egghunter + buffer hunter */ #include #include extern char **environ; main(int ar..

해커스쿨 LOB level 4 goblin

id : goblin pw : hackers proof 1. 파일 목록 확인, 소스코드 분석 ls로 파일 목록 확인, orc와 orc.c가 눈에 띈다. 우선 orc가 어떻게 동작할지 미리 파악하기 위해 orc.c의 내용을 살펴봤다. 입력값의 길이가 2보다 작으면 argv error 출력 후 실행 종료 (1) (2) (3) (1) memset은 리눅스에서 메모리를 초기화하는 함수이다. environ 배열이 인자로 들어있는데, 이 부분으로 보아 환경변수를 쭉 초기화 하는 것으로 예상된다. (2) 입력값의 index [1][47] 값이 \xbf이지 않으면 stack is still your friend. 문구 출력 후 프로그램이 종료된다. \xbf는 주소값일테니, 인자를 넣을 때 이것을 신경 써야 프로그램이 ..

해커스쿨 LOB level 3

id : cobolt pw : hacking exposed 1. 파일 목록 확인, 소스코드 분석 파일 목록을 확인하니 goblin 파일이 눈에 띈다. goblin.c 내용을 보면 gets함수로 입력받아 입력값을 buffer에 저장하고, 이 buffer 내용을 출력하는 코드이다. gets 함수는 입력 받은 값의 길이와 이것을 저장할 공간의 길이를 확인하지 않고 그냥 넣어버리기 때문에 버퍼오버플로우 공격에 취약한 대표적인 함수 중 하나이다. 이 취약점을 이용해 BOF를 일으킬 것이다. 일단 goblin을 실행해 봤더니 입력값을 받게 되어있고, 입력한 그대로 출력된다. buffer 크기보다 큰 값을 넣었더니 정상 실행은 되지만 Segmentation fault 경고가 나왔다. gdb로 보니 buffer가 딱 ..

해커스쿨 LOB level 2

id : gremlin pw : hello bof world 1. 파일 목록 확인, 소스코드 분석 파일 목록 확인(ls)을 했더니 cobolt라는 실행파일과 c소스파일이 나왔다. 우선 cobolt.c의 내용을 확인해봤다(cat). level1과 같은 형식의 문제인데 buffer의 크기가 16으로 매우 작다는 것이 포인트이다. cobolt 프로그램을 실행(./)하면 argv error라고 출력되고, 입력값의 크기를 너무 크게 넣으니 Segmentation fault가 나왔다. 2. tmp 디렉토리 생성, 환경변수 확인 환경변수 확인 등의 작업을 위해 tmp 디렉토리를 생성(mkdir) 후 tmp디렉토리로 이동(cd)했다. 25byte쉘코드로 시도해봤는데 계속 오류가 나길래 인터넷 검색 후 41byte 쉘코..