CTF 라이트업
안녕하세요, 저는 Sean이고 여가 시간에 CTF 문제를 푸는 것을 즐깁니다. 현재 제 역할은 바이너리 익스플로잇과 소프트웨어 리버스 엔지니어링을 많이 다루는 것이라 주로 그 카테고리에 집중하는 편입니다. 온라인에서 보는 대부분의 라이트업은 형편없어서, 이 글들이 기본 개념을 더 잘 설명해주길 바랍니다.
모든 풀이에는 pwntools로 작성된 재현 가능한 솔루션을 최대한 포함하려고 노력합니다. 중요한 것은 플래그 자체가 아니라 플래그를 얻기까지의 과정입니다.
이 글이 금방 낡지 않길 바라지만, 몇몇 CTF 문제에 대한 비디오 워크스루도 제작해 보았습니다. YouTube에서 볼 수 있습니다.
다음은 일반적인 Unix Access 주제와 그와 관련된 CTF 챌린지 목록입니다.
Unix Access 지식
취약점 클래스
취약점 클래스를 익스플로잇하는 능력 입증
- 동작하는 셸코드를 처음부터 작성하고, 셸코드를 작성하는 모든 단계를 설명:
- 다음 완화 조치를 적용한 경우와 적용하지 않은 경우의 스택 버퍼 오버플로: ASLR(주소 공간 레이아웃 무작위화), NX(비실행 메모리), 스택 카나리:
- 힙 그루밍과 함수 포인터를 가진 객체를 사용한 힙 버퍼 오버플로:
- 힙 데이터 구조를 변조하여 발생시키는 힙 버퍼 오버플로:
- 함수 포인터를 포함하는 객체를 이용한 UAF:
- 임의 읽기/쓰기 프리미티브를 허용하는 객체를 이용한 UAF:
- 데이터 타입 혼동 취약점
- 임의 읽기/쓰기 프리미티브를 위한 포맷 문자열 취약점:
- 초기화되지 않은 변수가 익스플로잇에 어떻게 사용될 수 있는지:
익스플로잇 프리미티브 구현 능력 입증
- 임의 쓰기 프리미티브:
- 상대 쓰기 프리미티브:
- 임의 읽기 프리미티브:
- 프리미티브를 체이닝하여 익스플로잇을 구축하는 방법
- 쓰기 프리미티브를 사용하여 권한을 상승시키거나 임의 코드를 실행하는 방법:
다음 ELF 링킹 구조의 목적과 구조, 그리고 바이너리 익스플로잇에서의 악용 방법 설명
- Procedural Linkage Table:
- Global Offset Table:
PLT/GOT 데이터 구조 상호작용 측면에서의 동적 재배치 모드와, 모드 간 익스플로잇 프리미티브 차이 설명
- Partial RELRO:
- Full RELRO:
ROP/JOP를 구현하여 다음을 수행하는 능력 입증
- ROP/JOP 가젯 찾기:
- libc 함수와 시스템 콜 호출:
- 코드 실행을 위한 가젯 체이닝:
- 임의 셸코드 실행
익스플로잇 완화 조치의 목적과 구현 설명
- ASLR
- Data Execution Prevention (DEP)/NX:
- Position Independent Executables (PIEs)
- PIE가 익스플로잇에 미치는 영향
- 스택 카나리:
- 안전한 리스트 언링킹
소프트웨어 리버스 엔지니어링
다음 기법과 사용 사례의 비교 및 대조
- 정적 리버스 엔지니어링:
- 동적 리버스 엔지니어링:
정적 및 동적 리버스 엔지니어링을 수행하기 위해 다음 유형의 도구를 사용하는 데 익숙함 입증
- 정적 디스어셈블러
- 디버거
- 위 도구를 사용한 자동화 기법
퍼징 기법
- Dumb fuzzing 기법
- 코드 커버리지 기반 퍼징
- 기호 실행
유용하다고 생각하는 CTF 블로그 게시물