
CVE-2023-3460


Subscriber भूमिका के साथ एक सामान्य उपयोगकर्ता पंजीकृत किया और अगर हम mysql में wp_usermeta तालिका पर एक नज़र डालें तो हम देख सकते हैं कि wp_capabilities मान एक serialize सरणी पर सेट है और वहाँ से यह हमारी भूमिका को परिभाषित करता है जो इस मामले में Subscriber है।
wp_capabilities का मान कैसे बदल सकते हैं? हम पंजीकरण करते समय पोस्ट अनुरोध में wp_capabilities को एक पैरामीटर के रूप में पास कर सकते हैं जैसे:
is_metakey_banned नामक एक फ़ंक्शन है और यह फ़ंक्शन कुछ मानों जैसे "cap_key", "wp_capabilities", "wp_user_level", "user_activation_key" आदि की जाँच करके काम करता है... हमें जो चाहिए वह है wp_capabilities लेकिन अगर यह हमारे अनुरोध निकाय में है तो यह वहाँ को हिट करेगा ताकि हम अपनी भूमिका बदलने से रोक सकें।
à, è, ì, ò, ù, À, È, Ì, Ò, Ù, तो अब अगर हम अपने अनुरोध निकाय में इस तरह के वर्णों का उपयोग करते हैं जैसे wp_càpabilities=administrator तो क्या होगा? यह class-user.php में पंक्ति 182 पर ब्रेक पॉइंट को हिट नहीं करता है और हम is_metakey_banned फ़ंक्शन को बायपास कर सकते हैं।


a:1:{s:13:"administrator";b:1;} ठीक है अब इसे आज़माएँ और इसे सीधे हमारे पैरामीटर में पास करें।
wp_capabilities का मान सेट किया लेकिन यह वैसा नहीं है जैसा हमने उम्मीद की थी।
wp_capabilities को देखने पर हम देख सकते हैं कि यह एक serialized सरणी है जो हम चाहते हैं, इसलिए वर्डप्रेस का अपना सीरियलाइज़ेशन है इसलिए हम इसका उपयोग करके अपने मान को एक सरणी के रूप में पास कर सकते हैं और फिर वर्डप्रेस बाकी काम करता है, तो यहाँ हमारा पेलोड इस तरह दिखता है wp_càpabilities[administrator]=1।
wp_capabilities का मान a:1:{s:13:"administrator";s:1:"1";} में बदल गया है जो अब व्यवस्थापक के रूप में लॉगिन कर सकता है।

सुपर एडमिनव्यवस्थापकसंपादकलेखकयोगदानकर्तायोगदानकर्तापृष्ठbreak