Step 251. TryHackMe 입문 경로 + Easy 룸 3개 — 실전 머신의 문을 연다
Level 3 — CTF 실전과 공격 스킬 심화 | 난이도 ★★★☆☆ | 예상 소요 시간 3시간
전제: Step 80(Scapy)·83~84(Wireshark) 수준의 네트워크 기초, nmap 스캔, 리눅스 기본 명령, Step 125~126(권한 상승 입문)을 마쳤다.
- 준비물: 인터넷 연결, TryHackMe 계정(무료 가입), 공격 머신(Kali 또는 WSL+도구, 또는 THM 웹 AttackBox).
- ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다. TryHackMe(
tryhackme.com)은 운영자가 공격 연습용으로 공식 개방한 합법 학습 플랫폼입니다 — 이 플랫폼의 룸 머신 외에는 오늘의 기술을 쓰지 않습니다. - 플랫폼 안내: 이 챕터의 THM 화면과 명령 출력은 전부 화면 예시입니다. 실제 접속과 풀이는 여러분이 직접 합니다.
지금까지의 무대는 내 컴퓨터와 미리 짜인 문제지였습니다. 오늘부터는 실전형 플랫폼으로 옮깁니다. TryHackMe(THM)는 문제와 가이드가 함께 있는 실전 머신 플랫폼입니다 — 룸(room)마다 공격할 가상 머신이 뜨고, 룸의 질문에 답을 제출하며 진행합니다.
Bandit이 "명령어 사다리"였다면, THM의 Easy 룸은 "해킹 한 판 전체"입니다 — 정찰, 침투, 권한 상승까지 한 머신 안에서 끝냅니다. Level 2에서 배운 모든 기법이 실제 표적에서 어떤 순서로 쓰이는지 몸에 새기는 구간의 시작입니다.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- TryHackMe의 룸 구조(태스크·질문·힌트·머신)를 설명할 수 있다
- OpenVPN으로 THM 네트워크에 접속하고 머신 IP를 확인한다
- 정찰 → 침투 → 권한 상승의 기본 루틴을 Easy 룸에 적용한다
- 룸의 질문을 체크리스트로 활용해 진행을 관리한다
- 루틴 기록 템플릿을 만들고 첫 3개 룸의 write-up을 남긴다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | TryHackMe 웹 플랫폼 + 공격 머신(Kali/WSL) + OpenVPN |
| 오늘의 명령 | sudo openvpn 파일.ovpn, nmap -sV -p-, ping 대상IP |
| 필요한 개념 | 룸과 태스크, 가상 머신 대여, VPN 터널, 머신 공략 루틴 |
| 오늘의 산출물 | VPN 연결 환경 + Easy 룸 3개 완료 + 루틴 기록 템플릿 v0 |
2-1. 룸의 구조 — 문제집과 실습장의 결합
THM의 룸은 태스크(task)라는 단원들로 이루어져 있습니다. 각 태스크에는 설명과 질문이 있고, 질문의 답(플래그나 문자열)을 제출해야 다음으로 진행한 표시가 찍힙니다.
룸 (예: RootMe)
├── Task 1: 머신 배포와 접속
├── Task 2: 정찰 — "열린 포트는 몇 개인가?" 같은 질문
├── Task 3: 침투 — "user.txt의 내용은?"
└── Task 4: 권한 상승 — "root.txt의 내용은?"
여기서 중요한 설계 하나: 룸의 질문이 사실상 체크리스트입니다. "웹 서버의 숨겨진 디렉터리는?"이라는 질문이 있다는 것 자체가 "숨겨진 디렉터리를 찾아야 한다"는 힌트입니다. 막히면 질문 목록을 다시 읽으세요 — 질문이 곧 길입니다.
2-2. 머신 대여와 VPN — 왜 IP가 안 잡히는가
룸의 "Start Machine" 버튼을 누르면 여러분 전용 가상 머신이 THM 내부 네트워크에 뜨고, 10.10.x.x 같은 내부 IP를 받습니다 (화면 예시):
Target IP: 10.10.10.10 (만료까지 59분)
이 주소는 인터넷에 없는 내부망 주소입니다. 내 공격 머신이 이 네트워크에 들어가려면 VPN 터널이 필요합니다. THM은 OpenVPN 설정 파일을 제공하고, 이 파일로 접속하면 내 머신이 THM 내부망의 한 노드가 됩니다.
# THM 사이트에서 받은 설정 파일로 접속 (화면 예시)
sudo openvpn 내이름.ovpn
...(중략)...
Initialization Sequence Completed
이 한 줄이 뜨면 터널이 열린 것입니다. 이 터미널은 접속을 유지하는 동안 그대로 두고, 작업은 새 터미널에서 합니다. 접속 확인은 목표 머신에 ping 한 번이면 충분합니다.
ping -c 3 10.10.10.10 # (화면 예시) 응답이 오면 연결 정상
머신은 보통 1시간 뒤 자동 종료되고, 필요하면 연장 버튼이 있습니다. 브라우저에서 머신을 켜는 AttackBox(웹 기반 공격 머신)를 쓰면 VPN 없이도 가능하지만, 유료 구독이 필요하고 반응이 느립니다 — 장기적으로는 내 머신 + OpenVPN 조합을 추천합니다.
2-3. 머신 공략 루틴 — Level 2 복습의 실전 배치
Easy 룸에서 요구되는 순서는 여러분이 이미 아는 것들의 배열입니다.
① 정찰 nmap -sV -p- 대상IP → 열린 포트와 버전
② 조사 웹이면 경로 스캔(gobuster 등), 서비스 버전 검색
③ 가설 "이 버전/이 페이지에 약점이 있지 않을까"
④ 침투 익스플로잇 또는 자격증명 → 쉘 획득
⑤ 열거 쉘 안에서 정보 수집 (Step 125~126)
⑥ 상승 sudo -l, SUID, cron → root
⑦ 증거 user.txt, root.txt 제출
Level 2에서 각 단계를 따로 배웠다면, 이제부터는 이 배열이 한 판 안에서 굴러갑니다. 오늘의 진짜 과제는 3개 룸을 깨는 것이 아니라, 이 순서가 손가락에 새겨지는 것입니다.
2-4. 첫 룸 추천 목록
입문 구간에서 검증된 Easy 룸 세 개입니다. 셋 다 힌트가 친절하고 Level 2 기법만으로 풀립니다.
| 룸 | 주요 연습 | 연결되는 선행 챕터 |
|---|---|---|
| RootMe | 웹 파일 업로드 → 쉘 → SUID 권한 상승 | 웹 기초 + Step 106/125 |
| Simple CTF | FTP·웹 정찰 → 취약 서비스 → sudo 권한 상승 | 정찰 + Step 125 |
| Basic Pentesting | SMB·웹 열거 → 무차별 대입 → 권한 상승 | Step 124 + 열거 |
어떤 룸이든 첫 접근의 순서는 같습니다 — 머신 시작 → IP 확인 → nmap → 질문 목록 읽기.
3. 따라 하기
오늘의 3번 섹션은 환경 구축과 첫 룸의 진행 흐름입니다. THM 접속은 여러분이 직접 하므로, 화면은 전부 예시입니다.
3-1. 가입과 VPN 설정
tryhackme.com에서 무료 계정을 만듭니다.- 사이트의 Access 메뉴에서 본인의 OpenVPN 설정 파일(
사용자명.ovpn)을 내려받습니다. - 공격 머신(Kali 또는 리눅스)에서 접속합니다 (화면 예시):
sudo openvpn 사용자명.ovpn
...
Initialization Sequence Completed
- 새 터미널을 열어 터널 인터페이스를 확인합니다 (화면 예시):
ip addr show tun0
tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> ...
inet 10.8.x.x ...
읽는 법: tun0이라는 가상 인터페이스에 10.8.x.x 대역 주소가 잡혔다면 THM 내부망에 들어온 것입니다. 이 주소가 곧 여러분의 공격 출발점입니다.
3-2. 첫 머신 배포와 연결 확인
입문 경로(Pre Security 또는 Introduction 계열)의 가이드 룸 하나로 환경을 익힌 뒤, 첫 Easy 룸을 엽니다. "Start Machine"을 누르면 IP가 부여됩니다 (화면 예시):
export TARGET=10.10.10.10 # 받은 IP를 변수에 저장해 두면 편합니다
ping -c 3 $TARGET
64 bytes from 10.10.10.10: icmp_seq=1 ttl=63 time=45.2 ms
읽는 법: 응답이 오면 VPN과 머신이 모두 살아 있습니다. 응답이 없으면 ① 머신이 부팅 중(1~2분 대기), ② VPN이 끊김, ③ IP 오타 — 셋 중 하나입니다. 6번 섹션의 벽 1을 참고하세요.
3-3. 정찰 — 모든 판의 첫 장면
입력 (화면 예시):
nmap -sV -p- $TARGET
출력 예시 (RootMe 계열 머신):
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
읽는 법: -p-는 65,535개 포트 전부를 봅니다 — 기본 스캔(1,000개 포트)에서 놓치는 서비스가 실전 머신의 단골 함정입니다. -sV는 배너에서 버전을 읽습니다. 여기서 SSH(22)와 웹(80)이 열렸으니, 조사는 웹부터 — Easy 룸의 침투 통로는 대부분 웹입니다.
3-4. 질문을 체크리스트로 — 룸 진행 관리
룸 페이지의 질문 목록을 펴 두고, 답을 찾을 때마다 제출합니다. 진행 관리의 요령:
- 질문 순서 = 제작자가 의도한 공격 순서라고 보면 됩니다
- "몇 개의 포트가 열려 있나?" → 방금 nmap이 답을 알고 있습니다
- "숨겨진 디렉터리는?" → 경로 스캔(gobuster)을 하라는 지시입니다
- "user.txt는?" → 쉘을 얻은 뒤 홈 폴더를 찾으라는 뜻입니다
답이 틀리면 진행이 안 찍히니, 제출 전에 근거(어느 명령의 어느 출력에서 나온 답인지)를 메모해 두세요. 이 습관이 나중에 write-up이 됩니다.
3-5. 루틴 기록 템플릿 — 내 명령 순서를 문서로
오늘부터 시작하는 장기 자산입니다. thm-routine.md를 만들고, 룸 하나를 끝낼 때마다 실제로 친 명령 순서를 정리합니다.
# 내 머신 공략 루틴 (v0 — Step 251 시작)
### 정찰
- nmap -sV -p- $TARGET
- (웹 발견 시) gobuster dir -u http://$TARGET -w 워드리스트
### 조사
- 배너 버전 → searchsploit / 구글 검색
### 침투
- (룸마다 달라짐 — 발견한 약점 기록)
### 권한 상승
- sudo -l / find / -perm -4000 2>/dev/null / cat /etc/crontab
### 메모
- 이번 룸에서 새로 배운 것: ____
읽는 법: 이 문서의 가치는 반복에서 나옵니다. 3개 룸을 지나면 공통 패턴이 보이고, 그것이 다음 챕터의 "공통 루틴 문서"가 됩니다. 지금은 뼈대만 있으면 충분합니다.
4. 미션과 연습문제
미션 — VPN 환경 구축과 Easy 룸 3개 완료
- TryHackMe 계정을 만들고 OpenVPN으로 내부망에 접속합니다
- 입문 경로의 가이드 룸 하나로 머신 배포와 답안 제출 방식을 익힙니다
- 2-4의 추천 룸(RootMe, Simple CTF, Basic Pentesting) 또는 이에 준하는 Easy 룸 3개를 완료합니다
- 각 룸에서 ①
nmap -sV -p-출력 ② 침투 경로 한 줄 요약 ③ 권한 상승에 쓴 기법을 기록합니다 - 3-5의 루틴 템플릿을 3개 룸의 경험으로 채워 v0를 완성합니다
- 힌트를 본 룸은 표시해 두고, 나중에 힌트 없이 재풀이할 목록을 만듭니다
연습문제
문제 1. THM 룸의 질문이 "사실상 체크리스트"라는 말의 뜻을, 질문 순서와 공격 순서의 관계로 설명해 보세요.
문제 2. 머신 IP(10.10.x.x)에 내 컴퓨터가 직접 접속할 수 없는 이유와, OpenVPN이 이 문제를 어떻게 푸는지 설명해 보세요.
문제 3. nmap에서 -p-를 생략하면 어떤 일이 생길 수 있나요? 실전 머신에서 왜 위험한지 설명해 보세요.
문제 4. 처음에는 힌트를 봐도 된다고 했습니다. 대신 붙는 조건은 무엇이며, 그 조건이 왜 학습에 필요한지 설명해 보세요.
5. 모범 답안과 완료 기준
미션 모범 답안
룸 기록의 형태 예시입니다 (내용은 여러분의 실제 풀이로 채웁니다):
### RootMe (완료일: ____)
- 정찰: nmap -sV -p- → 22(ssh), 80(http) 오픈 (출력 notes/rootme-nmap.txt)
- 침투 경로: 웹 파일 업로드 제한 우회 → 리버스 쉘
- 권한 상승: find / -perm -4000 → 비정상 SUID 바이너리 → GTFOBins
- 배운 것: 업로드 확장자 우회, SUID 탐색
- 힌트 사용: 1회 (권한 상승 단계) — 재풀이 목록에 추가
검증하는 법: ① THM 프로필에서 룸 3개에 완료 표시가 찍혔는가. ② 각 룸 기록에 정찰 출력이 파일로 남아 있는가. ③ 권한 상승 기법이 "운"이 아니라 명령으로 설명되는가. ④ 루틴 문서에 3개 룸 공통의 명령이 정리됐는가. ⑤ 힌트 사용 여부가 정직하게 표시됐는가.
연습문제 해답
문제 1 해답. 룸 제작자는 질문을 공격 진행 순서대로 배치합니다 — 정찰에 관한 질문이 앞에, 플래그 제출이 뒤에 옵니다. 따라서 질문 목록을 읽는 것만으로 "이 룸에서 찾아야 할 것들의 목록"을 얻을 수 있습니다. 질문이 요구하는 것이 곧 다음 행동의 지시이므로, 막혔을 때의 첫 회귀 지점은 명령이 아니라 질문 목록입니다.
문제 2 해답. 10.10.x.x는 사설 IP 대역으로 인터넷에서 라우팅되지 않습니다 — THM 내부 네트워크 안에서만 유효한 주소입니다. OpenVPN은 내 머신과 THM 내부망 사이에 암호화된 터널(tun0)을 만들어, 내 머신을 그 내부망의 한 노드처럼 참여시킵니다. 그래서 터널이 열린 뒤에는 10.10.x.x로의 통신이 가능해집니다.
문제 3 해답. -p-가 없으면 nmap은 흔한 포트 1,000개만 봅니다. 출제자가 SSH를 2222번 같은 비표준 포트에 숨겨 두면 기본 스캔은 그것을 놓치고, 이후의 모든 분석이 "없는 서비스" 위에서 헛돕니다. 실전 머신에서 막힘의 최다 원인이 "열린 포트를 하나 놓침"입니다 — 풀스캔은 선택이 아니라 기본값입니다.
문제 4 해답. 조건은 "힌트 없이 재풀이"입니다. 힌트로 넘어간 룸은 완료 표시는 생기지만 실력은 이전되지 않았습니다 — 그 구간은 아직 힌트의 것입니다. 재풀이 때 혼자 힘으로 같은 지점을 통과해야 비로소 내 것이 됩니다. 그래서 힌트 사용 기록(몇 번, 어느 단계)을 남기는 것이 재풀이 목록의 재료가 됩니다.
완료 기준 체크리스트
- [ ] TryHackMe 계정을 만들었다
- [ ] OpenVPN으로 접속해
tun0과10.8.x.x주소를 확인했다 - [ ] 머신을 배포하고
ping으로 연결을 확인했다 - [ ]
nmap -sV -p-로 풀스캔을 습관화했다 - [ ] 질문 목록을 체크리스트로 활용했다
- [ ] Easy 룸 3개를 완료했다
- [ ] 루틴 기록 템플릿 v0를 작성했다
- [ ] 힌트 사용 룸을 표시하고 재풀이 목록을 만들었다
6. 흔한 실수와 해결
벽 1. 머신 IP로 ping이 안 간다
증상 (출력 예시):
PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data.
--- 10.10.10.10 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss
원인: ① 머신 부팅 중, ② VPN 미접속, ③ IP 오타, ④ 머신 시간 만료.
해결: 순서대로 확인하세요 — 룸 페이지의 IP와 내가 친 IP를 대조 → ip addr show tun0으로 VPN 생사 확인 → 1~2분 기다린 후 재시도 → 그래도 안 되면 머신 재시작. 이 네 단계가 THM 트러블슈팅의 90%입니다.
벽 2. sudo openvpn을 치면 파일이 없다고 나온다
증상 (출력 예시):
Options error: --ca fails with '사용자명.ovpn': No such file or directory
원인: 설정 파일을 내려받은 폴더(윈도우의 Downloads 등)와 명령을 친 폴더가 다릅니다.
해결: 파일을 작업 폴더로 옮기거나, 절대 경로로 지정하세요. 윈도우에서 받았다면 WSL에서는 /mnt/c/Users/이름/Downloads/사용자명.ovpn에 있습니다.
벽 3. openvpn 화면에서 멈춘 것처럼 보인다
증상: Initialization Sequence Completed 후 프롬프트가 돌아오지 않습니다.
원인: 고장이 아닙니다 — VPN은 그 터미널을 잡고 있는 것이 정상 동작입니다.
해결: 그 터미널은 그대로 두고 새 터미널에서 작업하세요. VPN을 끊고 싶으면 그 터미널에서 Ctrl+C입니다.
벽 4. 한 시간째 첫 질문도 못 푼다
증상: nmap까지는 했는데 그다음이 안 떠오릅니다.
원인: 질문을 안 읽고 머신만 보고 있습니다.
해결: 룸의 Task 1부터 질문을 순서대로 읽으세요 — "열린 포트는 몇 개?"에 답하는 과정 자체가 정찰의 가이드입니다. 그래도 막히면 룸의 공식 힌트나 write-up을 보세요 — 대신 4번 미션의 규칙대로 재풀이 목록에 올립니다.
벽 5. 머신 시간이 만료되어 IP가 바뀌었다
증상: 어제 작업하던 IP가 오늘은 응답하지 않습니다.
원인: 머신은 종료되고, 다시 켜면 새 IP를 받습니다.
해결: 머신을 다시 시작하고 새 IP로 $TARGET을 갱신하세요. 그래서 기록은 IP가 아니라 경로("업로드 우회 → 쉘") 중심으로 남겨야 재사용됩니다 — IP는 일회용, 기법은 영구 자산입니다.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| 룸(room) | 태스크와 질문으로 구성된 THM의 실습 단위 |
| 태스크(task) | 룸 안의 단원 — 설명 + 질문 + 답 제출 |
| AttackBox | 브라우저에서 켜는 THM 웹 기반 공격 머신 |
| OpenVPN 터널 | 내 머신을 THM 내부망에 연결하는 통로 (tun0) |
| 머신 공략 루틴 | 정찰 → 조사 → 가설 → 침투 → 열거 → 상승 → 증거 |
| 루틴 문서 | 내 명령 순서의 누적 — 반복할수록 값어치 상승 |
오늘의 명령어·도구
| 명령 | 하는 일 |
|---|---|
sudo openvpn 파일.ovpn |
THM 내부망 접속 |
ip addr show tun0 |
VPN 터널 확인 |
export TARGET=IP |
목표 주소를 변수로 저장 |
nmap -sV -p- $TARGET |
전체 포트 + 버전 스캔 (정찰의 기본) |
ping -c 3 $TARGET |
머신 생사 확인 |
명령어보다 중요한 감각
실전 머신은 문제지와 다릅니다 — 정답의 범위를 알려 주는 사람이 없고, 그래서 정찰이 곧 문제지입니다. -p- 풀스캔을 거르는 순간 그 판은 이미 기울었습니다. 그리고 룸의 질문을 읽는 습관 — 질문은 채점 도구이기 전에, 제작자가 건네는 지도입니다. 마지막으로 오늘 시작한 루틴 문서를 아끼세요. 3개 룸의 기록은 메모지만, 그것이 8개, 13개로 쌓이면 여러분만의 공략 매뉴얼이 됩니다. 실력은 머신을 깬 수가 아니라, 문서에 정착된 루틴의 두께로 자랍니다.
전부 체크되면 Step 251 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.