
डीओबफस्केटिंग code.js से रूट तक, CVE-2023-0386
.env फ़ाइल में डेटाबेस क्रेडेंशियल्स पाए जाते हैं और पासवर्ड पुनः उपयोग के कारण हमलावर बॉक्स पर एडमिन उपयोगकर्ता के रूप में लॉगिन कर सकते हैं। सिस्टम कर्नेल पुराना पाया जाता है और रूट शेल प्राप्त करने के लिए CVE-2023-0386 का उपयोग किया जा सकता है।| पोर्ट | सेवा | विवरण |
|---|---|---|
| 22/tcp | ssh | syn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0) |
| 80/tcp | http | syn-ack ttl 63 nginx 2million.htb |
मैंने 2million.htb को अपनी /etc/hots फ़ाइल में जोड़ा
मैंने gobuster का उपयोग करके 2million.htb पर पथ खोज की
एन्यूमरेशन के दौरान, मैंने /invite एंडपॉइंट खोजा

/invite पेज पर नेविगेट करने के बाद

पेज का निरीक्षण करते समय, मैंने देखा कि यह inviteapi.min.js नामक एक Javascript फ़ाइल लोड करता है जिसमें ऑबफस्केटेड कोड था:
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}',24,24,'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api/v1|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'),0,{}))
मैंने de4js का उपयोग करके कोड डीऑबफस्केट किया, जिससे निम्नलिखित पठनीय JavaScript प्राप्त हुई:

function verifyInviteCode(code) {
var formData = {
"code": code
};
$.ajax({
type: "POST",
dataType: "json",
data: formData,
url: '/api/v1/invite/verify',
success: function (response) {
console.log(response)
},
error: function (response) {
console.log(response)
}
})
}
function makeInviteCode() {
$.ajax({
type: "POST",
dataType: "json",
url: '/api/v1/invite/how/to/generate',
success: function (response) {
console.log(response)
},
error: function (response) {
console.log(response)
}
})
}
makeInviteCode() : एक नया इनवाइट कोड जनरेट करता है
verefyInviteCode(code) : जाँचता है कि कोड मान्य है या नहीं
और अधिक समझने के लिए, मैंने सत्यापन अनुरोध को इंटरसेप्ट किया:

API JSON प्रतिक्रियाओं का उपयोग करता है
मैं ब्राउज़र कंसोल पर गया और makeInviteCode() निष्पादित किया

मैंने देखा कि डेटा ROT13 सिफर में एन्क्रिप्ट किया गया था

डिक्रिप्शन के बाद, मुझे /api/v1/invite/generate एंडपॉइंट मिला, फिर मैंने इनवाइट कोड जनरेट किया

Base64 डिक्रिप्शन

कुंजी
कुंजी 2F4BN-YI8OH-B0SCL-L8OE6 डाली गई और सफलतापूर्वक स्वीकार कर ली गई

पंजीकरण

होम पेज

एक्सेस पेज
इस साइट पर अधिकांश पेज ठीक से काम नहीं करते, एक्सेस पेज वह जगह है जहाँ चीजें दिलचस्प हो जाती हैं

API एंडपॉइंट्स की एन्यूमरेशन
मैंने connection pack बटन पर क्लिक करके vpn फ़ाइल अपलोड की, और GET अनुरोध को इंटरसेप्ट किया

फिर मैंने उपलब्ध API एंडपॉइंट्स को एन्यूमरेट करने के लिए verbose और silent विकल्पों के साथ एक curl अनुरोध निष्पादित किया


सर्वर ने API एंडपॉइंट्स की JSON सूची के साथ प्रतिक्रिया दी
एडमिन के पास GET, POST और PUT विधियों वाले 3 API एंडपॉइंट थे
जब मैंने एडमिन एंडपॉइंट /api/v1/admin/vpn/generate के साथ एडमिन कुंजी जनरेट करने का प्रयास किया, तो कुंजी जनरेट नहीं हुई क्योंकि मैं एडमिन नहीं था, और पहले एडमिन एंडपॉइंट /api/v1/admin/auth ने इसकी पुष्टि की


Content-Type: application/json और आवश्यक पैरामीटर्स के साथ सही PUT अनुरोध प्रारूप खोजने के बाद, मैंने सफलतापूर्वक अपने उपयोगकर्ता को एडमिनिस्ट्रेटर तक बढ़ा दिया