일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- reversing
- 비박스
- Webhaking
- 웹
- 해킹
- 알고리즘
- WarGame
- 순서도
- 드림핵
- 소프트웨어보안
- CodeEngn
- network
- 네트워크
- XSS
- 시스템해킹
- hacking
- TCP
- Web
- System
- 워게임
- 웹해킹
- 모의해킹
- bee-box
- dreamhack
- 소프트웨어
- 리버싱
- 시스템
- 네트워크보안
- ftz
- webhacking
- Today
- Total
목록Pwnable (29)
Without a Break

해킹 분야에서 상대 시스템을 공격하는 것을 익스플로잇(Exploit)이라고 부른다. 그 중, 쉘코드에 대해 알아보도록 하자. 셸코드(Shellcode) : 익스플로잇을 위해 제작된 어셈블리 코드 조작 orw 셸코드 : 파일을 열고 읽은 뒤 화면에 출력해주는 셸코드 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 const char *filename int flags umode_t mode 1. int fd = open("/tmp/flag", O_RDONLY, NULL) ..

debugee.c 파일을 생성한 뒤 디버그 파일을 실행시킨다. 실행하면 다음과 같이 뜬다. start ELF : 리눅스의 실행 파일 형식 EP(Entry Point) : ELF의 헤더 중 진입점 필드 debugee 파일을 readelf로 확인해 본 결과, debugee의 진입점은 0x1060이라는 것을 알 수 있다. gdb debugee로 들어가 pwndbg에 start 명령을 입력하면 마찬가지로 진입점의 주소를 확인할 수 있다. Context context는 크게 registers, disasm, stack, backtrace의 4개의 영역으로 나눈다. registers 레지스터의 상태를 보여줍니다. disasm rip부터 여러 줄에 걸쳐 디스어셈블된 결과를 보여줍니다. stack rsp부터 여러 줄에..
컴퓨터 구조와 명령어 집합 구조 컴퓨터 구조 : 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구상하는 방법 컴퓨터의 기능 구조에 대한 설계, 명령어, 집합구조, 마이크로 아키텍쳐, 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함 컴퓨터의 기능 구조에 대한 설계 : 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야 명령어 집합구조(Instruction Set Architecture) : CPU의 명령에 대한 설계. CPU가 처리해야하는 명령어를 설계하는 분야 마이크로 아키텍쳐(Micro Architecture) : CPU의 하드웨어적 설계. 정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분..
세그먼트 : 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트로 구분 운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 권한(읽기,쓰기,실행)을 부여할 수 있다는 장점이 있음 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트로 구분 코드 세그먼트 : 실행 가능한 기계 코드가 위치하는 영역 텍스트 세그먼트(Text Segment)라고도 불림 읽기 권한과 실행 권한이 부여 => 프로그램이 동작하려면 코드를 실행할 수 있어야 하기 때문에 데이터 세그먼트 : 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치함 읽기 권한이 부여 => CPU가 세그먼트의 데이터를 읽을 수 있어야 하기 때문에 쓰기가 가능한 세그먼트..