일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Web
- reversing
- 드림핵
- TCP
- 시스템해킹
- 웹해킹
- 네트워크
- dreamhack
- 시스템
- 소프트웨어
- ftz
- hacking
- XSS
- bee-box
- 네트워크보안
- 알고리즘
- network
- 해킹
- WarGame
- System
- 워게임
- 모의해킹
- 순서도
- Webhaking
- 소프트웨어보안
- CodeEngn
- 비박스
- 리버싱
- 웹
- webhacking
- Today
- Total
목록시스템 (5)
Without a Break
Lazy binding을 하는 바이너리는 실행 중에 GOT 테이블을 업데이트할 수 있어야 하므로 GOT에 쓰기 권한이 부여된다. 그런데 이는 바이너리를 취약하게 만드는 원인이 된다. 또한, ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료와 관련된 .init_array, .fini_array가 있다. 이 영역들은 프로세스의 시작과 종료에 실행할 함수들의 주소를 저장하고 있는데, 여기에 공격자가 임의로 값을 쓸 수 있다면, 프로세스의 실행 흐름이 조작될 수 있다. => RELocation Read-Only(RELRO) 개발 RELRO : 쓰기 권한이 불필요한 데이터 세그먼트에 쓰기 권한을 제거한다. Partial RELRO 권한 prelro를 실행해보면 0x601000부터 0x602000까지의 주소에..
라이브러리 : 컴퓨터 시스템에서 프로그램들이 함수나 변수를 공유해서 사용할 수 있게 한다. C언어를 비롯하여 많은 컴파일 언어들은 자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원하고 있다. 라이브러리를 사용하면 같은 함수를 반복적으로 정의해야 하는 수고를 덜 수 있어서 코드 개발의 효율이 높아진다. 또한, 표준 라이브러리가 제작되어 있어서 개발자들은 쉽게 해당 함수들을 사용할 수 있다. 링크 : 프로그램에서 어떤 라이브러리의 함수를 사용한다면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다. 동적 링크 동적 링크된 바이너리를 실행하면 동적 라이브러리가 프로세스의 메모리에 매핑되고, 실행 중에 라이브러리의 함수를 ..
컴퓨터 구조와 명령어 집합 구조 컴퓨터 구조 : 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구상하는 방법 컴퓨터의 기능 구조에 대한 설계, 명령어, 집합구조, 마이크로 아키텍쳐, 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함 컴퓨터의 기능 구조에 대한 설계 : 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야 명령어 집합구조(Instruction Set Architecture) : CPU의 명령에 대한 설계. CPU가 처리해야하는 명령어를 설계하는 분야 마이크로 아키텍쳐(Micro Architecture) : CPU의 하드웨어적 설계. 정의된 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분..
세그먼트 : 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트로 구분 운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 권한(읽기,쓰기,실행)을 부여할 수 있다는 장점이 있음 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트로 구분 코드 세그먼트 : 실행 가능한 기계 코드가 위치하는 영역 텍스트 세그먼트(Text Segment)라고도 불림 읽기 권한과 실행 권한이 부여 => 프로그램이 동작하려면 코드를 실행할 수 있어야 하기 때문에 데이터 세그먼트 : 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치함 읽기 권한이 부여 => CPU가 세그먼트의 데이터를 읽을 수 있어야 하기 때문에 쓰기가 가능한 세그먼트..