Step 129. VulnHub 취약 VM 추가 공략 — 처음 보는 타깃에 루틴을 통째로 적용한다

Step 129. VulnHub 취약 VM 추가 공략 — 처음 보는 타깃에 루틴을 통째로 적용한다

Level 2 — 보안 입문과 공격 스킬 기초 | 난이도 ★★★★☆ | 예상 소요 시간 4시간

전제: Step 111~128 — Kali 설치, MS2 정찰(Step 113), 쉘 획득(Step 117~121), 패스워드 공격(Step 122~124), 권한 상승(Step 125~126), 후속 침투(Step 127), 보고서(Step 128)까지의 여정을 마쳤다.

  • 준비물: VirtualBox, Kali VM, VulnHub(vulnhub.com)에서 내려받은 입문용 취약 VM 1대, Host-only 네트워크. 이 챕터의 랩 화면들은 출력 예시로 표시했습니다 — 여러분의 랩에서 직접 재현하는 것이 미션입니다.
  • ⚠️ 이 챕터의 실습은 내 랩·합법 플랫폼 전용입니다. 허가 없는 시스템에 적용하면 범죄입니다.

MS2(Metasploitable2)는 "답을 알고 푸는 문제집"이었습니다 — 어디가 뚫리는지 이미 알고 있었으니까요. VulnHub의 머신들은 다릅니다. 난이도 표시만 있고 답은 없는 모의고사입니다. 오늘의 질문은 하나입니다 — 지금까지 익힌 순서(정찰 → 열거 → 침투 → 권한 상승 → 기록)가 처음 보는 타깃에서도 통하는가? 통한다면 여러분의 기법은 특정 머신이 아니라 여러분의 것이 됩니다.


1. 학습 목표

이 챕터를 끝내면 다음을 할 수 있습니다:

  • VulnHub에서 입문용 머신을 골라 Host-only 랩에 합류시킬 수 있다
  • DHCP로 켜진 낯선 VM의 IP를 핑 스캔으로 찾아낼 수 있다
  • 정찰 → 열거 → 침투 → 권한 상승의 루틴을 가이드 없이 새 타깃에 적용한다
  • 막혔을 때 "모르는 서비스인가, 아는데 다른 버전인가"로 원인을 분류한다
  • 공략 전 과정을 재현 가능한 기록으로 남긴다

2. 배경 지식 — 오늘의 도구와 개념

오늘의 도구 한눈에 보기

구분 내용
언어·환경 Kali Linux + VirtualBox Host-only 네트워크, VulnHub 취약 VM
오늘의 명령 sudo nmap -sn 대역(IP 탐색), nmap -p- -sV(전수 정찰), searchsploit(공격 코드 검색) — 전부 Step 113~127에서 배운 것들
필요한 개념 기법의 일반화, 루틴(routine), 플래그(user/root), 막힘의 분류
오늘의 산출물 새 VM 1대의 공략 기록(vm-공략기록.md) — 가이드 없이 root 도달

2-1. VulnHub — 답 없는 문제집

VulnHub은 "일부러 취약하게 만든 가상 머신"을 올려 두는 공개 저장소입니다. 각 머신에는 대략의 난이도와 짧은 힌트만 있고, 정답지는 없습니다. 입문용으로 자주 권장되는 것은 Kioptrix Level 1 계열처럼 오래되고 단순한 머신입니다 — MS2보다 서비스 수가 적어 루틴 연습에 좋습니다.

머신마다 목표가 플래그(flag)로 표시돼 있습니다. 보통 일반 사용자 쉘에서 읽는 user.txt와 root에서 읽는 root.txt 두 개입니다. 오늘의 완주 조건은 이 플래그들을 스스로의 손으로 찾아내는 것입니다.

2-2. 루틴의 일반화 — 순서는 그대로, 타깃만 바뀐다

Step 113부터 우리가 반복해 온 다섯 박자를 다시 펼쳐 봅니다.

단계 하는 일 배운 곳 핵심 명령·도구
정찰 열린 포트와 서비스 전수 조사 Step 113 nmap -p- -sV
열거 서비스·버전별 공격 표면 조사 Step 113~114 배너, searchsploit
침투 취약점 하나로 첫 쉘 Step 117~121 Metasploit 또는 수동 익스플로잇
권한 상승 낮은 쉘에서 root로 Step 125~126 열거 스크립트, SUID·커널 점검
기록 재현 가능한 문서로 남기기 Step 127~128 출력 저장, 체크리스트

