Pwnable 기초 지식
파일 디스크립터
- 리눅스 혹은 유닉스 계열의 시스템에서 프로세스가 파일을 다룰 때 사용 (파일 핸들러)
- 파일로 취급되는 외부 장치를 포함한 모든 장치들에 접근할 때 사용
- 파일이 시스템으로부터 할당 받은 대표 번호
- 음수가 아닌 정수 타입으로 표현
※ POSIX : 운영체제 간의 호환성을 위해 IEEE에서 만든 유닉스 운영체제 기반의 API 규격
파일 디스크립터 확인 방법
- 실행 중인 프로세스 PID 확인

2. PID로 해당 프로세스의 파일 디스크립터 정보 확인

연산자 우선순위
- 수식 내에 여러 연산자가 함께 등장할 때, 어느 연산자를 먼저 처리해야 되는지를 정하기 위함
1순위 : x++, x—, (), [], ., →
2순위 : ++x, —x, +x, -x, !, ~, (자료형), *x, &x, sizeof
3순위 : *, /, %
4순위 : +, -
5순위 : <<, >>
6순위 : <, ≤, >, ≥
7순위 : ==, ≠
8순위 : &
9순위 : ^
10순위 : |
11순위 : &&
12순위 : ||
13순위 ?:
Pwnable 방법론
- 사전 조사
- 파일 정보 수집
- 바이너리 파일과 관련된 정보를 수집하는 단계
- file : 바이너리 형식, 바이트오더링 등 바이너리에 관한 정보를 제공
- readelf : ELF 파일 정보를 제공 (하나 이상의 옵션을 사용해야 함)
- ldd : 지정한 프로그램이나 파일을 실행할 때 필요한 공유 라이브러리 의존성
- 메모리 보호 기법
- 허가되지 않은 메모리 접근으로 인한 영향을 예방할 수 있는 보호 기법
- 메모리 보호 기법을 우회하여, RIP를 컨트롤할 수 있는 시나리오를 구상해보는 단계
- 메모리 보호 기법 확인하기 → 공격 기법 추리기 → 취약점 예상
- 파일 정보 수집
※ checksec : 바이너리에 어떤 메모리 보호 기법이 적용되어 있는지 확인하는 명령어
-
- Memory Map
- 어떤 메모리 영역에 쓰기 권한과 실행 권한 이 있는지 메모리 스펙을 확인함
- 인자로 주소 전달 시 해당 주소가 어떤 메모리 영역에 위치하는지 메모리 상황 파악
- Memory Map
※ vmmap : Virtual Memory Map의 약자로 프로세스 메모리 매핑 정보를 확인할 때 사용하는 GDB 명령어
2. 바이너리 파일 실행
-
- 파일 실행
- 사전 조사를 마친 뒤, 주어진 바이너리 파일을 실행해 프로세스 확인
- 실행 동작 파악
- 어떤 실행 흐름을 보이는지 간단히 파악하는 단계
- 파일 실행
3. 정적 분석
-
- 코드 분석
- 바이너리의 실행 동작을 알기 위해 코드를 실행하지 않고 분석하는 단계
- 사용자의 입력 값에서 발생할 취약점을 예상하고 RIP 컨트롤 시나리오를 작성
- ex. IDA,
- 변수 및 함수의 취약점 존재 여부
- 코드 분석
4. 동적 분석
-
- 파일 디버깅
- 프로그래밍 과정 중에 발생하는 논리적 오류나 비정상적인 연산, 버그를 찾고 수정하는것
- Pwnable에서는 소스코드를 복원하거나 프로그램의 취약점을 분석한다는 의미
- 코드 및 로직 분석
- 제공된 바이너리 파일을 디버거로 실행시켜 메모리 구조를 확인
- 사용자의 입력 값이 필요한 부분에 중단점을 설정한 뒤, 실행하면서 문제에 필요한 정보를 수집
- 취약점 존재 여부
- 파일 디버깅
5. Payload 작성
-
- 공격 시나리오
- 취약점을 통해 대상의 시스템을 공격하는 코드를 의미
- Python
- Pwntools
- 공격 Payload를 편하게 작성할 수 있는 Python 모듈
- 공격 시나리오
6. Exploit
-
- Payload 실행
- Flag 획득
- 최종 목적 (관리자 권한 획득 등)
'Pwnable' 카테고리의 다른 글
| Integer Overflow (0) | 2025.11.19 |
|---|---|
| Format String Bug (0) | 2025.11.19 |
| Buffer Overflow (0) | 2025.11.19 |
| Pwnable Tools (0) | 2025.11.19 |
| 리눅스 & 어셈블리어 (0) | 2025.11.19 |