Step 252. THM Easy 5개 (누적 8) — 루틴을 손가락에 새긴다
Level 3 — CTF 실전과 공격 스킬 심화 | 난이도 ★★★☆☆ | 예상 소요 시간 5시간
전제: Step 251(TryHackMe 입문 — VPN 환경, Easy 룸 3개, 루틴 템플릿 v0)을 마쳤다.
- 준비물: Step 251의 VPN 환경과 루틴 기록 문서, 타이머(스톱워치 앱이면 충분), 룸 기록용 폴더.
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. TryHackMe는 합법 학습 플랫폼입니다 — 이 플랫폼의 룸 머신 외에는 오늘의 기술을 쓰지 않습니다.
- 플랫폼 안내: 이 챕터의 THM 화면과 출력은 전부 화면 예시입니다. 실제 풀이는 여러분이 직접 합니다.
머신 공략은 루틴 게임입니다. nmap → 서비스 조사 → 웹이면 경로 스캔 → 취약점 가설 → 익스플로잇 → 쉘 → 열거 → 권한 상승. 이 순서가 손가락에 새겨지기 전까지는 실력이 아니라 우연이 판을 흔듭니다.
오늘은 Easy 룸 5개를 추가해 누적 8개를 만드는 날입니다. 하지만 완료 기준은 개수가 아닙니다 — 단계별 소요 시간을 재고, 막힘의 회귀 지점을 문서화하고, 8개의 기록에서 공통 루틴을 뽑아 내는 것. 8대를 돌리면 비로소 "어느 단계에서 막혔나"를 스스로 진단할 수 있게 됩니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- 유형이 다른 머신(웹 중심, SMB 중심 등)에 같은 루틴을 적용한다
- 단계별 소요 시간을 측정해 자기 약점 단계를 찾는다
- 막혔을 때의 회귀 지점(재스캔 → 재검색 → 재열거)을 문서화한다
- 정찰 단계를 건너뛰지 않는 습관을
-p-풀스캔으로 고정한다 - 누적 8개의 기록에서 공통 루틴 문서 v1을 작성한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | Step 251의 THM 환경 그대로 (OpenVPN + 공격 머신) |
| 오늘의 명령 | nmap -sV -p-, gobuster dir, enum4linux, searchsploit — 전부 복습 |
| 필요한 개념 | 루틴의 정착, 단계별 시간 측정, 회귀 지점, 유형별 접근법 |
| 오늘의 산출물 | 룸 5개 기록 + 단계별 시간 표 + 공통 루틴 문서 v1 |
2-1. 왜 반복인가 — 루틴이 정착되는 과정
첫 3개 룸에서는 루틴을 "생각하며" 따라 했습니다. 오늘의 목표는 "생각 없이" 손이 먼저 나가는 상태입니다. 이 전환은 의식적인 반복으로만 일어납니다 — 매 판 같은 순서로 시작하고, 매 판 기록하고, 매 판 끝에 비교하는 것.
정착의 신호는 이렇게 나타납니다. 머신 IP를 받자마자 손이 nmap -sV -p-을 치고, 스캔이 도는 동안 질문 목록을 읽고, 결과가 나오면 유형을 판별합니다. 판단에 쓰던 의식이 사라진 만큼, 그 의식이 정말 어려운 문제(침투 가설)를 위해 남습니다.
2-2. 유형별 접근법 — 첫 스캔이 길을 정한다
Easy 룸은 첫 nmap 결과로 유형이 갈립니다. 유형별 첫 행동을 표로 정리해 둡니다.
| 유형 | 스캔에서 보이는 것 | 첫 행동 |
|---|---|---|
| 웹 중심 | 80/443 열림 | 경로 스캔(gobuster) + 페이지 소스 읽기 |
| 파일 공유 | 139/445(SMB) 열림 | enum4linux 또는 smbclient로 공유 목록 |
| FTP 노출 | 21 열림(익명 로그인 가능성) | 익명 접속 시도 → 파일 목록 |
| 비표준 포트 | 3000, 8080 등에 서비스 | 배너·버전 확인 → searchsploit |
| SSH만 | 22만 열림 | 자격증명 단서를 다른 곳에서 찾아야 함 — 재스캔 의심 |
핵심은 "유형이 달라도 루틴은 같다"는 것입니다 — 정찰 결과가 분기를 정할 뿐, 정찰을 건너뛰는 유형은 없습니다.
2-3. 단계별 시간 측정 — 약점의 자가 진단
타이머를 켜고 단계가 바뀔 때마다 시각을 적습니다.
머신: (이름) 시작: 14:00
정찰 완료: 14:07 (7분)
침투(쉘): 14:41 (34분) ← 가장 오래 걸린 구간
권한 상승: 15:02 (21분)
시간은 실력의 X선입니다. 정찰이 30분이면 도구 사용이 미숙한 것이고, 침투가 1시간이면 가설 수립이 약한 것이며, 상승에서 멈추면 열거 습관의 문제입니다. 어디서 시간을 쓰는지 알아야 다음 훈련이 정해집니다 — Step 173의 시간 분석이 머신 공략에도 그대로 적용됩니다.
2-4. 막힘 회귀 지점 — 돌아갈 곳을 미리 정해 둔다
막혔을 때 무작정 새로운 것을 시도하는 것은 난사입니다. 정해진 순서로 돌아가는 것이 회귀입니다.
① 스캔 재확인 — nmap -p-를 다시. 놓친 포트가 없는가
② 버전 재검색 — 배너 버전을 정확히 다시 읽고 searchsploit
③ 경로 재스캔 — 더 큰 워드리스트로 gobuster 재실행
④ 열거 재실행 — 쉘 안이라면 linPEAS 다시, 읽기 전용 재확인
⑤ 질문 재독 — 룸의 질문 목록에서 "아직 답 못 한 것"이 힌트
Easy 룸 막힘의 최다 원인 둘은 "열린 포트를 하나 놓침"과 "경로 스캔 워드리스트가 부족"입니다. 둘 다 돌아가서 넓게 다시가 처방입니다.
3. 따라 하기
3-1. 오늘의 룸 고르기 — 유형을 다양하게
5개를 고르는 기준은 난이도가 아니라 유형의 분산입니다. 2-2의 표에서 서로 다른 행을 골라야 루틴의 모든 분기가 훈련됩니다.
선정 예시 (유형 커버용):
□ 웹 중심 1개 — 경로 스캔과 업로드/인젝션 연습
□ SMB 중심 1개 — enum4linux, 공유 열거 연습
□ FTP 노출 1개 — 익명 접속과 자격증명 발견 연습
□ 비표준 포트 1개 — 배너 분석과 익스플로잇 검색 연습
□ 자유 1개 — 지금까지 가장 약했던 유형으로
읽는 법: 룸 설명의 태그(web, smb, ctf)와 첫 nmap 결과가 유형 판별의 재료입니다. "자유 1개"는 여러분의 약점 복습 슬롯입니다 — Step 251에서 힌트를 본 유형이 있다면 그 유형입니다.
3-2. 시간 측정 루틴 — 판마다 같은 서식
룸마다 기록 파일을 열고 시작합니다 (화면 예시):
mkdir -p thm-log/room04
date '+시작: %H:%M' | tee thm-log/room04/timeline.txt
단계가 바뀔 때마다 같은 파일에 추가합니다 — date '+정찰완료: %H:%M' | tee -a ... 식입니다. 정찰 출력도 같은 폴더에 저장합니다.
nmap -sV -p- $TARGET | tee thm-log/room04/nmap-full.txt
읽는 법: tee는 화면에 보여 주면서 동시에 파일에 남깁니다. Step 250의 작업 일지 습관이 머신 공략으로 이어진 것입니다. 기록이 없는 판은 복기할 수 없는 판입니다.
3-3. 정찰 고정 — 풀스캔을 거르지 않는다
어떤 룸이든 첫 10분의 순서는 고정입니다 (화면 예시):
nmap -sV -p- $TARGET # 1) 전체 포트 + 버전
gobuster dir -u http://$TARGET -w /usr/share/wordlists/dirb/common.txt # 2) 웹이면 경로 스캔
스캔이 도는 동안 할 일이 있습니다 — 룸의 질문 목록을 읽고, 답해야 할 것들을 기록 파일에 적어 두는 것. 기다림을 정찰의 일부로 쓰는 습관입니다.
읽는 법: 2번은 첫 스캔에서 웹 포트가 보일 때만입니다. SMB가 보이면 2번 자리에 enum4linux $TARGET이 들어갑니다 — 유형 분기는 여기서 일어납니다.
3-4. 막힘 실전 — 회귀 지점 적용 연습
막히면 타이머를 멈추지 말고, 회귀 단계와 시각을 기록합니다.
14:41 침투 단계 막힘 — 회귀 ① 스캔 재확인: 변화 없음
14:48 회귀 ③ 경로 재스캔: bigger 리스트로 /panel 발견
14:52 침투 재개
읽는 법: 이 기록이 쌓이면 "나는 어느 회귀 단계에서 주로 뚫리는가"가 보입니다. ①에서 뚫리는 일이 잦으면 첫 스캔이 성급한 것이고, ③에서 뚫리는 일이 잦으면 워드리스트 선택이 약한 것입니다. 막힘의 기록이 곧 훈련 처방전입니다.
3-5. 마무리 — 공통 루틴 문서 v1
누적 8개를 마치면, 8개의 기록을 펴 놓고 모든 판에 등장한 명령만 추립니다.
# 내 머신 공략 루틴 v1 (누적 8개 기반)
### 정찰 (모든 판에서 함)
- nmap -sV -p- $TARGET
- 스캔 대기 중 질문 목록 읽기
### 분기 (유형별)
- 웹: gobuster dir ... common.txt → (부족하면 bigger 리스트)
- SMB: enum4linux $TARGET
- FTP: ftp $TARGET (anonymous 시도)
### 권한 상승 (쉘 획득 후 모든 판에서 함)
- sudo -l → find / -perm -4000 2>/dev/null → cat /etc/crontab
### 내 약점 (시간 측정 결과)
- 가장 오래 걸린 단계: ____ / 대책: ____
읽는 법: v1의 가치는 "내가 실제로 한 것"만 담겼다는 데 있습니다. 남의 블로그 루틴이 아니라 8판의 증거로 만들어진 문서입니다. 이 문서는 다음 챕터(privesc 심화)와 그 뒤의 Medium 룸에서 계속 자랍니다.
4. 미션과 연습문제
미션 — Easy 5개 추가 완료와 공통 루틴 v1
- 3-1의 기준으로 유형이 다른 Easy 룸 5개를 선정합니다
- 룸마다 타임라인 파일(시작·정찰·침투·상승 시각)과 정찰 출력을 남깁니다
- 정찰 단계를 건너뛰지 않습니다 —
-p-풀스캔이 매 판 첫 명령입니다 - 막힐 때마다 2-4의 회귀 지점을 적용하고, 어느 단계에서 뚫렸는지 기록합니다
- 누적 8개 완료 후 단계별 평균 시간을 계산하고, 3-5 형식의 공통 루틴 문서 v1을 작성합니다
연습문제
문제 1. "머신 공략은 루틴 게임"이라는 말의 뜻을, 유형이 달라도 루틴이 유지되는 이유와 함께 설명해 보세요.
문제 2. 단계별 소요 시간을 재는 이유를, "정찰 30분"과 "침투 60분"이 각각 시사하는 바의 예로 설명해 보세요.
문제 3. 막혔을 때 "새로운 시도"가 아니라 "회귀"를 먼저 해야 하는 이유를 설명해 보세요.
문제 4. 2-4 회귀 지점에서 ① 스캔 재확인과 ③ 경로 재스캔이 앞에 오는 이유를, Easy 룸 막힘의 최다 원인과 연결해 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
룸 하나의 기록 형태 예시입니다 (내용은 여러분의 실제 풀이로):
### 룸 04 — (이름) / 유형: SMB 중심
- 시간: 정찰 6분 / 침투 22분 / 상승 14분 (총 42분)
- 정찰: 22, 139, 445 열림 → enum4linux로 사용자 목록 획득
- 침투: 공유에서 자격증명 힌트 → SSH 접속
- 상승: sudo -l에서 (ALL) NOPASSWD: /bin/특정명령 → GTFOBins
- 막힘: 1회 — 회귀 ② 버전 재검색으로 돌파
- 새로 배운 것: smbclient -L //IP/ 로 공유 목록 보기
누적 시간 표의 예시:
| 룸 | 정찰 | 침투 | 상승 | 총계 |
|----|------|------|------|------|
| 01~03 평균 | 12분 | 45분 | 30분 | 87분 |
| 04~08 평균 | 7분 | 28분 | 19분 | 54분 |
검증하는 법: ① THM 프로필에 누적 8개 완료 표시. ② 룸마다 타임라인과 정찰 출력 파일이 있는가. ③ 시간 표에서 후반부 평균이 전반부보다 줄었는가 — 줄었다면 루틴이 정착되는 중입니다 (줄지 않아도 됩니다; 그 경우 약점 단계가 진단된 것으로 기록). ④ 공통 루틴 v1에 "모든 판에서 한 것"과 "유형별 분기"가 구분되어 있는가. ⑤ "내 약점" 칸이 채워져 있는가.
연습문제 해답
문제 1 해답. 머신마다 취약점은 다르지만, 그것을 찾는 절차는 같습니다 — 정찰이 표면을 드러내고, 표면이 유형을 정하고, 유형이 분기를 정합니다. 루틴이 손에 새겨지면 "무엇을 할까"의 판단 비용이 사라지고, 의식은 진짜 어려운 부분(침투 가설)에 집중됩니다. 바둑의 정석과 같습니다 — 정석은 판마다 다르게 펼쳐지지만 두는 순서는 몸이 압니다.
문제 2 해답. 시간은 약점의 위치를 알려 줍니다. 정찰에 30분을 쓴다면 도구 조작 자체가 미숙한 것이니 명령 연습이 처방이고, 침투에 60분을 쓴다면 가설 수립과 검색 능력의 문제이니 그 훈련이 처방입니다. 측정 없는 복습은 "열심히"만 남기고, 측정 있는 복습은 "다음에 할 일"을 남깁니다.
문제 3 해답. 막힘의 대부분은 "몰라서"가 아니라 "놓쳐서" 생깁니다 — 이미 수집한 정보 안에 답이 있는데 지나친 경우입니다. 새 시도는 정보를 늘리지만, 회귀는 이미 있는 정보를 다시 봅니다. 특히 Easy 룸은 필요한 정보가 전부 첫 정찰 반경 안에 있도록 설계되므로, 돌아가는 것이 앞으로 가는 것보다 빠릅니다.
문제 4 해답. Easy 룸 막힘의 최다 원인이 "열린 포트 하나를 놓침"(풀스캔 누락)과 "경로 스캔 리스트 부족"이기 때문입니다. 둘 다 정보 수집 단계의 구멍이지 판단 단계의 오류가 아닙니다. 그래서 회귀 순서는 수집(스캔·경로)을 먼저 재확인하고, 그다음에 판단(버전 검색·가설)을 다시 봅니다 — 재료가 빠진 채 요리법을 바꿔 봤자 소용없기 때문입니다.
완료 기준 체크리스트
- [ ] 유형이 다른 Easy 룸 5개를 선정했다 (웹·SMB·FTP·비표준·자유)
- [ ] 누적 8개 완료 표시를 확인했다
- [ ] 모든 판에서
-p-풀스캔으로 시작했다 - [ ] 룸마다 단계별 시간을 기록했다
- [ ] 막힘마다 회귀 단계와 돌파 지점을 기록했다
- [ ] 단계별 평균 시간 표를 만들었다
- [ ] 공통 루틴 문서 v1을 작성했다
- [ ] "내 약점 단계"와 대책을 문서에 적었다
6. 흔한 실수와 해결
벽 1. -p- 스캔이 너무 오래 걸린다
증상: 풀스캔이 몇 분씩 걸려 답답합니다.
원인: 정상입니다 — 65,535개 포트를 여는 작업이니 수 분이 걸립니다. VPN 구간의 지연이 더해지기도 합니다.
해결: 기다리는 시간을 정찰의 일부로 쓰세요 — 질문 목록 읽기, 기록 파일 준비. 급하면 먼저 빠른 기본 스캔(nmap -sV $TARGET)으로 웹 조사를 시작하고, 풀스캔은 백그라운드 터미널에서 돌려 두는 병행도 가능합니다. 단, 풀스캔 결과를 확인하기 전에 "없다"고 단정하지 마세요.
벽 2. gobuster가 아무것도 못 찾는다
증상 (출력 예시):
===============================================================
Finished
===============================================================
원인: 워드리스트가 작거나, 확장자 옵션이 없거나, 대상이 웹이 아닙니다.
해결: ① 확장자를 붙여 보세요 (-x php,txt,html) — 페이지는 있는데 확장자 없이는 안 치는 경우가 많습니다. ② 더 큰 리스트로 교체하세요 (directory-list-2.3-medium.txt 계열). ③ 첫 스캔에 웹 포트가 없었다면 8080 등 비표준 포트를 다시 확인하세요.
벽 3. 룸마다 같은 곳에서 막힌다
증상: 예를 들어 8개 중 5개가 권한 상승에서 멈췄습니다.
원인: 그 단계의 기법이 약한 것입니다 — 루틴의 문제가 아니라 특정 단계의 훈련 부족입니다.
해결: 그것이 시간 측정의 수확입니다. 다음 챕터가 바로 리눅스 권한 상승 집중 구간입니다 — 막힌 머신들의 "상승에 쓴 기법"을 모아 두세요. 다음 챕터의 패턴 노트와 합치면 약점이 훈련 목록으로 바뀝니다.
벽 4. 기록이 자꾸 밀린다
증상: 판이 끝나고 나니 timeline.txt가 시작 시각만 있습니다.
원인: 몰입하면 기록이 밀립니다 — 정상이지만 방치하면 복기 재료가 사라집니다.
해결: 기록을 단계 전환의 일부로 만드세요 — "쉘을 얻었다 = timeline.txt에 한 줄 적는다"를 한 동작으로 묶습니다. 쉘 프롬프트 옆에 기록용 터미널을 띄워 두는 환경 배치가 가장 확실한 처방입니다.
벽 5. 남의 write-up을 보고 따라 치다가 끝난다
증상: 완료 표시는 찍혔는데, 일주일 뒤 같은 룸을 혼자 못 풉니다.
원인: 완료와 학습을 혼동한 것입니다.
해결: 따라 쳤다면 기록에 [write-up 참고]를 표시하고 재풀이 목록에 올리세요 (Step 251의 규칙). 시간 측정은 재풀이 판에서 해야 진짜 실력이 잡힙니다. 이 구간의 목표는 완료 개수가 아니라 루틴의 정착임을 기억하세요.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 루틴 정착 | 같은 순서의 반복이 판단 비용을 지운다 |
| 유형 분기 | 첫 스캔 결과가 조사 방향을 정한다 |
| 시간 측정 | 단계별 소요 시간 = 약점의 위치 지도 |
| 회귀 지점 | 막히면 정해진 순서로 돌아간다 (재스캔 우선) |
| 공통 루틴 문서 | 모든 판에 등장한 명령만 추린 내 매뉴얼 |
오늘의 명령어·도구
| 명령 | 하는 일 |
|---|---|
nmap -sV -p- $TARGET |
모든 판의 첫 명령 — 전체 포트 + 버전 |
gobuster dir -u URL -w 리스트 -x php,txt,html |
웹 경로 스캔 (확장자 포함) |
enum4linux $TARGET |
SMB 열거 (사용자·공유 목록) |
searchsploit 서비스명 버전 |
배너 버전으로 공개 익스플로잇 검색 |
date '+%H:%M' | tee -a timeline.txt |
단계 전환 시각 기록 |
명령어보다 중요한 감각
8판이 가르쳐 주는 것은 8개의 취약점이 아니라 하나의 루틴입니다. 정찰을 거르는 순간 그 판은 기울고, 막히면 돌아갈 곳을 미리 정해 둔 사람이 빨리 뚫습니다. 그리고 시간 표를 믿으세요 — 재지 않으면 약점은 느낌이고, 재면 위치입니다. 오늘 완성한 루틴 문서 v1은 아직 얇습니다. 하지만 다음 구간(privesc 심화, Medium 머신)을 지나며 두꺼워질 이 문서가, 언젠가 여러분이 "처음 보는 머신" 앞에서도 흔들리지 않게 하는 뼈대입니다.
전부 체크되면 Step 252 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.