الهجمات على شبكة الإنترنت اليوم هي بشكل عام الحقن. سبب الحقن هو بشكل عام تصفية غير كاملة للمتغيرات، مما يسمح للمتسللين بتنفيذ البرامج بشكل غير قانوني أو الاستعلام عن البيانات التعسفية وتعديلها. مع تزايد حدة هجمات الحقن، ظهرت بعض رموز التصفية المتخصصة. ومع ذلك، قد تؤدي العيوب في بعض رموز التصفية إلى هجمات جديدة. يستخدم ما يلي رمز التصفية الأكثر استخدامًا - برنامج SQL العالمي لمكافحة الحقن - لشرح الأسباب وطرق الاستخدام والتدابير الوقائية للثغرة الأمنية.
تم كتابة برنامج SQL العالمي لمكافحة الحقن بواسطة Feng Zhiqiu من Firefox وهو رمز مضاد للحقن كامل إلى حد ما. يمكنه تنفيذ تصفية الإرسال لأحرف التصفية المحددة، ويمكنه تسجيل معلومات البيانات المقدمة بواسطة عنوان IP الخاص بالمهاجم. عند استخدامه، ما عليك سوى إضافة الكود <--#Include File="WrSky_Sql.Asp"--> إلى رأس الملف لمنع الحقن لتحقيق تصفية المتغيرات. إذا قمت بإضافة رمز برنامج بعد ملف اتصال قاعدة البيانات (مثل conn.asp)، فيمكنك تحقيق تصفية متغيرة للموقع بأكمله، وبالتالي تحقيق تأثير مضاد للحقن.
حسنًا، دعونا نلقي نظرة على كود جزء تصفية المتغير أولاً:
'--------جزء التعريف------------------
خافت Fy_Post،Fy_Get،Fy_In،Fy_Inf،Fy_Xh،Fy_db،Fy_dbstr
'تخصيص السلاسل التي تحتاج إلى تصفيتها، وفصلها بـ "القيقب"
Fy_In = "' Maple; Maple and Maple exec Maple Insert Maple Select Maple حذف Maple Update Maple Count Maple * Maple% Maple CHR Maple Mid Maple Master Maple Truncate Maple char Maple أعلن"
'----------------------------------
%>
<
Fy_Inf = انقسام (Fy_In، "القيقب")
'--------الجزء المنشور------------------
إذا طلب.نموذج<>ثم
لكل Fy_Post في الطلب.
نموذج Fy_Xh=0 إلى Ubound(Fy_Inf)
إذا Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>ثم
'--------الحصول على جزء------------------
إذا كان Request.QueryString<>ثم
لكل Fy_Get في Request.QueryString
لـ Fy_Xh=0 إلى Ubound(Fy_Inf)
إذا كان Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<> فإن
هذا الرمز يحدد تصفية المتغيرات التي يتم حقنها بشكل شائع مثل "'" و"و" وما إلى ذلك. إذا كنت تشعر أن التصفية ليست كذلك بما فيه الكفاية أو أكثر من اللازم، يمكنك أن تفعل ذلك بنفسك إضافة أو طرح الأحرف. من الواضح أنه طالما أن البيانات المقدمة إلى الخادم من خلال الحصول على أو النشر تحتوي على أحرف تمت تصفيتها، فسيتم حظرها بواسطة البرنامج. وهذا يؤدي إلى مشكلة. إذا قمت بإضافة رمز البرنامج بعد ملف اتصال قاعدة بيانات المنتدى، طالما أن محتوى المنشور يحتوي على أحرف تمت تصفيتها، فسيتم حظره. وفقًا لمحتوى التصفية الافتراضي، يبدو أنه يكاد يكون من المستحيل النشر إذا كان المحتوى باللغة الإنجليزية. بالإضافة إلى ذلك، يتم أحيانًا استخدام بعض الأحرف الخاصة (مثل علامة النسبة المئوية "%") عند تحديد نمط المنتدى. إذا تمت تصفية هذه الأحرف الخاصة، فلن يعمل المنتدى بأكمله بشكل صحيح. فيما يتعلق بالمشكلة المذكورة أعلاه، استخدمت برنامج dvbbs لاختبارها، وكانت النتيجة بالضبط ما كنت أتوقعه.
طريقة حل المشكلة المذكورة أعلاه هي منع إدخال بيانات الاتصال فقط في الملفات التي تحتاج إلى تصفيتها. لكن حجم العمل هذا كبير نسبيًا، ولا يعرف مشرفو المواقع عمومًا ما هي الملفات التي يجب تصفيتها. لذلك اقتراحي هو إضافة كود التصفية إلى conn.asp، ثم إنشاء connl.asp الذي لا يحتوي على كود التصفية، وتوصيل الملفات التي بالتأكيد لا تحتاج إلى التصفية وكود التصفية له تأثير على تشغيل هذا الملف إلى conn1.asp، ولكن عليك ملاحظة أن المحتويات الأساسية لملفي اتصال البيانات يجب أن تكون متسقة. بالإضافة إلى ذلك، من الأفضل عدم استخدام الأحرف التي تمت تصفيتها في إعدادات النمط، إذا كنت بحاجة حقًا إلى استخدامها، فيمكنك حذف تصفية هذه الأحرف في برنامج مكافحة الحقن.
ما ورد أعلاه يتعلق بتأثير برنامج مكافحة الحقن على عمل الموقع، ولا يمكن أن يسبب أي ضرر. في الواقع، الضرر الحقيقي يأتي من جزء تسجيل البيانات، دعنا نلقي نظرة على هذا الجزء من الكود:
''--------اكتب إلى قاعدة البيانات-------الرأس---- ----
Fy_dbstr="DBQ="+server.mappath("SqlIn.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
قم بتعيين Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) قيم('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"',' GET','"&Fy_Get&"','"&replace(Request.QueryString(Fy_Get),"'"،''")&"')")
Fy_db.إغلاق
اضبط Fy_db = لا شيء
'--------الكتابة إلى قاعدة البيانات-------الذيل--------
Response.Write "<لغة النص=JavaScript>alert('Fengwang SQL موجه نظام مضاد للحقن العالمي↓ nnالرجاء عدم محاولة إدخال أحرف غير قانونية في المعلمات nnHTTP://WwW.WrSkY.CoM إصدار النظام: V2.0 (ASP) الإصدار المثالي');<Script>
Response.اكتب "عملية غير قانونية! قام النظام بعمل السجلات التالية↓<br>"
Response.Write "عملية IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
الاستجابة.اكتب "وقت العملية:"&الآن&"<br>
استجابة.اكتب "صفحة العملية:"&Request.ServerVariables("URL")&"<br>"
الرد.اكتب "طريقة التقديم: GET<br>"
Response.اكتب "إرسال المعلمات:"&Fy_Get&"<br>"
Response.اكتب "إرسال البيانات:"&Request.QueryString(Fy_Get)
الاستجابة.النهاية
نهاية إذا
التالي
التالي
نهاية إذا
'----------------------------------
وظيفة هذا الكود هي تسجيل معلومات المهاجم وأفعاله حتى نتمكن من اتخاذ التدابير المضادة اللازمة. يمكن أن نرى من الكود أن البرنامج يسجل عنوان IP الخاص بالمهاجم وعنوان الإرسال ومحتوى الإرسال وما إلى ذلك، ولكن من الواضح أن هناك العديد من الثغرات هنا:
1. لا تتم معالجة الهجمات المتكررة. بمعنى آخر، بغض النظر عن كيفية إرسال البيانات القانونية، فسيتم تسجيلها بواسطة البرنامج، مما سيؤدي على الأرجح إلى هجمات DOS الضارة. لقد قمت بتجربة على هذا. أرسل البيان التالي بعد عنوان URL لملف محمي: و (اختر top l asc(mid (username,l,l)) from admin)>0، استخدم معالج المفاتيح لتسجيل عملية الإرسال، ثم كرر الأمر تلقائيًا استسلام . وبعد فترة، تغير حجم قاعدة البيانات بشكل ملحوظ (كما هو موضح في الشكلين 1 و2). كما يمكنك أن تتخيل، إذا كنت تستخدم أدوات مثل Shuoxue لتمكين الإرسال متعدد الخيوط، فلن يكون DOS مشكلة بالتأكيد.
الشكل 1
الشكل 2
2. لا يتم اقتطاع طول بيانات السجل. وهذا ما اكتشفته أثناء اختباري لبرامج مكافحة الحقن التي تؤثر على عمليات المنتدى. كما هو موضح في الشكل 3، إذا كان محتوى المنشور يحتوي على أحرف تمت تصفيتها، فسيتم تسجيل محتوى المنشور بالكامل في قاعدة البيانات. المنتديات العامة أو أنظمة المقالات لها حدود على طول المقالات المنشورة، لكن برنامج SQL العالمي لمكافحة الحقن لا يفرض أي قيود على ذلك. إذا أرسل أحد المهاجمين محتوى طويل جدًا بعد عنوان URL للملف المحمي، فمن المحتمل أن يتسبب ذلك في تعطل البرنامج. ولأن الضرر مرتفع نسبيًا، لم أختبره، ولكن تم تسجيل المحتوى الذي قدمته حتى 100 ألف كالمعتاد.
الشكل 3
3. مشكلة تحويل محتوى البيانات وانفجار قاعدة البيانات. انطلاقا من الكود، يسجل البرنامج البيانات المقدمة بشكل غير قانوني مباشرة في قاعدة البيانات دون تحويل. بمعنى آخر، بغض النظر عن ما ترسله، طالما أنه يحتوي على محتوى تمت تصفيته، سيقوم البرنامج بتسجيل كل المحتوى الذي ترسله. هذه المشكلة ليست خطيرة في الأصل، ولكن من أجل "الأمان"، يرغب بعض مشرفي المواقع في تغيير جميع ملفات mdb إلى لاحقة asp. بالإضافة إلى ذلك، يوجد جدول واحد فقط في قاعدة بيانات برنامج مكافحة الحقن، حتى نتمكن من الحصول على webshell عن طريق كتابة عنوان URL للملف المحمي مباشرة إلى قاعدة البيانات أثناء عملية الاختبار، قمنا بتغيير sqlin.mdb إلى sqlin.asp. ثم تمت إضافته بعد إدخال عنوان URL للملف المحمي، تم إدخال باب خلفي لـ Binglangzi micro ASP. بعد الاتصال بعميل Ice Fox، تم الحصول على wedshll بنجاح.
ولأن هذه الطريقة للحصول على webshell تتطلب التأكد من أن قاعدة بيانات الطرف الآخر تعمل بتنسيق ASP ومعرفة مسار البيانات، فيجب علينا إيجاد طريقة للحصول على مسار قاعدة البيانات هذه. في الظروف العادية، يمكننا تخمين مسار قاعدة البيانات مباشرة، ولكن في الواقع يمكن كشف هذا المسار، بالنظر إلى برنامج مكافحة الحقن بأكمله، لم نعثر على أي بيانات مكتبة مقاومة للانفجار، لذلك نحتاج فقط إلى الوصول إليه أو استخدامه مباشرة. تم الكشف عن طريقة %5C. إذا تم وضع رمز البرنامج مباشرة بعد ملف اتصال قاعدة البيانات، نظرًا لأن ملف اتصال البيانات يحتوي بشكل عام على بيانات مقاومة للانفجار، فلا يمكننا الكشف عن عنوان قاعدة البيانات.
ما تم ذكره أعلاه يمثل جميع المشكلات في عملية تسجيل البيانات، ويمكن لمشرفي المواقع المختصين إصلاح الثغرات ذات الصلة بأنفسهم، مثل حظر عناوين IP تلقائيًا لكميات كبيرة من عمليات الإرسال المتكررة للبيانات. في الواقع، يمكننا إزالة جزء تسجيل البيانات من الكود بالكامل، مما لن يؤثر على تصفية المتغيرات، وحتى إذا تم تسجيل معلومات المهاجم، فلن يكون ذلك مفيدًا للغاية. لذا أقترح أنه من الأفضل إزالة هذا الرمز، حتى لا تكون جميع الثغرات الأمنية موجودة.
حسنًا، هذا كل ما يتعلق بهذه المقالة وأخيرًا، أود أن أذكرك أنه عند استخدام برامج الحماية الأمنية، يجب عليك أيضًا الانتباه إلى المشكلات الأمنية الخاصة بالبرنامج نفسه.
تذكير خاص: يحتوي برنامج مكافحة الحقن 3.0 أيضًا على ثغرات الثغرات أكثر خطورة.