2024/09 6

DreamHack System- basic_exploitation_001

코드의 취약점을 찾아 익스플로잇 코드를 짜고 flag를 얻는 문제이다. #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 read_flag() { // flag 파일을 읽어주는 함수 system("cat /flag");}int main(int argc, char *argv[]) { char buf[0x80]; // buf..

카테고리 없음 2024.09.29

DreamHack System- basic_exploitation_000

우선 문제를 읽어보면 취약점을 찾아 셀을 획득해 flag파일을 읽는 것이다.일단 코드부터 살펴보겠다.   ⚡ root  ~/Downloads  cat basic_exploitation_000.c#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);}int main(int argc, char *argv[]) { char buf[0x80];..

카테고리 없음 2024.09.29

System War Game- Return Address Overwrite

문제를 읽어보고 다운 받아 리눅스에서 실행시켜 본다.  // Name: rao.c// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0;} 문제를 다운 받았을 때 제공되는 파일의 코..

카테고리 없음 2024.09.22

Quiz: x86 Assembly 3Question.1

코드 분석 push rbp와 mov rbp, rsp: 스택 프레임을 설정하는 기본적인 코드임mov esi, 0xf: esi 레지스터에 0xf(15)를 저장. 이는 출력할 바이트 수와 관련이 있을 수 있음mov rdi, 0x400500: rdi 레지스터에 0x400500 값을 저장. 이는 메모리 주소를 가리킴call 0x400497 : write_n 함수를 호출함mov eax, 0x0와 pop rbp, ret: 함수 종료 후 리턴함  write_n 함수 스택 프레임 설정 (push rbp, mov rbp, rsp)mov QWORD PTR [rbp-0x8], rdi: rdi의 값을 스택에 저장. 이 값은 0x400500mov DWORD PTR [rbp-0xc], esi: esi 값을 스택에 저장. 이 값은 ..

카테고리 없음 2024.09.15

Quiz: x86 Assembly 2Question.1

코드 분석 mov dL, BYTE PTR[rsi+rcx]: rsi는 0x400000으로 주어졌으므로, 이 명령어는 rcx 레지스터 값을 기준으로 메모리 주소 0x400000 + rcx에 있는 바이트를 dL에 저장함xor dL, 0x30: dL에 저장된 값을 0x30(48)과 XOR 연산하여 변환함mov BYTE PTR[rsi+rcx], dL: 변환된 값을 다시 같은 메모리 위치로 저장함inc rcx: rcx 값을 1 증가시킴cmp rcx, 0x19: rcx 값을 0x19(25)와 비교하여, rcx가 25일 때 종료됨루프를 통해 0x400000부터 0x400019까지의 메모리를 처리함  0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x100x400008 | 0x44 0..

카테고리 없음 2024.09.15

System Hacking- Dreamhack 개념 정리

컴퓨터 구조란?컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법을 말함 컴퓨터 구조의 세부 분야  x86-64 아키텍처: 레지스터- 범용 레지스터(General Register)- 세그먼트 레지스터(Segment Register)- 명령어 포인터 레지스터(Instruction Pointer Register, IP)- 플래그 레지스터(Flag Register) 범용 레지스터 플래그 레지스터  5가지의 세그먼트가 존재 - 코드 세그먼트- 데이터 세그먼트- BSS 세그먼트- 힙 세그먼트- 스택 세그먼트 각 세그먼트 별 요약 x86-64 어셈블리어 문법 구조 데이터 이동 명령어

카테고리 없음 2024.09.15