무서운 사실 하나 — 이 표에서 바뀌는 것은 "타깃 IP"뿐입니다. 머신이 달라져도 순서와 도구는 그대로입니다. 이것이 "기법이 일반화됐다"는 말의 뜻이고, 오늘 증명할 것입니다.

2-3. 막혔을 때의 분석 프레임

새 타깃에서는 반드시 한 번은 막힙니다. 그때 패닉 대신 묻는 질문이 있습니다.

"내가 모르는 서비스인가, 아는데 버전이 다른가?"

  • 모르는 서비스라면 → 공부가 답입니다. 포트 번호와 배너로 정체를 알아내고, 그 서비스가 원래 무엇을 하는지 30분 조사합니다.
  • 아는데 다른 버전이라면 → 열거가 답입니다. 같은 서비스라도 버전별로 알려진 취약점이 다르니, searchsploit에 정확한 버전 문자열을 넣어 다시 검색합니다.

막힘은 실력 부족의 신호가 아니라 정보 부족의 신호입니다. 그리고 정보는 거의 항상 이미 받은 스캔 결과 안에 있습니다.


3. 따라 하기

아래의 VM 화면들은 전형적인 진행 모습을 보여 주는 출력 예시입니다. 여러분의 머신·버전·IP는 다릅니다 — 예시를 베끼지 말고, 각 단계를 여러분의 출력으로 채우는 것이 오늘의 실습입니다.

3-1. 머신 선정과 랩 합류

VulnHub에서 입문용(Easy) 머신을 하나 고릅니다. 선정 기준 세 가지:

  1. 난이도가 Easy/Beginner로 표시된 것
  2. 다운로드 수가 많아 자료(힌트)가 있는 것
  3. 파일 형식이 VirtualBox와 맞는 것(.ova 또는 .vmdk)

내려받은 파일을 VirtualBox에 등록하고, 네트워크 어댑터를 Host-only로 맞춥니다 — Kali VM과 같은 어댑터여야 서로 보입니다. Step 112에서 MS2를 올릴 때 했던 바로 그 설정입니다.

3-2. IP 찾기 — "켰는데 주소를 모른다"

VulnHub 머신은 대부분 DHCP로 IP를 받습니다. 로그인 화면만 덩그러니 뜨고 주소는 안 알려 주죠. 그래서 첫 명령은 공격이 아니라 탐색입니다.

입력 (Kali에서):

sudo nmap -sn 192.168.56.0/24

출력 예시:

