본문 바로가기

문제 풀이/[DreamHack]12

[DreamHack] System Hacking Stage4 - Shellcode Lecture orw 셸코드 orw 셸코드 작성 - 파일을 열고, 읽은 뒤 화면에 출력해주는 셸코드이다. // /tmp/flag를 읽는 셸코드 // C언어 형식의 의사코드 char buf[0x30]; int fd = open("/tmp/flag", RD_ONLY, NULL); read(fd, buf, 0x30); write(1, buf, 0x30); - orw 셸코드를 작성하기 위해 필요한 syscall은 아래와 같다. syscall rax arg0 (rdi) arg1 (rsi) arg2 (rdx) read 0x00 unsigned int fd char *buf size_t count write 0x01 unsigned int fd const char *buf size_t count open 0x02 c.. 2022. 12. 24.
[DreamHack] System Hacking Stage3 - Tool: pwntools 설치 Lecture pwntools 설치 - 깃허브에 자세히 나와있다. (링크) GitHub - Gallopsled/pwntools: CTF framework and exploit development library CTF framework and exploit development library. Contribute to Gallopsled/pwntools development by creating an account on GitHub. github.com pwntools 설치 $ sudo apt-get update $ sudo apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential $ sudo pyth.. 2022. 12. 21.
[DreamHack] System Hacking Stage3 - Tool: gdb 설치 Lecture 디버거란? - 컴퓨터과학에서는 실수로 발생한 프로그램의 결함을 버그(bug)라고 한다. - 개발자들은 이미 완성된 코드에서 버그를 찾는 디버거(Debugger)라는 도구를 개발했다. gdb & pwndbg gdb - gdb(GNU debugger)는 리눅스의 대표적인 디버거이다. 설치 방법 1. 콘솔을 연다 2. git clone https://github.com/pwndbg/pwndbg 를 입력한다. 3. root 비밀번호를 입력한다. 4. 설치가 완료되면 콘솔에 gdb를 입력하여 설치에 성공했는지 확인한다. - 실습 예제 1. 아래 코드를 작성하고 컴파일 한다. // Name: debugee.c // Compile: gcc -o debugee debugee.c -no-pie #inclu.. 2022. 12. 21.
[DreamHack] System Hacking Stage2 - Quiz: x86 Assembly 2 [Code] main: push rbp mov rbp, rsp mov esi, 0xf mov rdi, 0x400500 call 0x400497 mov eax, 0x0 pop rbp ret write_n: push rbp mov rbp, rsp mov QWORD PTR [rbp-0x8],rdi mov DWORD PTR [rbp-0xc],esi xor rdx, rdx mov edx, DWORD PTR [rbp-0xc] mov rsi,QWORD PTR [rbp-0x8] mov rdi, 0x1 mov rax, 0x1 syscall pop rbp ret ================================== [Memory] 0x400500 | 0x3037207964343372 0x400508 | 0x003.. 2022. 12. 20.
[DreamHack] System Hacking Stage2 - Quiz: x86 Assembly 1 [Register] rcx = 0 rdx = 0 rsi = 0x400000 ======================= [Memory] 0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10 0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x43 0x55 0x5d 0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c 0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00 ======================= [code] 1: mov dl, BYTE PTR[rsi+rcx] 2: xor dl, 0x30 3: mov BYTE PTR[rsi+rcx], dl 4: inc rcx 5: .. 2022. 12. 20.
[DreamHack] SystemHacking Stage2 - x86 Assembly: Essential Part 2 Lecture x86-64 어셈블리 명령어 Pt.2 Opcode: 스택 - x64 아키텍처에서는 다음의 명령어로 스택을 조작할 수 있다. push val: val을 스택 최상단에 쌓음 연산 rsp -= 8 [rsp] = val - 예제) [Register] rsp = 0x7fffffffc400 [Stack] 0x7fffffffc400 | 0x0 2022. 12. 20.
[DreamHack] SystemHacking Stage2 - x86 Assembly: Essential Part 1 Lecture 해커의 언어: 어셈블리 - 컴퓨터 속에는 복잡하고 논리적인 인과관계가 존재하고, 여러 개체가 상호작용한다. - 그 속에서 통용되는 기계어(Machine Code)라는 언어가 있다. - 해커는 컴퓨터의 언어로 작성된 소프트웨어에서 취약점을 발견해야 하기 때문에 컴퓨터 언어에 관한 지식을 습득해야한다. - 그런데, 기계어는 0과 1로만 이루어져있어서 이해하기 어렵다. - 그래서 David Wheeler는 EDSAC를 개발하면서 어셈블리 언어(Assembly Language)와 어셈블러(Assembler)를 고안했다. - 어셈블러? 일종의 통역사이다. 어셈블리어로 코드 작성 -> 기계어로 변환 시켜준다. - 소프트웨어를 역분석 하는 사람들은 기계어를 어셈블리 언어로 번역하는 역어셈블러(Disas.. 2022. 12. 20.
[DreamHack] SystemHacking Stage2 - Quiz: Computer Architecture 문제 1. rax = 0x0123456789abcdef일 때, al의 값은? 답: 0xef 문제 2. rax = 0x0123456789abcdef일 때, ax의 값은? 답: 0xcdef 문제 3. rax = 0x0123456789abcdef일 때, ah의 값은? 답: 0xcd 문제 4. rax에서 rbx를 뺐을 때, ZF가 설정되었다. rax와 rbx의 대소를 비교하시오. 답: == 문제 5. rax = 0x0123456789abcdef일 때, eax의 값은? 답: 0x89abcdef 2022. 12. 19.
[DreamHack] SystemHacking Stage2 - Background: Computer Architecture Lecture 컴퓨터 구조(Computer Architecture) - 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고 구성하는 방법이다. - 기능 구조에 대한 설계, 명령어 집합 구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. 기능 구조에 대한 설계 - 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고 설계하는 분야이다. - 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조가 있다. 명령어 집합구조(Instruction Set Architecture) - CPU가 처리해야하는 명령어를 설계하는 분야이다. - ARM, MIPS, AVR, Intel의 x86, x86-64등이 있다. 마이크로 아키텍처(Micr.. 2022. 12. 19.
[DreamHack] System Hacking Stage2 - Quiz: Linux Memory Layout #include int a = 0xa; const char b[] = "d_str"; int c; int foo(int arg){ int d = 0xd; return 0; } int main(){ int *e = malloc(sizeof(*e)); return 0; } 문제 1. e는 어느 세그먼트의 데이터를 가리키는가? 답: 힙 문제 2. foo가 위치하는 세그먼트는 어디인가? 답: 코드 문제 3. a가 위치하는 세그먼트는 어디인가? 답: 데이터 문제 4. b가 위치하는 세그먼트는 어디인가? 답: 읽기 전용 데이터 (rodata) 문제 5. c가 위치하는 세그먼트는 어디인가? 답: BSS 문제 6. "d_str"이 위치하는 세그먼트는 어디인가? 답: 읽기 전용 데이터 (rodata) 문제 7. d가 위.. 2022. 12. 19.
[DreamHack] System Hacking Stage2 - Background: Linux Memory Layout Lecture 세그먼트(Segment) - 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 이다. - 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트(코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트)로 나뉜다. 이렇게 나누는 이유? 각 용도에 맞게 적절한 권한을 부여할 수 있다는 장점이 있기 때문! 권한의 종류? 읽기, 쓰기, 실행 세 가지가 존재한다. CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있다. 예를 들어.... 데이터 적재가 되는 곳에는 읽기 권한이 부여되고, 실행 대상이 아니기 때문에 실행 권한은 부여되지 않는다! 코드 세그먼트(Code Segment) - 실행 가능한 기계 코드가 위치하는 영역이다. - 다른 말로 텍스트 세그먼트(Text S.. 2022. 12. 19.
[DreamHack] System Hacking - STAGE 1 리눅스 환경 구축 1. windows powershell을 관리자 권한으로 실행 2. 다음 명령어 입력 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart wsl --set-default-version 2 3. Microsoft store에서 Ubuntu 18.04를 설치한다. 4. echo "Hello Ubuntu!" 입력해서 Hello Ubuntu!가 출력된다면 성공! ps.만약.... 아래 이미지와 같은 오류가 뜬다면? https://learn.mi.. 2022. 12. 19.
728x90