Step 130. ★ 점검: 타임어택 모의 침투 — 6시간 안에 전 과정을 돌린다
Level 2 — 보안 입문과 공격 스킬 기초 | 난이도 ★★★★☆ | 예상 소요 시간 7시간 (타임어택 6시간 + 회고 1시간)
전제: Step 111~129 — Kali 랩 구축, MS2 전 과정, 그리고 처음 보는 VulnHub 머신 1대 공략까지 마쳤다.
- 준비물: Step 129와 다른 VulnHub Easy 등급 VM 1대, 타이머(휴대폰이면 충분), 시간 기록용 메모지 또는 마크다운 파일. 이 챕터의 랩 공략 화면은 출력 예시, 로컬 명령의 시간 측정은 실측(2026-09-09, WSL Ubuntu 24.04)으로 표시했습니다.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다.
- 이 챕터는 테스트입니다 — 새로운 기법을 배우지 않습니다. 지금까지의 전부를 제한 시간 안에 꺼내 쓰는 훈련입니다.
실전 — 대회든 시험이든 실무든 — 은 시간 싸움입니다. 같은 실력이라도 "정찰 30분, 침투 2시간, 권한 상승 2시간, 기록 1시간"처럼 배분 계획이 있는 사람이 훨씬 멀리 갑니다. 오늘의 점검은 해킹 실력이 아니라 시간 감각을 검사합니다. 그리고 한 가지 법칙을 몸에 새깁니다 — 한 경로에 30분 이상 매달리지 않는다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 6시간 침투 훈련의 시간 배분표를 세우고 지킬 수 있다
- 각 단계 종료 시각과 결과를 기록해 계획 대비 지연을 추적한다
- "30분 규칙"으로 막힌 경로를 버리고 다른 경로로 전환한다
- 빠른 열거 명령 시퀀스를 만들어 수십 초 안에 타깃 윤곽을 잡는다
- 종료 후 "시간을 어디에 썼는가"의 회고 문서를 작성한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | Kali + VulnHub Easy VM(Step 129와 다른 것), 타이머, 기록 파일 |
| 오늘의 명령 | 전부 복습 — nmap, searchsploit, 권한 상승 열거 + 시간 측정용 time |
| 필요한 개념 | 시간 배분(time boxing), 30분 규칙, 회고(retrospective) |
| 오늘의 산출물 | 타임어택 결과 + 타임어택-회고.md(시간 사용 내역과 개선점) |
2-1. 시간 배분 — 침묵하는 시계가 가장 무섭다
제한 시간이 있는 침투에서 최악의 적은 어려운 취약점이 아니라 시간 감각의 부재입니다. "조금만 더 하면 될 것 같은데"라며 한 경로에 90분을 태우는 순간, 나머지 전부가 무너집니다.
그래서 시작 전에 표를 만듭니다. 6시간의 기본 배분:
| 구간 | 시간 | 목표 | 종료 신호 |
|---|---|---|---|
| ① 정찰·열거 | 0:00~0:30 | 전수 스캔 + 공격 표면 목록 | 취약점 후보 목록 완성 |
| ② 침투 | 0:30~2:30 | 첫 쉘 획득 | whoami 출력 |
| ③ 권한 상승 | 2:30~4:30 | root 도달 | id에서 uid=0 |
| ④ 기록·정리 | 4:30~6:00 | 재현 가능한 기록 완성 | 공략 기록 파일 완성 |
| 예비 | 각 구간의 이월분 | 밀린 구간 흡수 | — |
핵심은 숫자가 아니라 종료 신호를 미리 정한다는 것입니다. "될 때까지"가 아니라 "이 시각이 되면 다음으로"가 계획입니다.
2-2. 30분 규칙 — 매달리는 것이 시간 초과의 1등 원인
한 경로(한 서비스, 한 익스플로잇)에 30분 이상 진전이 없으면 멈추고 질문합니다.
"이 경로가 유일한가? 스캔 결과에 아직 안 두드린 줄이 남았는가?"
대부분의 경우 답은 "남았다"입니다. 그러면 그 경로에 표시만 하고(메모: "Samba — 30분 소모, 익스플로잇 불일치") 다음 후보로 넘어갑니다. 놀랍게도 자주, 처음의 스캔 결과를 다시 읽는 것이 제일 빠른 돌파구입니다 — 정찰을 성실히 한 사람이 타임어택에서 이깁니다.
2-3. 회고 — 점검의 진짜 산출물
타임어택의 성적표는 root 여부가 아니라 회고 문서입니다. 6시간이 끝나고 묻습니다.
- 계획 대비 어느 구간이 밀렸는가?
- 그 구간에서 정확히 무엇을 하고 있었는가?
- 다음에는 무엇을 다르게 할 것인가?
"침투에서 1시간 초과"는 결과고, "익스플로잇을 3개나 순서 없이 시도했다"가 원인입니다. 회고는 원인까지 파고들어야 다음 점검의 배분표가 좋아집니다.
3. 따라 하기
3-1. 시작 전 — 타깃 선정과 타이머 세팅
Step 129에서 뚫은 것과 다른 Easy 등급 VM을 고릅니다 — 아는 답으로는 시간 감각을 측정할 수 없으니까요. 랩에 합류시키고(Step 129의 3-1~3-2 절차), 메모지에 배분표를 적습니다.
입력 (메모 파일 타임어택-로그.md의 첫 화면):
# 타임어택 로그 — [머신 이름]
시작 시각: __:__ | 제한: 6시간
| 구간 | 계획 | 실제 종료 | 결과 메모 |
|------|------|-----------|-----------|
| 정찰 | ~0:30 | | |
| 침투 | ~2:30 | | |
| 상승 | ~4:30 | | |
| 기록 | ~6:00 | | |
왜: 이 표가 오늘의 주인공입니다. 명령 기록이 아니라 시각 기록 — 각 구간이 끝날 때마다 "실제 종료" 칸을 채우는 것만으로 훈련의 절반이 달성됩니다.
3-2. ① 정찰(30분) — 빠르고 넓게
정찰 구간의 기술은 하나 — 백그라운드로 굴릴 수 있는 것은 굴리면서 다른 것을 봅니다. 전수 스캔(-p-)은 느리니, 먼저 상위 포트로 빠른 스캔을 돌려 당장 볼 서비스를 확보하고, 전수 스캔은 동시에 진행합니다.
출력 예시 (정찰 구간의 전형):
# 터미널 1 (즉시): nmap -sV 192.168.56.104
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2
80/tcp open http Apache httpd 2.4.18
# 터미널 2 (백그라운드): nmap -p- 192.168.56.104 -oN full.txt
읽는 법: 빠른 스캔 결과로 열거를 시작하고, 느린 전수 스캔은 뒤에서 돌게 합니다. 30분이 지나기 전에 "취약점 후보 목록"(서비스 + 버전 + searchsploit 결과)이 메모에 있어야 이 구간의 성공입니다.
3-3. 예측해 보기 — 열거 명령 자체는 얼마나 걸릴까
타임어택에서 "열거에 시간이 다 간다"고 느끼기 쉽지만, 명령 실행 자체는 순식간입니다. 리눅스 머신에 쉘을 잡은 직후의 기본 열거 시퀀스를 시간과 함께 실측해 봅시다.
입력 (로컬 WSL 우분투에서 실측):
time (whoami && id && uname -sr && ss -tln && \
cut -d: -f1 /etc/passwd | wc -l && \
find /usr/bin -perm -4000 2>/dev/null | head -5)
출력 (2026-09-09 실측, WSL Ubuntu 24.04 — 값은 여러분의 환경과 다릅니다):
root
uid=0(root) gid=0(root) groups=0(root)
Linux 6.18.33.2-microsoft-standard-WSL2
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:*
LISTEN 0 4096 127.0.0.54:53 0.0.0.0:*
LISTEN 0 4096 127.0.0.1:46295 0.0.0.0:*
LISTEN 0 1000 10.255.255.254:53 0.0.0.0:*
29
/usr/bin/umount
/usr/bin/su
/usr/bin/sudo
/usr/bin/newgrp
/usr/bin/chsh
real 0m0.018s
user 0m0.007s
sys 0m0.006s
읽는 법: 여섯 가지 정보(신분, 커널, 리스닝 포트, 계정 수, SUID 목록)를 모으는 데 0.018초가 걸렸습니다. real이 벽시계 시간입니다.
왜 중요한가: 타임어택에서 시간을 먹는 것은 명령 실행이 아니라 읽고, 판단하고, 헤매는 것입니다. 그러니 ① "자주 쓰는 열거 시퀀스를 한 덩어리로 외워 두고", ② 출력을 파일에 저장해 두 번 읽게 만들고, ③ 판단이 안 서면 그 줄을 표시해 두고 다음으로 넘어가세요. 도구는 빠릅니다 — 여러분의 결정이 시계를 씁니다.
3-4. ②③ 침투와 상승 — 30분 규칙의 실전
침투 구간에서는 후보를 우선순위 순으로 시도합니다. 판단 기준은 Step 129와 같습니다 — "알려진 공격 코드가 있고, 버전이 정확히 맞는 것"부터.
출력 예시 (30분 규칙이 작동하는 메모):
0:35 후보1 Apache 2.4.18 — searchsploit 해당 없음. 접음.
0:50 후보2 SSH — 브루트포스? 시간 먹음. 보류.
1:10 후보3 80번 웹사이트 — 숨은 디렉터리 탐색 중 백업 파일 발견
1:40 백업 파일 속 설정에서 DB 비밀번호 → SSH로 재사용 성공
1:41 whoami → www-data ... 첫 쉘 확보 (계획 대비 50분 여유)
읽는 법: 각 시도에 시각이 붙어 있습니다. "1:10에 발견, 1:41에 쉘"처럼 시각이 있어야 회고 때 "어디서 시간을 썼는가"를 재구성할 수 있습니다.
3-5. ④ 기록(1시간) — 남은 시간의 사용법
예비 시간이 남았다면 기록에 씁니다. Step 128의 보고서 구조를 축소해, 침투 경로 하나당 "원인 → 방법 → 획득 권한 → 방어" 네 칸을 채웁니다. 스크린샷에는 반드시 whoami가 포함되도록 — 이 습관은 이제 몸에 붙어 있을 겁니다.
3-6. 종료 후 — 회고 작성
6시간이 지나면(또는 root를 얻으면) 시계를 멈추고 회고를 씁니다. 뼈대:
# 타임어택 회고 — [머신 이름] (날짜)
- 최종 도달: (root / user 쉘 / 정찰까지 / ...)
- 구간별 계획 대비: 정찰 +10분, 침투 -50분, 상승 +40분 ...
- 시간을 가장 많이 쓴 지점 TOP 3와 그때 무엇을 했는지
- 다음 타임어택에서 다르게 할 것 3가지
왜: "다음에 다르게 할 것"이 세 가지 이상 나오지 않으면 회고가 얕은 것입니다. 6시간의 시행착오에서 배울 것은 반드시 세 가지 이상 있습니다.
4. 미션과 연습문제
미션 — 6시간 타임어택 완주와 회고
- Step 129와 다른 Easy VM 1대를 랩에 합류시키고,
타임어택-로그.md에 배분표를 적습니다. - 타이머를 맞추고 6시간 타임어택을 수행합니다 — 구간 종료마다 시각과 결과를 기록합니다.
- 30분 규칙을 최소 한 번은 의식적으로 적용합니다(경로 포기와 전환을 로그에 명시).
- 3-3의 빠른 열거 시퀀스를 여러분의 쉘 열거용으로 손질해 메모에 보관합니다.
- 종료 후
타임어택-회고.md를 작성합니다 — 시간 사용 TOP 3와 개선 3가지 포함. - 결과가 root가 아니어도 됩니다 — "최대 진척 + 정확한 시간 내역"이 미션의 완성형입니다.
연습문제
문제 1. 시간 배분표에서 "종료 신호"를 미리 정해 두는 이유는 무엇인가요? "될 때까지 한다"와 비교해 설명해 보세요.
문제 2. 3-3 실측에서 여섯 가지 정보를 모으는 데 0.018초가 걸렸습니다. 그런데도 타임어택에서 열거에 수십 분이 소모되는 이유는 무엇인가요?
문제 3. 30분 규칙을 적용해 경로를 포기할 때, 왜 "표시(메모)를 남기고" 넘어가야 하나요?
문제 4. 회고에서 "침투 구간 1시간 초과"라는 결과와 "익스플로잇을 순서 없이 시도했다"는 원인을 구분하는 이유는 무엇인가요?
5. 모범 답안과 완료 기준
미션 모범 답안
타임어택도 정답이 하나가 아닙니다. 검증 기준으로 확인하세요.
- 배분표 존재: 시작 전에 적힌 표가 있고, 각 구간에 "실제 종료" 시각이 채워져 있는가.
- 30분 규칙의 흔적: 로그에 "경로 포기 → 전환"이 최소 1회 기록돼 있는가.
- 저장된 증거: 도달한 최고 권한의
whoami/id출력이 파일로 남아 있는가. - 회고의 깊이: "다음에 다르게 할 것"이 행동 단위인가 — "더 빨리 한다"(나쁨)가 아니라 "익스플로잇 후보를 버전 일치 순으로 정렬한다"(좋음) 수준인가.
root에 못 가도 1~4가 충실하면 이번 점검은 합격입니다. 타임어택의 목적은 승리가 아니라 자기 시간 사용의 가시화입니다.
연습문제 해답
문제 1 해답. "될 때까지"는 종료 조건이 외부(성공)에 있어서, 실패하는 경로에서 무한정 시간을 태우게 됩니다. 종료 신호를 시각으로 미리 정해 두면 결정권이 계획에 있어서, 실패한 경로를 잘라내고 남은 경로에 시간을 재배분할 수 있습니다. 제한 시간 훈련의 본질은 빨리 하는 것이 아니라 잘라내는 것입니다.
문제 2 해답. 시간을 쓰는 것은 명령 실행이 아니라 출력 해석과 판단이기 때문입니다 — 어느 포트가 수상한지, 어느 버전이 뚫리는지, 막혔을 때 무엇으로 갈아탈지. 그래서 타임어택의 열거 최적화는 "타이핑 속도"가 아니라 "출력을 저장해 두 번 읽기"와 "판단 기준(버전 일치 우선)을 미리 정하기"로 이루어집니다.
문제 3 해답. 포기한 경로가 실은 정답이었을 수 있기 때문입니다 — 30분 뒤에 다른 정보(예: 새로 발견한 버전 문자열)가 그 경로를 다시 유력하게 만들 수 있습니다. 메모 없이 버리면 그 30분의 시행착오가 통째로 사라지지만, 표시해 두면 재방문 비용이 거의 0입니다. 타임어택에서 메모는 되돌아갈 좌표입니다.
문제 4 해답. 결과는 바꿀 수 없고 원인만 바꿀 수 있기 때문입니다. "1시간 초과"는 증상이고 "순서 없는 시도"가 처방 가능한 행동입니다. 회고가 결과에서 멈추면 다음 배분표는 "침투 3시간"처럼 숫자만 커지고, 원인까지 내려가야 "후보 정렬 기준을 둔다"처럼 같은 시간 안에 나아지는 방법이 생깁니다.
완료 기준 체크리스트
- [ ] 6시간 배분표(구간·종료 신호 포함)를 시작 전에 만들 수 있다
- [ ] 구간별 실제 종료 시각과 결과를 기록하며 진행할 수 있다
- [ ] 30분 규칙으로 경로를 포기하고 전환한 기록이 있다
- [ ] 빠른 열거 시퀀스를 한 덩어리 명령으로 실행할 수 있다
- [ ] 도달한 최고 권한의 증거 출력을 저장했다
- [ ] 시간 사용 TOP 3와 개선 3가지가 담긴 회고를 완성했다
6. 흔한 실수와 해결
벽 1. 정찰 구간 30분이 순식간에 지나가요
증상: 전수 스캔(-p-)이 끝나기를 기다리다가 구간이 끝납니다.
원인: 느린 스캔을 기다리는 일정으로 짰습니다. -p-는 포트가 많을수록 몇 분씩 걸립니다.
해결: 3-2처럼 빠른 스캔(기본 상위 포트)을 먼저 보고, 전수 스캔은 백그라운드로 돌리세요. 정찰 구간의 종료 조건은 "전수 스캔 완료"가 아니라 "취약점 후보 목록 완성"입니다.
벽 2. 한 경로에 빠져서 시계를 봤더니 2시간이 지났어요
증상: "조금만 더"가 반복되다 침투 구간이 통째로 사라집니다.
원인: 30분 규칙의 알림 장치가 없었습니다. 몰입 중에는 시계가 보이지 않습니다 — 정상입니다.
해결: 30분짜리 타이머를 물리적으로 맞춰 두세요(휴대폰 알림). 알림이 울리면 무조건 손을 떼고 "이 경로, 유일한가?"를 묻는 것 — 규칙은 의지가 아니라 장치로 지킵니다.
벽 3. VM이 느려서 명령이 버벅여요
증상 (출력 예시): nmap이나 쉘 반응이 초 단위로 느립니다.
원인: VM에 할당된 메모리/CPU가 부족하거나, 호스트에 다른 VM이 동시에 떠 있습니다.
해결: 사용하지 않는 VM을 끄고, 타깃·Kali 각각의 할당량을 확인하세요. 타임어택에서 환경 지연은 실력이 아니라 장비 변수입니다 — 시작 전 10분에 환경 점검(팬아웃 스캔 1회, 쉘 반응 확인)을 하면 도중의 혼란을 줄일 수 있습니다.
벽 4. time 명령 결과에서 어느 숫자를 봐야 하는지 모르겠어요
증상 (2026-09-09 실측 형태):
real 0m0.018s
user 0m0.007s
sys 0m0.006s
원인: 세 줄이 뜨는 이유를 몰라서 생기는 혼란입니다.
해결: real만 보면 됩니다 — 명령이 시작해서 끝날 때까지의 벽시계 시간. user는 CPU가 내 코드를 실행한 시간, sys는 운영체제(커널) 작업 시간입니다. 타임어택에서 중요한 것은 내가 기다린 시간이니 real입니다.
벽 5. 회고를 쓰려니 뭘 했는지 기억이 안 나요
증상: 6시간이 지나고 나니 구간별 내용이 뭉개집니다.
원인: 도중에 시각 기록을 안 했습니다. 기억은 침투의 절정 장면만 남기고 나머지를 지웁니다.
해결: 다음 타임어택부터는 구간이 끝날 때마다 30초를 써서 로그 표를 채우세요. 그 30초 × 4번이 회고 1시간의 전체 재료입니다. 기록은 종료 후 작업이 아니라 진행 중 작업입니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 시간 배분(time boxing) | 구간별 시간과 종료 신호를 미리 정하는 계획 |
| 30분 규칙 | 진전 없는 경로를 30분에 자르고 전환하는 장치 |
| 종료 신호 | "될 때까지"를 대체하는 객관적 구간 종료 조건 |
| 회고 | 결과가 아니라 원인까지 파고드는 사후 분석 |
| 최대 진척 | root가 아니어도 되는 타임어택의 성적 기준 |
오늘의 명령
| 명령 | 하는 일 |
|---|---|
time (명령 묶음) |
명령 묶음의 실제 소요 시간 측정 (real 확인) |
nmap -sV <IP> |
빠른 서비스·버전 스캔 (정찰 구간의 첫 타자) |
nmap -p- <IP> -oN full.txt |
전수 스캔 — 백그라운드로 |
whoami && id && uname -sr && ss -tln |
쉘 직후 기본 열거 한 덩어리 |
find /usr/bin -perm -4000 2>/dev/null |
SUID 파일 찾기 (권한 상승 실마리) |
명령어보다 중요한 감각
타임어택이 가르치는 것은 속도가 아니라 절제입니다 — 잘되는 경로를 밀어붙이는 것은 누구나 하고, 안 되는 경로를 제때 버리는 것은 아무나 못 합니다. 시계를 켜는 순간, "뚫는 사람"에서 "시간을 배분하는 사람"으로 한 단계 올라섭니다.
그리고 이 점검이 끝나면 Level 2의 침투 파트는 막을 내립니다. 여러분은 이제 처음 보는 머신을, 정해진 시간 안에, 스스로의 루틴으로 상대할 수 있습니다 — 그리고 무엇보다, 어디서 시간을 쓰는 사람인지를 알게 됐습니다.
전부 체크되면 Step 130 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.