Nmap scan report for 192.168.56.1
Host is up (0.00010s latency).
Nmap scan report for 192.168.56.100
Host is up (0.0012s latency).
Nmap scan report for 192.168.56.103
Host is up (0.0035s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.87 seconds

읽는 법: -sn은 포트 스캔 없이 "살아 있는 호스트"만 찾는 핑 스캔입니다. 192.168.56.1은 Host-only 어댑터(호스트), .100은 보통 DHCP 서버 — 그럼 남은 .103이 우리의 타깃 후보입니다. Kali 자신의 IP를 ip addr로 확인해 제외하면 확실해집니다.

: 모든 침투는 주소를 아는 것에서 시작합니다. "타깃을 먼저 찾는다"는 이 잡일이 실무 정찰의 첫 5분입니다.

3-3. 전수 정찰 — Step 113의 그대로

IP를 찾았으면 루틴의 첫 박자입니다. 여기서 아끼면 뒤에서 두 배로 막힙니다.

입력:

nmap -p- -sV 192.168.56.103 -oN scan_full.txt

출력 예시 (입문용 머신의 전형):

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 4.7p1 (protocol 2.0)
80/tcp open  http    Apache httpd 2.2.8
139/tcp open netbios-ssn Samba smbd 3.X
445/tcp open netbios-ssn Samba smbd 3.X

읽는 법: 포트는 번호, 서비스는 직업, 버전은 약점의 좌표입니다. "Apache 2.2.8"처럼 버전까지 나온 줄이 곧 조사 대상 목록입니다. -oN scan_full.txt로 반드시 파일에 남기세요 — Step 127의 교훈, "저장되지 않은 발견은 없던 발견"입니다.

3-4. 열거 — 각 서비스에 질문 던지기

받은 표의 각 줄에 같은 질문을 던집니다 — "이 버전에 알려진 구멍이 있나?"

입력:

searchsploit samba 3
searchsploit openssh 4

출력 예시:

------------------------------------------- ---------------------------------
 Exploit Title                             |  Path
------------------------------------------- ---------------------------------
Samba 3.0.20 < 3.0.25rc3 - 'Username' map  | unix/remote/16320.rb
------------------------------------------- ---------------------------------

읽는 법: searchsploit은 Kali 안의 공격 코드 사전(exploit-db의 로컬 사본)입니다. 서비스명 + 버전으로 검색하면 후보가 나옵니다. 후보가 없으면 그 경로는 일단 접고 다음 서비스로 — Step 130에서 배울 시간 관리의 씨앗이 여기 있습니다.

: MS2에서는 "어디가 뚫리는지"를 미리 알고 있었지만, 오늘은 이 검색 결과가 유일한 나침반입니다. 열거가 깊을수록 나침반이 정확해집니다.

3-5. 침투와 플래그 — 루틴의 마지막 박자

후보 익스플로잇을 골랐으면 Step 118~121과 같은 방식으로 시도합니다 — Metasploit에 올라타거나(msfconsolesearchuseset RHOSTS), 수동으로 코드를 실행하거나. 첫 쉘이 잡히면 곧바로 Step 125~126의 권한 상승 열거로 넘어갑니다.

출력 예시 (완주의 순간):

$ whoami
www-data
$ sudo -l
User www-data may run the following commands on this host:
    (ALL) NOPASSWD: ALL
$ sudo su
# whoami
root
# cat /root/root.txt
flag{c0ngrats_y0u_d1d_1t_y0urs3lf}

읽는 법: www-data(웹 서버 권한)로 들어와 root까지 오른 전형적인 상승 경로입니다. 플래그 파일은 머신마다 위치가 다릅니다 — find / -name "*.txt" 2>/dev/null 계열로 찾거나, 홈 디렉터리와 /root를 우선 확인하세요.

3-6. 기록 — 오늘의 진짜 산출물

쉘을 얻는 순간이 절정처럼 느껴지지만, 오늘의 산출물은 기록입니다. Step 128의 보고서를 축소한 형태로, 공략하는 동안 틈틈이 채웁니다.

# [머신 이름] 공략 기록
- 날짜 / 소요 시간 / 최종 도달: (user? root?)
- 타깃 IP 찾는 법:
- 정찰 결과 요약(열린 포트 표):
- 침투 경로: 취약 원인 → 공격 방법(명령) → 획득 권한
- 권한 상승: 무엇이 허점이었나
- 막혔던 지점과 돌파 방법:
- 다음에 다르게 할 것:

: 이 템플릿의 마지막 두 항목("막혔던 지점", "다음에 다르게 할 것")이 기록을 단순 로그와 구분합니다. 실력은 뚫을 때가 아니라 복기할 때 자랍니다.


4. 미션과 연습문제

미션 — 가이드 없이 새 VM 1대 root

  1. Step 112에서 만든 랩(Kali + Host-only 네트워크)에 VulnHub 입문용 VM 1대를 새로 합류시킵니다. MS2와 다른 머신이어야 합니다.
  2. 핑 스캔으로 타깃 IP를 스스로 찾아냅니다.
  3. 루틴을 처음부터 끝까지 적용합니다 — 전수 스캔, 서비스·버전 열거, searchsploit, 침투, 권한 상승.
  4. user 플래그와 root 플래그(있으면 둘 다)를 획득하고, 증거 출력(whoami 포함)을 저장합니다.
  5. 3-6의 템플릿으로 vm-공략기록.md를 완성합니다 — 특히 "막혔던 지점과 돌파 방법"을 비우지 않습니다.
  6. 공략 중 참고한 자료가 있다면 출처를 기록 끝에 적습니다 — 혼자 힘의 범위를 아는 것도 실력입니다.

연습문제

문제 1. nmap -sn 192.168.56.0/24에서 -sn은 무엇을 생략한 스캔이며, 왜 침투의 첫 명령으로 적합한가요?

문제 2. 스캔 결과에 "Apache httpd 2.2.8"이 보였습니다. 이 줄에서 공격자가 얻는 가장 중요한 정보는 무엇이고, 다음에 칠 명령은 무엇인가요?

문제 3. "내가 모르는 서비스인가, 아는데 버전이 다른가" — 이 질문이 막혔을 때 왜 효과적인지, 각 경우의 돌파 방향과 함께 설명해 보세요.

문제 4. MS2 공략과 VulnHub 머신 공략의 차이를 "문제집과 모의고사" 비유가 아니라, 사전 정보의 유무라는 관점으로 설명해 보세요.


5. 모범 답안과 완료 기준

미션 모범 답안

이 미션은 정답이 하나가 아닙니다 — 머신마다 침투 경로가 다릅니다. 그래서 정답 대신 검증 기준을 드립니다. 여러분의 공략이 다음을 모두 만족하면 성공입니다.

  1. 자력 탐색: nmap -sn 출력과 함께 "이 IP를 타깃으로 확정한 근거"(Kali 자신의 IP 제외 등)가 기록에 있는가.
  2. 루틴 완주: 정찰(-p- -sV) → 열거(searchsploit 등) → 침투 → 권한 상승의 각 단계 산출물이 시간 순으로 저장돼 있는가.
  3. 증거: 최종 whoamiroot이고 플래그 내용이 출력으로 남아 있는가.
  4. 복기: "막혔던 지점" 항목이 구체적인가 — "안 됐다"가 아니라 "Samba 경로에 40분 썼다가 Apache 쪽 웹 취약점으로 전환했다" 수준인가.

막혀서 진도가 안 나가면 — 그것도 결과입니다. 도달한 곳까지의 기록과, 막힌 지점의 분석(2-3 프레임 적용)을 남기세요. 완주 못 한 기록이라도 2-3의 분류가 붙으면 다음 도전의 출발선이 됩니다.

연습문제 해답

문제 1 해답. -sn포트 스캔을 생략하고 호스트 생존 여부만 확인하는 스캔입니다(구 버전의 -sP). 타깃의 IP조차 모르는 상황에서는 65,535개 포트를 두드리기 전에 "어느 주소가 살아 있는가"부터 좁혀야 하므로, 빠르고 조용한 핑 스캔이 첫 명령으로 적합합니다.

문제 2 해답. 가장 중요한 정보는 정확한 버전 문자열(2.2.8)입니다 — 취약점은 서비스 단위가 아니라 버전 단위로 존재하니까요. 다음 명령은 searchsploit apache 2.2 같은 검색으로, 이 버전에 알려진 공격 코드가 있는지 사전을 뒤지는 것입니다.

문제 3 해답. 막힘의 원인을 둘로 나눠 각각 다른 처방을 내리기 때문입니다. 모르는 서비스면 지식을 채우는 것(문서·힌트 조사)이 답이고, 아는 서비스의 다른 버전이면 정보를 깊게 파는 것(정확한 버전으로 재검색, 배너 재확인)이 답입니다. 뭉뚱그려 "안 된다"고 하면 처방이 없지만, 분류하면 다음 행동이 정해집니다.

문제 4 해답. MS2는 "어떤 취약점이 심어져 있는지"를 이미 알고 접근하는 타깃입니다 — 정찰은 확인 작업이었습니다. VulnHub 머신은 사전 정보가 없어 정찰과 열거가 곧 전부입니다 — 어디가 뚫리는지는 오직 내가 받은 출력만이 알려 줍니다. 같은 명령을 쳐도, 출력을 읽는 무게가 다릅니다.

완료 기준 체크리스트

  • [ ] VulnHub 입문용 VM을 Host-only 랩에 합류시킬 수 있다
  • [ ] 핑 스캔(-sn)으로 낯선 VM의 IP를 찾아낼 수 있다
  • [ ] -p- -sV 전수 스캔 결과를 파일로 저장하고 읽을 수 있다
  • [ ] 서비스·버전별로 searchsploit 검색을 수행할 수 있다
  • [ ] 막혔을 때 "모르는 서비스/다른 버전"으로 원인을 분류할 수 있다
  • [ ] user/root 플래그를 증거 출력과 함께 획득했다
  • [ ] vm-공략기록.md를 "막혔던 지점"까지 채워 완성했다

6. 흔한 실수와 해결

벽 1. VM이 켜지는데 화면이 까맣게만 나와요

증상: 전원은 들어왔는데 검은 화면에서 멈춥니다.

원인: 머신이 VirtualBox가 아닌 다른 가상화 형식(VMware 전용 등)으로 배포된 경우가 흔합니다. 커널 패닉 문구가 함께라면 더 확실합니다.

해결: VulnHub 페이지의 설명(Description)을 다시 읽으세요 — 대상 하이퍼바이저가 적혀 있습니다. VirtualBox용 재포장본이나 다른 머신을 고르는 것이 가장 빠릅니다.

벽 2. 핑 스캔을 해도 타깃이 안 보여요

증상 (출력 예시): Nmap done: 256 IP addresses (2 hosts up) — 기대한 머신이 없습니다.

원인: 세 가지를 순서대로 의심합니다 — ① VM의 네트워크 어댑터가 Host-only가 아님(NAT 등), ② Kali와 타깃의 Host-only 어댑터가 서로 다른 것(vboxnet0 vs vboxnet1), ③ 스캔 대역이 실제 대역과 다름.

해결: Kali에서 ip addr로 내 대역(예: 192.168.56.x)을 먼저 확인하고, VirtualBox의 각 VM 설정에서 어댑터를 같은 것으로 맞춘 뒤 다시 스캔하세요.

벽 3. 분명 취약하다는데 익스플로잇이 안 먹혀요

증상: walkthrough에는 있는 공격이 내 환경에서는 실패합니다.

원인: 대부분 버전 미세 차이 또는 옵션 오타입니다. 특히 RHOSTS(대상)와 LHOST(내 Kali)를 헷갈린 경우가 많습니다.

해결: 배너/버전을 재확인하고, 익스플로잇의 요구 사항(타깃 아키텍처, 필요 옵션)을 처음부터 다시 읽으세요. 그래도 안 되면 2-3의 프레임으로 — 다른 서비스 경로가 없는지 스캔 결과를 다시 봅니다.

벽 4. searchsploit 검색 결과가 하나도 없어요

증상 (출력 예시): Exploits: No Results.

원인: 검색어가 너무 길거나(버전 전체를 넣음) 짧거나(서비스명만) 합니다. samba 3.0.20처럼 적당한 길이가 잘 맞습니다.

해결: 버전의 앞자리만 붙여 재검색하세요(apache 2.2). 그래도 없으면 그 서비스는 "공개 익스플로잇 없음"이 결과입니다 — 다른 포트로 넘어가는 것이 정답입니다.

벽 5. 쉘을 잡았는데 플래그가 어디 있는지 몰라요

증상: 쉘은 있는데 root.txt가 안 보입니다.

원인: 머신마다 플래그 위치와 파일명이 다릅니다. 심지어 플래그가 없고 "root 도달 자체가 목표"인 머신도 있습니다.

해결: /root, 각 사용자 홈 디렉터리를 우선 보고, 안 나오면 find / -iname "*flag*" -o -iname "root.txt" 2>/dev/null 계열로 찾으세요. 머신 설명에 목표가 적혀 있는지도 확인하세요.


7. 정리

오늘의 개념

개념 한 줄 설명
VulnHub 일부러 취약하게 만든 VM의 공개 저장소 — 답 없는 모의고사
기법의 일반화 같은 루틴이 처음 보는 타깃에도 통하는 상태
플래그(flag) 머신의 목표 증표 — 보통 user.txt와 root.txt
막힘의 분류 "모르는 서비스" vs "아는데 다른 버전" — 처방이 다르다
핑 스캔 포트 스캔 없이 살아 있는 호스트만 찾는 정찰

오늘의 명령

명령 하는 일
sudo nmap -sn 192.168.56.0/24 대역에서 살아 있는 호스트 찾기 (타깃 IP 탐색)
nmap -p- -sV <IP> -oN scan.txt 전 포트 + 버전 정찰, 파일 저장
searchsploit <서비스> <버전> 알려진 공격 코드 사전 검색
ip addr 내 머신의 IP/대역 확인
find / -iname "*flag*" 2>/dev/null 플래그 파일 찾기
whoami / id 현재 권한 확인 — 모든 증거의 첫줄

명령어보다 중요한 감각

오늘 증명한 것은 "새 머신을 뚫었다"가 아니라 "내 루틴이 어디서나 통한다" 입니다. 타깃이 바뀌어도 정찰 → 열거 → 침투 → 상승 → 기록의 다섯 박자는 바뀌지 않고, 막혔을 때의 처방(정보로 돌아가기)도 바뀌지 않습니다.

그리고 하나 더 — walkthrough(남의 풀이)를 보는 것은 부끄러운 일이 아닙니다. 다만 본 뒤에는 반드시 가이드를 닫고 처음부터 혼자 다시 뚫어 보세요. 손이 기억할 때까지가 여러분의 실력입니다.


전부 체크되면 Step 129 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.