Step 301. CTF 복기 블록 A + 블록 B: 마지막 보강 — 구멍 봉인과 전투 패키지
Level 3 — CTF 실전과 공격 스킬 심화 | 난이도 ★★★☆☆ | 예상 소요 시간 2일 (대회 #11 복기 + 시즌 전체 재독 + 봉인 훈련)
전제: Step 280~300의 복기 블록 루틴(블록 A: 틀린 문제 끝까지 파기, 블록 B: Write-up 작성)과 대회 #11의 로그. 이 챕터는 열두 번째 사이클의 마지막 복기입니다.
- 준비물: 대회 #11 로그와 확정된 예선 전략 문서(읽기 전용), 시즌 전체 복기 노트, 치트시트·플레이북·코드 라이브러리.
- 주의: 오늘부터 새 기술은 금지입니다. 예선 직전의 득점은 "이미 아는 것의 정확한 실행"에서 나옵니다 — 오늘의 과제는 구멍의 봉인이지 확장이 아닙니다.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 유사 문제 훈련은 운영자가 공개한 자료만 사용합니다.
열두 번의 복기 사이클 중 마지막입니다. 지금까지의 복기가 "실력을 키우는" 시간이었다면, 이번 복기는 "실력이 새는 곳을 막는" 시간입니다. 새 것을 더 얹는 것보다, 아는 것이 시험장에서 빠져나가지 않게 하는 것 — 그것이 예선 직전 보강의 본질입니다.
오늘은 대회 #11의 복기를 끝내고, 시즌 전체의 복기 노트를 마지막으로 훑어 남은 구멍을 봉인한 뒤, 예선 당일에 들고 들어갈 전투 패키지를 완성합니다. 그리고 중요한 마감 기준 하나 — 완벽하지 않아도 됩니다. 남은 구멍 전부를 메우는 것이 아니라, 가장 자주 새는 구멍부터 막는 것이 오늘의 정답입니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 대회 #11을 블록 A(틀린 문제 끝까지 파기)와 블록 B(Write-up) 루틴으로 복기한다
- 시즌 전체 복기 노트를 재독해 "반복해서 틀린 것"의 최종 리스트를 만든다
- 우선순위 기준(빈도 × 회복 비용)으로 봉인 순서를 정한다
- 항목당 30분 봉인 훈련(치트시트 재확인 + 유사 문제 1개)을 실행한다
- 플레이북/라이브러리/치트시트를 정리해 예선 당일의 전투 패키지를 완성한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 복기 노트, Write-up 저장소(블로그/깃허브), 치트시트, 코드 라이브러리, 타이머 |
| 오늘의 명령어 | 새 명령어 없음 — 전부 복기와 정리의 작업 |
| 필요한 개념 | 봉인(메우기가 아니라 막기), 빈도 × 회복 비용, 30분 봉인 훈련, 전투 패키지, 마감 기준 |
| 오늘의 산출물 | 대회 #11 Write-up + 반복 오답 최종 리스트 + 봉인 기록 + 전투 패키지 |
2-1. 왜 새 것이 아니라 정확도인가
예선 직전의 2일에 새 기술을 배우면 무슨 일이 생기는지 계산해 봅시다. 새 기술이 예선에 출제될 확률은 낮고, 출제돼도 2일짜리 이해로는 풀리지 않습니다. 반면 이미 아는 기법의 정확도는 — 플래그 형식, 명령 옵션 하나, 복원 절차 — 모든 문제에서 점수에 개입합니다.
소재 원문의 문장이 곧 오늘의 원칙입니다: "예선에서 점수는 이미 아는 것의 정확한 실행에서 나온다." 새 기술의 유혹이 올라오면 이 문장으로 뿌리치세요. 그 유혹은 학습 욕심이 아니라 불안의 다른 이름입니다.
2-2. 우선순위 — 빈도 × 회복 비용
시즌 전체를 재독하면 "반복해서 틀린 것"이 여러 개 나옵니다. 전부 봉인할 시간은 없으므로, 두 축으로 점수를 매깁니다.
| 항목 | 빈도 (시즌 중 몇 번) | 회복 비용 (30분으로 막히는가) | 우선순위 |
|---|---|---|---|
| JWT alg confusion 검증 절차 | 3회 | 낮음 (치트시트 절차 확인) | 1 |
| 패딩 오라클 스크립트 파라미터 | 2회 | 낮음 (라이브러리 주석 보강) | 2 |
| 힙 청크 구조 그림 | 2회 | 높음 (반나절 필요) | 4 |
| 윈도우 이벤트 로그 필터 | 2회 | 낮음 (쿼리 스니펫 저장) | 3 |
읽는 법: 빈도는 "예선에서 또 만날 확률"의 대리 지표이고, 회복 비용은 "지금 막을 수 있는가"의 지표입니다. 빈도 높고 비용 낮은 것부터 — 이것이 봉인의 순서입니다. 힙 청크처럼 비용이 큰 항목은 봉인하지 않고 회피 전략으로 둡니다: "나오면 배점을 보고 보류 후보로"라는 한 줄을 전략 문서의 여백에 적는 것으로 충분합니다.
2-3. 30분 봉인 훈련의 설계
봉인 한 항목은 딱 30분입니다. 구성은 고정입니다.
- 치트시트 재확인 (10분): 그 항목의 절차를 치트시트에서 찾아, 막혔던 지점의 한 줄을 보강합니다.
- 유사 문제 1개 (15분): 같은 유형의 아주 쉬운 문제를 하나 풉니다 — 새로 배우기 위해서가 아니라 치트시트가 실제로 작동하는지 검증하기 위해서입니다.
- 봉인 기록 (5분): "무엇이 막혔고, 치트시트의 어느 줄이 그것을 막는가"를 한 줄로 남깁니다.
30분이 넘으면 그 항목은 봉인 대상이 아니라 학습 대상입니다 — 예선 후로 미루세요. 이 시간 상한이 오늘을 지키는 둑입니다.
2-4. 마감 기준 — 완벽하지 않아도 된다
오늘 작업의 끝을 어디로 정할 것인가가, 작업 자체만큼 중요합니다. 마감 기준은 세 문장입니다.
- 반복 오답 리스트의 상위 항목부터 봉인한다 — 전부가 아니라 위에서부터.
- 봉인하지 못한 항목은 전부 회피 규칙 한 줄로 처리한다 — 처리되지 않은 항목이 없으면 된다.
- 남은 시간은 새 보강이 아니라 휴식과 점검 재실행에 쓴다.
"완벽하지 않아도 된다"는 선언이 방치의 면허가 아님을 구분하세요. 이 기준에서 허용되지 않는 것은 하나뿐입니다 — 아무 결정도 없이 남겨진 항목. 봉인하든, 회피 규칙을 적든, 예선 후로 미루든, 모든 항목에 주인 있는 결정이 붙으면 오늘은 완료입니다. 마감의 대상은 실력이 아니라 미결정입니다.
2-5. 전투 패키지 — 예선 당일의 들고 갈 것
봉인이 끝나면 모든 자산을 한 폴더로 모읍니다. 이것이 전투 패키지입니다.
battle-pack/
playbook/ 침투 플레이북 + 예선 최종 전략 문서 (읽기 전용)
cheatsheets/ 분야별 치트시트 (오늘 보강된 최신본)
library/ 익스플로잇 템플릿, 자주 쓰는 스크립트
checklist/ 대회 시작 루틴, 플래그 제출 전 10초 루틴, 점검 목록
contacts/ 팀 채널 초대 링크, 역할 분담표
기준은 하나입니다 — 예선 당일에 이 폴더 외의 것을 찾지 않아도 되는가. 찾게 될 것이 보이면 지금 폴더에 넣습니다. 전투 패키지의 완성도는 대회 시작 후 10분의 침착함으로 나타납니다.
3. 따라 하기
3-1. 대회 #11 복기 — 블록 A와 B의 마지막 실행
Step 280의 블록 A 루틴대로, 대회 #11에서 풀지 못한 문제를 최대 3개 골라 끝까지 팝니다. 고르는 기준은 2-2의 표와 같습니다 — 예선에 또 나올 것 같은 것부터. 화면 예시 (복기 기록):
[대회 #11 복기 — 블록 A] (화면 예시)
대상 1: heap-note (Pwn, 400점) — 대회 중 보류했던 문제
정답 경로: tcache count 조작 → 덮어쓰기 (공개 Write-up 대조)
내가 멈춘 지점: 청크 구조를 그리다가 free 후 상태 추적에서 혼란
봉인 여부: 학습 대상 (30분 초과) → 예선 후 과제로 이동, 전략 문서에 회피 규칙 확인됨
대상 2: backup-zip (For, 200점) — 풀었으나 30분 소요
정답 경로: ZIP 알려진 평문 공격 — bkcrack 한 줄이면 끝
내가 돈 길: 수동 헤더 분석 25분
봉인: 치트시트 '암호화 ZIP' 절에 bkcrack 행 추가 (30분 내 봉인 성공)
읽는 법: 두 대상의 처리가 다른 것을 보세요. 대회에서 못 푼 문제라고 전부 봉인하는 것이 아닙니다 — 30분에 막히는 것만 막고, 나머지는 명시적으로 미룹니다. "미룬다"는 결정도 기록해야 미룬 것이 잊힌 것과 구분됩니다.
3-2. 블록 B — 대회 #11 Write-up 작성
푼 문제 중 남에게 줄 수 있는 것 하나를 골라 Write-up을 씁니다. 구조는 Step 278의 8장 뼈대를 그대로 씁니다. 이번 블록 B의 추가 규칙은 하나 — 시즌 누적 개수를 확인합니다. 대회 회고록과 Write-up의 누적 수는 Level 3 종합 평가(Step 303)의 자격 조건이므로, 오늘 작성으로 카운트가 얼마가 되는지 기록해 두세요.
[Write-up 카운터] (화면 예시)
대회 #11 Write-up 1편 작성 완료 → 누적 51편
대회 회고록: #11까지 11편 (예선 후 #12 작성 예정)
3-3. 시즌 재독 — 반복 오답 최종 리스트업
이제 열두 사이클의 복기 노트 전체를 훑습니다. 목적은 감상이 아니라 추출입니다 — 두 번 이상 등장한 실패만 골라 리스트를 만듭니다. 한 번 틀린 것은 실수지만, 두 번 틀린 것은 구조입니다. 화면 예시:
[반복 오답 최종 리스트] (화면 예시)
1. JWT 검증 절차 — #4, #7, #11에서 시간 손실 (빈도 3)
2. 패딩 오라클 스크립트 파라미터 혼동 — #6, #9 (빈도 2)
3. 윈도우 이벤트 로그 필터 쿼리 — #8, #11 (빈도 2)
4. 힙 청크 구조 — #9, #11 (빈도 2, 회복 비용 큼 → 회피 전략)
읽는 법: 이 리스트가 짧다고 실망하지 마세요 — 열두 사이클의 복기가 일했다면 반복 오답은 원래 줄어 있어야 합니다. 리스트가 비어 있다면 그것이 "복기가 잘 작동했다"의 증거이며, 그 경우 오늘은 치트시트 전체 재독과 전투 패키지 정리에 시간을 씁니다.
3-4. 봉인 훈련 실행 — 타이머와 함께
리스트의 우선순위 1번부터 30분 봉인 훈련을 돌립니다. 화면 예시 (1번 항목):
[봉인 훈련: JWT alg confusion] (화면 예시)
10:00 치트시트 재확인 — 'JWT' 절의 검증 절차 4단계를 읽고,
3단계(alg 필드 확인)에 "none/HS256 혼동 둘 다" 보강
10:10 유사 문제 1개 — 워게임의 JWT 기초 문제 재풀이, 9분 해결
치트시트 절차대로 진행됨을 확인 (검증 통과)
10:25 봉인 기록 — "막힘: alg만 보고 키 종류 확인을 건너뜀.
치트시트 3단계가 이제 그 순서를 강제함"
10:30 종료. 다음 항목은 내일 (하루 2개 상한)
읽는 법: "하루 2개 상한"에 주목하세요. 봉인 훈련은 검증이지 공부가 아니므로, 연달아 하면 15분의 유사 문제가 1시간의 파고들기로 변질됩니다. 2일에 4개 — 리스트의 상위를 다 소화하는 데 충분합니다.
3-5. 전투 패키지 최종 정리와 팀 최종 점검 회의
보강된 치트시트와 정리된 라이브러리를 2-5의 구조로 모으고, 팀 채널에 패키지 위치를 공유합니다. 그리고 짧은 최종 점검 회의(30분)를 엽니다. 어젠다 화면 예시:
[팀 최종 점검 회의 어젠다] (화면 예시)
1. 전투 패키지 공유 — 모두가 같은 치트시트 버전을 받았는가 (5분)
2. 예선 전략 문서 낭독 — 역할 분담과 커뮤니케이션 규약 구두 확인 (15분)
3. 당일 동선 — 집결 시각, 채널 개설, 백업 연락망 (10분)
읽는 법: 2번의 "구두 확인"이 중요합니다 — 문서를 각자 읽는 것과, 같은 조항을 소리 내어 확인하는 것은 다릅니다. "내가 Web 1차, 막히면 채널에 한 줄" 같은 문장을 각자의 입으로 말하게 하세요. 말해 본 조항만이 당일에 작동합니다.
4. 미션과 연습문제
미션 — 마지막 보강 완주
- 대회 #11의 미해결 문제를 2-2 기준으로 골라 블록 A 복기를 수행하고, 봉인 여부를 항목별로 결정합니다.
- 블록 B로 Write-up 1편을 작성하고 누적 카운터를 갱신합니다.
- 시즌 전체 복기 노트를 재독해 반복 오답(빈도 2 이상) 최종 리스트를 만들고 우선순위를 매깁니다.
- 상위 항목부터 30분 봉인 훈련을 실행합니다 (하루 2개 상한, 봉인 기록 필수).
- 전투 패키지를 2-5 구조로 완성하고, 팀 최종 점검 회의를 개최합니다.
연습문제
문제 1. 예선 직전에 새 기술 학습이 손해인 이유를, 출제 확률과 정확도의 관점에서 설명해 보세요.
문제 2. 우선순위의 두 축(빈도 × 회복 비용)에서 "빈도가 높지만 회복 비용이 큰" 항목의 올바른 처리는 무엇인가요?
문제 3. 30분 봉인 훈련에서 유사 문제를 푸는 목적이 "연습"이 아니라 "검증"이라고 하는 이유는 무엇인가요?
문제 4. 전투 패키지의 완성 기준("당일에 이 폴더 외를 찾지 않아도 되는가")이 왜 당일의 침착함으로 이어지는지 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
검증 기준으로 확인하세요.
- 블록 A의 선택적 봉인: 미해결 문제 전부가 아니라 기준(빈도·비용)으로 고른 대상만 복기했고, 봉인/보류의 결정이 항목별로 기록됐는가. "전부 복기함"은 오늘 기준에서는 감점 요소입니다 — 선택하지 않은 것이니까요.
- 리스트의 빈도 표기: 반복 오답 각 항목에 빈도(어느 대회에서)가 적혀 있는가. 출처 없는 리스트는 기억의 목록이지 기록의 리스트가 아닙니다.
- 봉인 기록의 형식: "무엇이 막혔고 치트시트 어느 줄이 막는가"의 한 줄이 있는가. 문제를 다시 푼 기록만 있고 치트시트 변경이 없으면 봉인이 아니라 재풀이입니다.
- 패키지의 자급성: 2-5의 다섯 폴더가 채워졌고, 회의에서 팀원 전원이 같은 버전을 확인했는가.
연습문제 해답
문제 1 해답. 새 기술이 예선에 출제될 확률은 낮고, 설령 출제돼도 2일짜리 이해로는 실전에서 풀리지 않습니다 — 배운 것과 풀 수 있는 것 사이에는 반복 훈련이 필요하기 때문입니다. 반면 정확도 개선은 모든 문제에 걸쳐 작용합니다 — 제출 형식, 절차 순서, 복원 방법의 실수 감소는 기대 점수를 세트 전체에서 올립니다. 기대값을 비교하면 새 기술은 좁고 불확실한 이득, 정확도는 넓고 확실한 이득입니다.
문제 2 해답. 봉인하지 않고 회피 전략으로 둡니다. 회복 비용이 크다는 것은 지금의 30분으로는 막히지 않는다는 뜻이고, 억지로 파면 다른 항목의 봉인 시간을 먹습니다. 대신 "나오면 보류 후보" 같은 회피 규칙 한 줄을 전략 문서에 적어, 당일에 그 문제를 만났을 때의 행동을 미리 정해 둡니다. 봉인 못 한 것을 명시적으로 처리하는 것이 봉인의 일부입니다.
문제 3 해답. 유사 문제의 역할이 실력 향상이 아니라 치트시트의 작동 확인이기 때문입니다. 봉인 훈련의 산출물은 "치트시트의 보강된 한 줄"이고, 유사 문제는 그 한 줄이 실제 문제 앞에서 순서대로 작동하는지 검증하는 시험대입니다. 그래서 아주 쉬운 문제를 고르고 15분으로 제한합니다 — 어려운 문제를 골라 새로 배우기 시작하면 검증이 학습으로 변질돼 30분 상한이 무너집니다.
문제 4 해답. 대회 시작 직후의 검색 행위("그 스크립트 어디 있지")는 시간 손실이면서 동시에 불안의 신호이기 때문입니다. 찾는 행위 자체가 "준비가 덜 됐다"는 감각을 만들어 판단을 조급하게 합니다. 패키지가 자급적이면 시작 후의 모든 필요가 같은 폴더 안에서 해결되고, 그 사실을 아는 것만으로 당일의 심박이 낮아집니다. 침착함은 성격이 아니라 준비물의 함수입니다.
완료 기준 체크리스트
- [ ] 대회 #11 미해결 문제를 기준에 따라 골라 블록 A 복기를 완료했다
- [ ] 봉인/보류 결정이 항목별로 기록됐고, 보류 항목은 회피 규칙과 함께다
- [ ] 대회 #11 Write-up 1편을 작성하고 누적 카운터를 갱신했다
- [ ] 반복 오답 최종 리스트(빈도 2 이상)에 우선순위를 매겼다
- [ ] 상위 항목의 30분 봉인 훈련과 봉인 기록을 완료했다 (하루 2개 상한 준수)
- [ ] 치트시트·라이브러리가 보강된 버전으로 갱신됐다
- [ ] 전투 패키지 다섯 폴더를 완성하고 팀 최종 점검 회의를 열었다
6. 흔한 실수와 해결
벽 1. 재독하다 보니 새로 배우고 싶은 것이 자꾸 나와요
증상: 복기 노트의 "나중에 공부할 것" 메모가 눈에 밟힙니다.
원인: 불안이 학습 욕심으로 위장한 것입니다 — 2-1의 경고가 현실이 되는 순간입니다.
해결: 메모는 "예선 후" 폴더로 옮기고 시각적으로 닫으세요. 그리고 계산으로 확인하세요 — 지금 그 항목에 3시간을 쓰면, 봉인 훈련 네 항목이 사라집니다. 네 개의 검증된 정확도와 하나의 미검증 지식, 예선에서 점수를 벌 쪽은 전자입니다.
벽 2. 반복 오답 리스트가 10개가 넘어요
증상: 재독하니 구멍 투성이로 보입니다.
원인: 기준을 완화해 빈도 1인 것까지 섞었거나, 열두 사이클의 복기가 실제로 얕았거나.
해결: 먼저 빈도 2 미만을 과감히 지우세요 — 리스트의 가치는 짧음에 있습니다. 그래도 많다면, 이번에는 상위 4개만 봉인하고 나머지는 전부 회피 규칙으로 처리합니다. 완벽하지 않아도 됩니다 — 12개 대회를 치른 여러분의 구멍이 이틀에 다 메워질 리 없고, 그것을 인정하는 것이 마감 기준입니다.
벽 3. 30분 봉인이 자꾸 1시간을 넘겨요
증상: 유사 문제가 생각보다 안 풀려 계속 붙잡게 됩니다.
원인: 문제 선택이 어렵거나, 그 항목이 봉인 대상이 아니라 학습 대상입니다.
해결: 30분이 울리면 즉시 중단하고 그 항목을 "보류(학습 대상)"로 재분류하세요. 그리고 유사 문제는 같은 유형의 가장 쉬운 것으로 다시 고릅니다 — 검증용 문제의 난이도는 낮을수록 좋습니다. 우리는 지금 실력을 재는 것이 아니라 치트시트를 검사하는 중입니다.
벽 4. 팀원이 최종 점검 회의에 안 와요
증상: 다들 바쁘다며 문서 공유로 때우려 합니다.
원인: 회의의 가치가 안 보이는 것 — 그러나 3-5에서 말했듯, 구두 확인 없는 문서는 당일에 작동하지 않습니다.
해결: 30분으로 고정하고 어젠다를 미리 보내세요. 그래도 안 되면 2번(전략 문서 낭독)만 10분으로 압축해 음성 채널에 잠깐 모입니다. 완전한 회의보다 짧은 회의가 낫고, 짧은 회의보다 없는 회의가 훨씬 나쁩니다.
벽 5. 다 정리하고 나니 할 게 없어 불안해요
증상: 패키지도 완성, 봉인도 끝 — 그런데 손이 근질거립니다.
원인: 준비 완료 상태에 익숙하지 않은 것입니다. 채우는 것만이 훈련이라는 착각.
해결: 그 불안이야말로 예선 전 마지막 훈련 과제입니다 — 아무것도 더하지 않는 연습. Step 300의 컨디션 계획표로 돌아가 D-2, D-1의 조항(점검 재실행, 일찍 취침)을 실행하세요. 최고의 컨디션으로 아는 것을 정확히 실행하는 것 — 그것이 여러분의 예선 전략 전체입니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 봉인 | 구멍을 메우는 것이 아니라 새는 것을 막는 것 — 30분에 막히는 것만 |
| 빈도 × 회복 비용 | 봉인 우선순위의 두 축 — 자주 새고 싸게 막히는 것부터 |
| 회피 전략 | 봉인 못 한 항목의 명시적 처리 — "나오면 보류" 한 줄 |
| 30분 봉인 훈련 | 치트시트 보강 10 + 유사 문제 검증 15 + 봉인 기록 5 |
| 전투 패키지 | 예선 당일의 자급 폴더 — playbook/cheatsheets/library/checklist/contacts |
| 마감 기준 | 완벽하지 않아도 된다 — 가장 자주 새는 구멍부터, 나머지는 회피 규칙으로 |
오늘의 도구·서식
| 도구·서식 | 하는 일 |
|---|---|
| 반복 오답 최종 리스트 | 빈도 2 이상 실패의 추출 — 짧을수록 좋다 |
| 봉인 기록 한 줄 | "무엇이 막혔고 치트시트 어느 줄이 막는가" |
| Write-up 누적 카운터 | Step 303 자격 조건의 진척 추적 |
| 전투 패키지 폴더 구조 | 다섯 폴더의 자급 자산 |
| 최종 점검 회의 어젠다 | 패키지 공유 + 전략 구두 확인 + 당일 동선 |
명령어보다 중요한 감각
열두 번째 복기의 끝에서, 여러분의 실력은 더 커지지 않았습니다 — 대신 덜 샙니다. 대회장에서의 점수는 실력의 총량이 아니라 실력 곱하기 실행 정확도이고, 오늘 여러분은 그 정확도를 올렸습니다.
그리고 마감의 기술을 기억하세요. 끝없이 메우려는 사람은 예선 전날까지 불안하고, "여기까지"를 선언하는 사람은 남은 날을 잠에 씁니다. 완벽하지 않아도 된다는 문장은 포기가 아니라 — 열두 사이클의 데이터가 허락한 전략적 마감입니다.
전부 체크되면 Step 301 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.