Step 311. ★ 두 번째 24시간 모의시험 — 보완이 먹혔는지 재는 검증의 날
Level 4 — OSCP 준비와 응시 | 난이도 ★★★★★ | 예상 소요 시간 3일 (개선 목록 확정 반나절 + 모의시험 24시간 + 비교 분석 1일)
전제: Step 309의 첫 모의시험, Step 310의 실패 패턴 분석과 보완(재현 로그·체크리스트·수정 규칙) 완료.
- 준비물: 첫 시험과 겹치지 않는 새 머신 세트, 보완된 막힘 체크리스트, 수정된 시간 배분 규칙,
lap_timer.py와compare_exams.py, 보고서 템플릿. 이 챕터의 머신 공략·점수 장면은 전부 출력 예시입니다. - ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. 머신은 OffSec 랩, Hack The Box, Proving Grounds 등 운영자가 공격 연습용으로 공식 개방한 플랫폼의 것만 사용합니다.
- 이 챕터는 검증입니다 — Step 310의 보완이 진짜였는지, 그리고 합격권이 운이 아니라 실력인지를 두 번째 24시간으로 확인합니다.
한 번의 합격권 점수는 운일 수 있습니다. 머신 세트가 우연히 내 강점과 맞았을 수도, 막힌 곳이 우연히 풀렸을 수도 있습니다. 실력과 운을 가르는 유일한 방법은 재현입니다 — 다른 세트, 다른 하루, 같은 규칙.
동시에 오늘은 실험의 날이기도 합니다. 첫 시험에서 확정 못 한 것 — 나에게 맞는 머신 순서, 시간 배분 — 을 의식적으로 바꿔 볼 마지막 기회입니다. 시험 당일에 전략을 흔들지 않으려면, 흔들 실험은 오늘 끝내야 합니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- Step 310의 보완 산출물을 "개선 목록"으로 정리해 두 번째 시험의 적용 항목을 확정한다
- 새 머신 세트로 동일 규칙의 24시간 모의시험을 수행하며 보완 항목의 실적용을 검증한다
- 실패 유형의 재발 여부를 실시간으로 체크하며 시험 중에 기록한다
- 두 시험의 득점·머신당 소요 시간·실패 유형 분포를 비교해 개선을 수치로 판정한다
- 비교 결과로 시험 당일 전략(순서·상한·수면 블록)을 최종 확정 문서로 만든다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 새 모의시험 머신 세트, 파이썬 3(lap_timer.py, compare_exams.py), 보완된 체크리스트 |
| 오늘의 명령 | python lap_timer.py start/lap/status/report, python compare_exams.py |
| 필요한 개념 | 개선 목록, 개선 검증 지표, 유형 재발 체크, 절대 점수 vs 유형 분포, 전략 확정 |
| 오늘의 산출물 | 두 번째 시험 로그 + 1차/2차 비교 분석 + 시험 당일 전략 확정 문서 |
2-1. 두 번째 시험의 목적은 점수가 아니다
두 번째 모의시험이 답해야 할 질문은 세 가지입니다.
- 보완이 먹혔는가 — Step 310에서 줄이기로 한 유형이 실제로 줄었는가
- 합격선이 재현되는가 — 컨디션과 세트가 달라도 70점(예시 기준)을 넘는가
- 전략이 확정됐는가 — 당일에 쓸 순서와 배분이 두 번의 데이터로 뒷받침되는가
주의할 것은 2번의 해석입니다. 점수가 첫 시험보다 낮을 수 있습니다 — 머신 구성의 난이도 편차가 있기 때문입니다. 소재의 지적 그대로, 절대 점수보다 실패 유형이 줄었는가를 봅니다. 열거 누락이 2건에서 0건으로 줄었는데 점수가 5점 낮아졌다면, 그 시험은 성공입니다.
2-2. 개선 목록 — 보완을 시험에 싣는 형식
Step 310의 산출물이 시험장에서 저절로 작동하지는 않습니다. "보완했다"와 "시험 중에 쓴다" 사이에는 개선 목록이라는 다리가 필요합니다.
개선 목록 예시 (시험 전날 작성, 시험 중 모니터 옆에 부착):
[1] (② 대책) 막힘 30분 → 체크리스트 강제 펼치기
신규 항목: 백업 확장자 스캔 / sudo -l·SUID·cron 3분 확인 / MSSQL xp_cmdshell
[2] (③ 대책) 상한을 시각으로: 머신 착수 시 종료 시각을 물리 타이머에 설정
[3] (① 대책) AD 세트: 자격증명 획득 시 AS-REP 로스팅 시도 포함
[4] (⑤ 대책) 머신 마감 랩에 "증거 4종 확인" 체크
[5] (④ 대책) 수면 블록 14:00 경과 시 — 알람 2개, 거실에서 취침(책상 아님)
각 항목은 "무엇을"이 아니라 "언제, 어떻게 발동하는가"로 적습니다. 발동 조건이 없는 개선은 시험 15시간째의 뇌에 전달되지 않습니다.
2-3. 재발 체크 — 시험 중에 유형을 추적한다
첫 시험의 유형이 재발하는 순간은 시험이 끝난 뒤가 아니라 시험 중에 포착할 수 있습니다. 랩 로그에 유형 태그를 추가합니다.
랩 기록 규칙 추가 (이번 시험부터):
- 막혀서 전환할 때: lap "독립B" "전환" "체크리스트 12항목 확인 후 전환 — 열거는 완료"
- 체크리스트로 돌파했을 때: lap "독립C" "돌파" "체크리스트 7번(sudo -l)이 답 — ② 대책 작동"
- 상한을 지켰을 때: lap "AD세트" "전환" "03:00 규칙 준수 — ③ 대책 작동"
왜: 이 태그들이 종료 후 비교 분석의 원료입니다. "② 대책 작동" 랩이 3개 찍힌 시험은, 점수와 무관하게 보완이 작동한 시험입니다. 반대로 태그가 하나도 없다면 — 체크리스트를 시험장에 가져가지 않은 것과 같습니다.
2-4. 비교의 해석 — 숫자가 말하는 것과 말하지 않는 것
두 시험의 비교에서 읽을 것은 네 가지입니다.
| 지표 | 개선으로 읽는 방향 | 주의 |
|---|---|---|
| 득점 | 오르면 좋지만 1순위 아님 | 세트 난이도 편차가 점수를 오염시킴 |
| 실패 유형 분포 | 보완 대상 유형의 감소가 핵심 | 새 유형의 등장은 새 보완 과제 |
| 상한 초과 머신 수 | 감소 = ③ 개선 | 초과해도 득점으로 이어졌다면 규칙 재검토 |
| 수면 시간 | 계획 준수 = ④ 개선 | 수면을 줄여 점수를 올렸다면 반칙 — 당일 불가능한 전략 |
비교의 마지막에 내리는 판정은 이진입니다 — "당일 전략 확정" 또는 "세 번째 모의시험". 두 시험 모두 합격선이고 최다 유형이 줄었다면 확정입니다. 둘 중 하나라도 미달이면, 부족한 쪽을 다시 Step 310의 절차로 보완하고 한 번 더 검증합니다. 시험일은 그 다음에 잡아도 늦지 않습니다.
3. 따라 하기
3-1. 세트 구성과 개선 목록 확정
첫 시험과 동일한 조건(구성·규칙)으로, 전부 새 머신입니다. 재공략한 머신은 이번 실험의 피험자가 될 수 없습니다.
시작 전 체크:
[ ] 새 세트: AD 세트 1 + 독립 3~4대, 첫 시험과 겹침 0
[ ] 개선 목록(2-2) 작성 완료 — 모니터 옆 부착
[ ] 보완된 체크리스트 파일 열린 상태로 시작
[ ] 물리 타이머(휴대폰 알람 등)에 머신 상한·수면·중간 점검 예약
[ ] 첫 시험의 전략과 이번 전략의 차이를 한 줄로 기록 — 예: "1차 AD 선행 → 2차 병렬 정찰"
마지막 항목이 2차 시험의 실험 설계입니다. 전략을 바꿔 보는 것은 허용되고, 다만 한 번에 하나씩 바꿉니다 — 순서와 상한을 동시에 바꾸면 무엇이 효과였는지 비교할 수 없습니다.
3-2. 시험 진행 — 1차와 같은 몸, 다른 절차
시험 진행 자체는 Step 309와 동일합니다. 다른 것은 랩에 유형 태그(2-3)가 붙는다는 것과, 개선 목록이 발동 조건대로 작동하는지를 관찰한다는 것뿐입니다.
화면 예시 (2차 시험의 랩 로그):
[+00:30] 전체정찰 — 완료 — 전 머신 스캔, 쉬운 독립부터 착수 (2차 전략)
[+02:40] 독립E — 완료 — 20점, 증거 4종 확인 [⑤ 대책 작동]
[+03:00] AD세트 — 착수 — 물리 타이머 06:00 설정 [③ 대책 작동]
[+05:10] AD세트 — 돌파 — AS-REP 로스팅 성공 (1차의 ① 보완 학습이 답)
[+08:20] AD세트 — 완주 — DA까지 40점
[+14:00] 수면 — 시작 — 4시간 40분 [④ 대책 작동]
[+19:30] 독립F — 돌파 — 체크리스트 7번이 답 [② 대책 작동]
[+22:00] 마감블록 — 부분 점수 정리 + 보고서 초본
읽는 법: 대괄호 태그가 이 로그의 핵심입니다 — 보완이 "문서"가 아니라 "시험 중 사건"으로 기록돼 있습니다. 종료 후 이 태그를 세는 것만으로 보완 작동 횟수가 집계됩니다.
3-3. 종료 후 비교 — compare_exams.py로 판정
두 시험의 요약을 JSON으로 만들어 비교합니다. 먼저 내장 예시로 출력을 익힙니다 — 실측 결과입니다.
python compare_exams.py
=== 1차 vs 2차 모의시험 비교 ===
득점 : 50점 → 80점 (+30)
완주 머신 : 1대 ['독립A'] → 3대 ['AD세트', '독립E', '독립F']
수면 : 3시간 20분 → 4시간 40분
[실패 유형 분포 변화] — 절대 점수보다 이 표가 보완의 성적표
유형 1차 2차 판정
1 기술 부재 1 0 ✅ 개선
2 열거 누락 2 1 ✅ 개선
3 시간 관리 1 0 ✅ 개선
4 체력 붕괴 0 0 ➖ 동일
5 보고서 미비 1 0 ✅ 개선
상한(3시간) 초과 머신: 1대 → 1대 ['AD세트']
판정 기준: 점수가 낮아도 열거 누락(유형 2)과 상한 초과가 줄었으면 보완 성공.
머신 구성의 난이도 편차가 있으므로 절대 점수만으로 자신감을 깎지 말 것.
읽는 법: 이 예시의 판정은 명확한 "전략 확정"입니다 — 점수 +30, 보완 대상 유형 전부 감소, 수면 계획 준수. 남은 과제는 "상한 초과 머신 1대(AD 세트)"입니다 — AD 세트는 연쇄 구조라 3시간 상한이 빡빡할 수 있으므로, 이 데이터는 "AD 세트 상한을 3.5~4시간으로 조정"이라는 당일 규칙 수정 근거가 됩니다. 내 데이터는 python compare_exams.py exam1.json exam2.json으로 비교합니다 — JSON 형식은 도구 상단 주석에 있습니다.
3-4. 시험 당일 전략 확정 문서
비교 판정이 끝나면, 두 시험의 데이터가 지지하는 전략을 한 장짜리 문서로 확정합니다.
시험 당일 전략 (예시 — 여러분의 데이터로 채우세요):
- 순서: 병렬 정찰 30분 → 쉬운 독립 1대 → AD 세트 → 나머지 독립
- 상한: 독립 3시간 / AD 세트 4시간 (2차 데이터 근거) — 상한 도달 시 순번 미루기
- 체크리스트: 막힘 30분마다 강제 펼치기 (총 15항목)
- 수면: 14시간 경과 시 4.5시간 — 알람 2개, 책상 아닌 거실
- 식사: 09:00 / 18:00, 산책 20분 포함
- 증거: 쉘 획득 즉시 4종 — 축하는 그 다음
- 마감: 종료 2시간 전부터 부분 점수 + 보고서
- 패닉 시: "1차도 2차도 초반 무득점 구간이 있었다. 시간표를 믿는다."
왜 마지막 줄이 있는가: 당일의 패닉은 기술이 아니라 기억으로 진정됩니다. "연습에서도 그랬고, 시간표대로 했더니 풀렸다"는 문장이 미리 적혀 있으면, 패닉은 사건이 아니라 예정된 구간이 됩니다.
4. 미션과 연습문제
미션 — 두 번째 모의시험과 전략 확정
- 첫 시험과 겹치지 않는 새 세트를 구성하고, 개선 목록(발동 조건 포함)을 작성해 부착합니다.
- 24시간 동일 규칙으로 완주합니다 — 랩에 유형 태그(대책 작동/재발)를 기록합니다.
- 첫 시험과 한 가지만 전략을 바꿔 실험하고, 무엇을 바꿨는지 기록합니다.
- 종료 후 두 시험의 요약 JSON을 만들어
compare_exams.py로 비교하고 판정(확정/재시험)을 내립니다. - 보고서까지 24시간 내 완성해 제출 과정 전체를 리허설합니다.
- 시험 당일 전략 확정 문서(한 장)를 작성합니다 — 패닉 시 문장 포함.
연습문제
문제 1. 두 번째 시험에서 전략을 바꿔 볼 때 "한 번에 하나씩" 바꿔야 하는 이유는 무엇인가요?
문제 2. 2차 시험 점수가 1차보다 낮게 나왔지만, 보완 대상 유형(열거 누락)은 2건에서 0건으로 줄었습니다. 이 결과를 어떻게 해석해야 하며, 판정은 무엇인가요?
문제 3. 랩 로그에 유형 태그("② 대책 작동" 등)를 시험 중에 기록하는 이유는 무엇인가요? 종료 후 기억으로 정리하면 안 되는 이유와 함께 설명해 보세요.
문제 4. 수면을 줄여서 점수를 올린 2차 시험이 "반칙"인 이유는 무엇인가요? 검증의 관점에서 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
검증 기준으로 확인하세요.
- 세트의 독립성: 1차와 겹치는 머신이 0대인가 — 재공략 머신이 섞이면 보완 검증이 오염됩니다.
- 개선 목록의 발동 조건: 각 항목이 "언제, 어떻게"로 적혀 있는가 — "체크리스트를 잘 쓴다"는 목록이 아닙니다.
- 실험의 단일 변수: 바꾼 전략이 하나뿐이고 그것이 기록돼 있는가.
- 유형 태그의 존재: 랩 로그에서 "대책 작동/재발" 태그가 실제로 찍혀 있는가 — 태그가 없으면 개선 목록은 장식이었습니다.
- 비교 판정의 근거: 확정/재시험 판정이 유형 분포 변화에 근거하는가 — 점수만 본 판정은 2-4의 표를 다시 읽으세요.
- 확정 문서의 완결: 순서/상한/수면/식사/증거/마감/패닉 문장이 한 장에 모두 있는가.
연습문제 해답
문제 1 해답. 비교 가능성 때문입니다. 순서와 상한을 동시에 바꾸면 결과의 차이를 어느 쪽의 효과로 돌릴지 알 수 없습니다 — 변수가 두 개면 원인 귀속이 불가능합니다. 한 번에 하나를 바꾸면 "1차와 2차의 차이는 그 하나의 효과"라고 읽을 수 있습니다. 두 번의 시험은 통계가 아니라 2개의 표본이므로, 실험 설계가 단순할수록 해석이 정직해집니다.
문제 2 해답. 보완 성공으로 해석해야 합니다. 점수는 세트의 난이도 편차에 오염되는 지표이고, 유형 분포는 여러분의 절차가 만든 지표입니다. 보완의 목표는 "다음 시험에서 같은 이유로 무너지지 않는 것"이므로, 보완 대상 유형이 0건이면 Step 310의 작업은 성공입니다. 판정은 — 나머지 조건(수면 준수, 완주)이 갖춰졌다면 — 당일 전략 확정입니다. 다만 점수가 합격선 미만이라면, 유형 분석 외에 "그 점수가 구조적으로 부족한 이유"(예: AD 미완주)를 한 줄로 기록하고 당일 전략의 우선순위에 반영합니다.
문제 3 해답. 시험 중의 사건을 시험 중에 기록해야 그것이 데이터이기 때문입니다. 종료 후 기억으로 정리하면 24시간의 피로를 거친 뇌가 "잘된 것 위주"로 재구성합니다 — 대책이 작동하지 않은 구간은 기억에서 누락되기 쉽고, 그러면 재발이 데이터에 나타나지 않습니다. 또한 태그를 찍는 행위 자체가 개선 목록의 발동을 강제합니다 — "② 대책 작동"을 찍으려면 실제로 체크리스트를 펼쳤어야 하므로, 기록이 절차의 감시자 역할을 합니다.
문제 4 해답. 검증의 목적은 "당일에 재현 가능한 합격"의 확인이기 때문입니다. 수면을 줄인 전략은 당일에 쓸 수 없거나, 쓴다면 시험 후반의 판단력 붕괴로 오히려 점수를 깎는 전략입니다 — 모의시험에서 우연히 버텨졌어도 재현성이 없습니다. 검증 실험의 조건은 본조건과 같아야 하므로, 본시험에서 불가능한 조건(무수면)으로 얻은 점수는 증거가 아니라 착시입니다. 수면 준수가 비교 지표에 포함된 이유가 이것입니다.
완료 기준 체크리스트
- [ ] 1차와 겹침 없는 새 세트로 두 번째 24시간을 완주했다
- [ ] 개선 목록을 발동 조건 포함으로 작성해 부착했다
- [ ] 랩 로그에 유형 태그(대책 작동/재발)를 기록했다
- [ ] 바꾼 전략이 하나뿐이고 기록돼 있다
- [ ] 두 시험의 비교(득점/유형 분포/상한 초과/수면)를 완료했다
- [ ] 유형 분포 변화에 근거한 판정(확정/재시험)을 내렸다
- [ ] 보고서를 24시간 내 완성해 제출 과정을 리허설했다
- [ ] 시험 당일 전략 확정 문서(패닉 문장 포함) 한 장을 완성했다
6. 흔한 실수와 해결
벽 1. 2차 점수가 1차보다 낮아서 자신감이 무너져요
증상: "보완했는데 왜 더 못하지"라는 생각에 모든 것을 다시 시작하고 싶어집니다.
원인: 절대 점수를 보완의 성적표로 오독하고 있습니다. 세트가 다르면 난이도가 다르고, 난이도가 다르면 점수는 비교 불가능합니다.
해결: 소재의 처방 그대로입니다 — 점수가 아니라 실패 유형 분포를 보세요. 열거 누락이 줄었다면 보완은 성공이고, 그것이 이 시험의 목적이었습니다. 점수 하락이 AD 세트 미완주 같은 구조적 원인이라면, 그것은 당일 전략(우선순위)의 수정 근거일 뿐 여러분의 실력 평가가 아닙니다.
벽 2. compare_exams.py에 JSON을 넣었더니 에러가 나요
증상:
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 3
원인: JSON은 키를 반드시 큰따옴표로 감싸야 합니다 — 파이썬 딕셔너리처럼 작은따옴표를 쓰면 이 에러가 납니다.
해결: 도구 상단 주석의 형식 예시를 복사해 값만 바꾸세요. 손으로 쓰기 어려우면 파이썬으로 만들면 됩니다 — python -c "import json; print(json.dumps({'score': 50, ...}))"로 만든 문자열을 파일에 붙여넣으면 형식 오류가 없습니다.
벽 3. 개선 목록을 부착했는데 시험 중에 한 번도 안 쳐다봤어요
증상: 종료 후 보니 목록의 존재 자체를 잊고 있었습니다.
원인: 몰입 중에는 시야 주변이 사라집니다 — 부착은 필요조건이고 충분조건이 아닙니다.
해결: 발동을 시각 기반 알람으로 바꾸세요 — "막히면 펼치기"는 막힘을 자각해야 발동하지만, "매시 정각에 목록 10초 보기" 알람은 자각 없이 발동합니다. 1차의 교훈(③ 대책)과 같은 구조입니다 — 기억과 자각을 장치로 대체하는 것. 다음 시험의 랩에 "정시 목록 점검"을 추가하세요.
벽 4. 1차와 2차에서 다른 유형이 나와요 — 보완이 무한정 늘어나는 것 같아요
증상: 열거 누락을 보완했더니 이번엔 새 기법(①)에서 막혔습니다.
원인: 정상이고, 오히려 좋은 신호입니다 — 운영 문제(②③④⑤)가 정리되자 진짜 기술 지도가 드러난 것입니다. 지금까지 기술 구멍은 운영 실패에 가려 있었습니다.
해결: 새 유형은 Step 310의 절차를 그대로 한 번 더 돌립니다 — 그 머신을 재공략하고 해당 주제를 재현 학습합니다. 보완이 "늘어나는" 것이 아니라 "얕은 층에서 깊은 층으로 내려가는" 것입니다. 시험일은 모든 층이 정리된 뒤에 잡으면 됩니다 — 서두르는 것이 가장 비싼 전략입니다.
벽 5. 두 번 다 합격권인데도 "실전은 다를 것"이라는 불안이 남아요
증상: 데이터는 충분한데 확신이 안 섭니다.
원인: 합리적 불안입니다 — 모의시험과 실전은 프록터링·VPN·압박이 다릅니다. 다만 이 불안은 해소하는 것이 아니라 관리하는 것입니다.
해결: 불안을 문서로 변환하세요 — "실전에서 다른 것"의 목록(프록터링, 신분 확인, 낯선 머신)을 적고, 각 항목에 대응 절차를 붙입니다. 대응 절차가 붙은 불안은 체크리스트가 되고, 체크리스트가 된 불안은 당일에 더 이상 불안이 아니라 할 일입니다. 이 목록은 전략 확정 문서의 뒷면에 붙여 시험 준비물로 만드세요.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 검증의 재현 | 한 번의 합격권은 운일 수 있다 — 다른 세트로 다시 넘어야 실력 |
| 개선 목록 | 보완을 시험에 싣는 다리 — 발동 조건(언제·어떻게) 포함이 필수 |
| 유형 태그 | 시험 중 기록하는 보완 작동 표시 — 대책 작동/재발 |
| 유형 분포 우선 | 절대 점수는 난이도 편차에 오염 — 분포 변화가 보완의 성적표 |
| 단일 변수 실험 | 전략은 한 번에 하나만 — 변수가 둘이면 원인 귀속 불가 |
| 전략 확정 문서 | 두 시험의 데이터가 지지하는 당일 운영 — 패닉 문장 포함 |
오늘의 명령
| 명령 | 하는 일 |
|---|---|
python lap_timer.py start/lap/status/report |
2차 시험의 타이머·로그 (1차와 동일) |
python compare_exams.py |
내장 예시로 1차/2차 비교 읽기 연습 |
python compare_exams.py exam1.json exam2.json |
실제 두 시험의 비교·판정 |
python fail_analyzer.py analyze fails2.csv |
2차 시험의 실패 유형 집계 |
명령어보다 중요한 감각
두 번째 시험이 끝나면 여러분에게는 대부분의 응시자가 없는 것이 있습니다 — 자기 데이터에 근거한 전략입니다. 남의 후기에서 읽은 "AD부터 하세요"가 아니라, 두 번의 24시간이 증명한 "나는 이렇게 해야 넘는다"입니다. 시험 당일의 침착함은 자신감에서 오지 않습니다 — "이 시간표는 두 번 검증됐다"는 기록에서 옵니다.
전부 체크되면 Step 311 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.