
From deobfuscating code.js to root, 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 अनुरोध प्रारूप खोजने के बाद, मैंने सफलतापूर्वक अपने उपयोगकर्ता को एडमिनिस्ट्रेटर तक बढ़ा दिया









मैंने यूज़रनेम फ़ील्ड में ;whoami; इंजेक्ट किया, मेरा संदेह exec() या system() PHP फ़ंक्शनों पर गया, जो केवल-एडमिन सुविधाओं में आम हैं और अक्सर उचित सैनिटाइज़ेशन की कमी होती है
उदाहरण के लिए, संभावित कमजोर कोड कुछ इस प्रकार दिखता था:
$username = $json->username;
exec("/usr/bin/cat /var/www/html/VPN/user/$username.ovpn");
यह एंडपॉइंट POST /api/v1/admin/vpn/generate कमजोर था, और OS कमांड इंजेक्शन सफलतापूर्वक किया गया



चूँकि एप्लिकेशन में ऐसे प्रतिबंध थे जो विशेष वर्णों को रोकते थे, मैंने इस प्रतिबंध को बायपास करने के लिए रिवर्स शेल पेलोड कमांड को base64 में एन्कोड किया

मैंने पेलोड को username पैरामीटर में इंजेक्ट किया, इसे डीकोडिंग और निष्पादन के लिए base64 -d | bash में पाइप किया:


पेलोड सफलतापूर्वक निष्पादित हुआ, और www-data उपयोगकर्ता के रूप में एक रिवर्स शेल लौटाया

मैंने विभिन्न तकनीकों का उपयोग करके www-data उपयोगकर्ता से एडमिन उपयोगकर्ता तक लेटरल मूवमेंट का प्रयास किया
/var/www/html निर्देशिका का निरीक्षण करते समय मुझे डेटाबेस क्रेडेंशियल्स वाली एक .env फ़ाइल मिली:

खोजा गया पासवर्ड SSH और MySQL के माध्यम से प्रमाणित करने के लिए सफलतापूर्वक पुनः उपयोग किया गया
SSH

MySQL

एडमिन उपयोगकर्ता के रूप में प्रारंभिक पहुँच प्राप्त करने के बाद, मैंने संभावित प्रिविलेज एस्केलेशन वैक्टर की पहचान करने के लिए सिस्टम एन्यूमरेशन की
मैंने SUID बाइनरी, क्षमताएँ, sudo अधिकार, cron जॉब्स जैसी सभी प्रमुख प्रिविलेज एस्केलेशन तरकीबें आज़माईं, कुछ भी काम नहीं आया। इसलिए मैंने PATH हाइजैकिंग या संवेदनशील वेरिएबल के लिए पर्यावरण चर की जाँच की, और मुझे /var/mail/admin की ओर इशारा करता हुआ एक MAIL वेरिएबल मिला

मैंने मेल की सामग्री की जाँच की और देखा कि एडमिन को OverlayFS/FUSE भेद्यता के विरुद्ध कर्नेल को पैच करने की चेतावनी दी गई थी

कर्नेल संस्करण

OS संस्करण

कर्नेल को कभी अपडेट नहीं किया गया, जिससे पुष्टि होती है कि एडमिनिस्ट्रेटर ने सुरक्षा चेतावनी को अनदेखा या भुला दिया था
कर्नेल एन्यूमरेशन से संस्करण 5.15.70-051570-generic का पता चला, जो CVE-2023-0386 OverlayFS/FUSE लोकल प्रिविलेज एस्केलेशन के लिए कमजोर है
भेद्यता की पुष्टि के साथ, मैंने एक सार्वजनिक POC एक्सप्लॉइट प्राप्त करने के लिए आगे बढ़ा
मैंने POC को क्लोन किया, इसे टारगेट मशीन पर स्थानांतरित किया
फिर मैंने इसे निष्पादित किया और सफलतापूर्वक रूट एक्सेस प्राप्त की


CVE-2023-0386 - CVE-2023-0386 - OS कमांड इंजेक्शन
अस्वीकरण: यह मशीन एक अधिकृत पेनेट्रेशन टेस्टिंग वातावरण के तहत रूट की गई थी
| चरण | तकनीक | लक्ष्य | परिणाम |
|---|
| 1. रिकॉन | पोर्ट स्कैन | 22 (SSH), 80 (HTTP) | सेवा खोज |
| पथ खोज | /invite | इनवाइट पेज मिला | |
| JS डीऑबफस्केशन | inviteapi.min.js | API एंडपॉइंट्स उजागर हुए | |
| 2. प्रारंभिक पहुँच | इनवाइट जनरेशन | POST /api/v1/invite/generate | मान्य इनवाइट कोड |
| पंजीकरण | POST /api/v1/user/register | मानक उपयोगकर्ता बनाया गया | |
| 3. वेब प्रिविलेज एस्केलेशन | API एन्यूमरेशन | GET /api/v1 | एडमिन एंडपॉइंट्स खोजे गए |
| वर्टिकल एस्केलेशन | PUT /api/v1/admin/settings/update | is_admin: 0 -> 1 | |
| 4. सिस्टम एक्सेस | कमांड इंजेक्शन | POST /api/v1/admin/vpn/generate | username=test;id; |
| रिवर्स शेल | Base64 एन्कोडेड पेलोड | www-data शेल | |
| 5. लेटरल मूवमेंट | फ़ाइल खोज | /var/www/html/.env | admin:SuperDuperPass123 |
| SSH पुनः उपयोग | ssh [email protected] | admin उपयोगकर्ता एक्सेस | |
| 6. रूट एस्केलेशन | कर्नेल एन्यूमरेशन | uname -r -> 5.15.70 | CVE-2023-0386 की पहचान हुई |
| ईमेल चेतावनी | /var/mail/admin | OverlayFS/FUSE की पुष्टि हुई | |
| एक्सप्लॉइट निष्पादन | ./fuse && ./exp | रूट शेल |