
من إزالة تشويش code.js إلى الجذر، CVE-2023-0386
.env يحتوي على بيانات اعتماد قاعدة البيانات، وبسبب إعادة استخدام كلمة المرور يمكن للمهاجمين تسجيل الدخول كمستخدم admin على الجهاز. كما تبين أن نواة النظام قديمة ويمكن استخدام 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 الخاص بي
قمت باكتشاف المسارات عبر 2million.htb باستخدام gobuster
أثناء الاستكشاف، اكتشفت نقطة النهاية /invite

بعد الانتقال إلى صفحة /invite

أثناء فحص الصفحة، لاحظت أنها تحمّل ملف JavaScript باسم inviteapi.min.js يحتوي على كود مُعمّى:
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 وتم قبوله بنجاح

التسجيل

الصفحة الرئيسية

صفحة Access
لا تعمل الكثير من صفحات هذا الموقع بشكل صحيح، وصفحة Access هي حيث تصبح الأمور مثيرة للاهتمام

استكشاف نقاط نهاية API
قمت برفع ملف VPN بالنقر على زر connection pack، واعترضت طلب GET

ثم نفّذت طلب curl بخياري verbose و silent لاستكشاف نقاط نهاية API المتاحة


استجاب الخادم بقائمة JSON من API endpoints
كان لدى المسؤول 3 نقاط نهاية API بأساليب GET و POST و PUT
عندما حاولت توليد مفتاح المسؤول من نقطة نهاية المسؤول /api/v1/admin/vpn/generate، لم يتم توليد المفتاح لأنني لم أكن المسؤول، وأكّدت نقطة نهاية المسؤول الأولى /api/v1/admin/auth ذلك


بعد اكتشاف الصيغة الصحيحة لـ طلب PUT مع Content-Type: application/json والمعاملات المطلوبة، نجحت في رفع مستخدمي إلى مسؤول