
प्रतिलिपि-योग्य Docker लैब + CVE-2015-3306 (ProFTPD mod_copy प्री-ऑथ मनमाना फ़ाइल कॉपी) के लिए raw-socket एक्सप्लॉइट — एक पैच-डिफिंग सीखने का अभ्यास
CVE-2015-3306 के लिए एक पूर्णतः पुनरुत्पादनीय लैब और हाथ से लिखा गया एक्सप्लॉइट — भेद्यता अनुसंधान में सीखने के अभ्यास के रूप में निर्मित: पैच डिफिंग, मैनुअल ट्रिगरिंग, और रॉ-सॉकेट एक्सप्लॉइट विकास।
ProFTPD का mod_copy मॉड्यूल SITE CPFR / SITE CPTO
कमांड जोड़ी लागू करता है, जो फ़ाइलों को सर्वर साइड पर कॉपी करता है बिना
डेटा को क्लाइंट को स्थानांतरित किए।
संस्करण 1.3.5 में, किसी भी हैंडलर ने यह जाँच नहीं की कि सत्र प्रमाणित था या नहीं। मॉड्यूल ने केवल यह मान लिया "कोई भी लॉगिन करने से पहले SITE कमांड नहीं भेजेगा" — एक टूटी हुई धारणा जो CVE बन गई। कोई भी अप्रमाणित क्लाइंट सर्वर प्रक्रिया द्वारा पठनीय किसी भी फ़ाइल को कॉपी कर सकता था उसके द्वारा लिखने योग्य किसी भी स्थान पर।
फिक्स (कमिट 212d54271f, 1.3.5a में जारी) दो काम करता है:
copy_cpfr और copy_cpto के शीर्ष पर एक प्रमाणीकरण गेट जोड़ता है:
authenticated = get_param_ptr(cmd->server->conf, "authenticated", FALSE);
if (authenticated == NULL || *authenticated == FALSE) {
pr_response_add_err(R_530, _("Please login with USER and PASS"));
errno = EPERM;
return PR_ERROR(cmd);
}
CopyEngine on|off निर्देश जोड़ता है — पहले मॉड्यूल को उन बिल्ड्स में
अक्षम भी नहीं किया जा सकता था जिनमें यह शामिल था।पूरा यूनिफाइड डिफ patch.diff में है। पैच पढ़ना ही
कौशल है: फिक्स आपको बताता है कि घाव कहाँ था।
Dockerfile आधिकारिक स्रोत टारबॉल से ProFTPD 1.3.5 (अंतिम भेद्य रिलीज़) को
mod_copy सक्षम के साथ संकलित करता है:
docker build -t proftpd-135 .
docker run -d --name lab135 -p 127.0.0.1:2121:21 -p 127.0.0.1:30000-30010:30000-30010 proftpd-135
docker exec lab135 chmod 777 /home/ftp
proftpd.conf में PassivePorts डेटा चैनल को पिन करता है — FTP की दो-चैनल
वास्तुकला (नियंत्रण + गतिशील डेटा) वह कारण है जिससे भोले कंटेनर
मैपिंग विफल होते हैं: नियंत्रण पोर्ट काम करता है, डेटा पोर्ट नहीं।
exploit.py रॉ सॉकेट का उपयोग करता है — कोई ftplib नहीं, क्योंकि लाइब्रेरीज़
प्रोटोकॉल को छिपाती हैं, और प्रोटोकॉल को छिपाना ही वह चीज़ है जिससे हम लड़ रहे हैं:
SITE CPFR /etc/segredo.txt -> 350 (कोई USER/PASS नहीं भेजा गया: यही बग है)
SITE CPTO /home/ftp/... -> 250 (अनियंत्रित कॉपी निष्पादित)
USER ftp / PASS ... -> 230 (लॉगिन केवल एक्सफिल पथ है)
PASV / RETR -> 150 -> 226 (फ़्लैग कैप्चर किया गया)
DELE -> 250 (सफाई: कोई IOC पीछे नहीं छोड़ा गया)
AllowOverwrite, पोर्ट मैपिंग) अंतिम प्रभाव तय करता है।time.time_ns(), time.time() नहीं), और बचे हुए
स्टेट पर कोई निर्भरता नहीं।RETR दो बार उत्तर देता है: 150,
फिर 226। अगले कमांड से पहले दोनों को ड्रेन करें।-d10) आपको ठीक-ठीक बताता है
कि कौन सी जाँच चालू हुई।केवल शिक्षा और अधिकृत लैब उपयोग के लिए। इसे उन सिस्टमों के विरुद्ध चलाना जिनके आप मालिक नहीं हैं या जिनके परीक्षण के लिए आपके पास लिखित अनुमति नहीं है, अवैध है।