تقدم هذه المقالة بشكل أساسي مبدأ وحل ثغرة تحميل ملف chr(0) الخاصة بـ ASP. يمكن للثغرة الأمنية chr(0) تجاوز التحقق من الامتداد عند تحميل الملفات، وهي ثغرة أمنية ضارة للغاية ويمكن للأصدقاء المحتاجين الرجوع إليها
عندما نستخدم ASP لتطوير وظيفة تحميل الملفات، من أجل منع المستخدمين من تحميل برامج طروادة، غالبًا ما نقوم بتقييد تحميل بعض الملفات. تتمثل الطريقة الشائعة في تحديد ما إذا كان امتداد الملف الذي تم تحميله يتوافق مع اللوائح التي يمكنك استخدامها يمكن تحديد وظيفة السلسلة الصحيحة لاسترداد الملف الذي تم تحميله بسهولة، ولكن هناك ثغرة أمنية خطيرة للغاية، وهي ثغرة chr(0). تفاصيل.
1. أولاً، اشرح ما هو chr(0)؟
في ASP، يمكنك استخدام الدالة chr() لاستدعاء رمز ASCII، حيث يعني chr(0) أن الاستدعاء هو حرف نهاية. ببساطة، عندما تحتوي السلسلة على حرف chr(0)، فإن الجزء الأمامي فقط من chr (0) يمكن إخراجها، ولن يتم إخراج الأحرف بعد chr(0). أعط مثالا للتوضيح:
انسخ رمز الكود كما يلي:
<%response.write "HTMer.com"&chr(0)&"مرحبًا"%>
إذا قمت بتشغيل الكود أعلاه ضمن IIS، فهل سيتم إخراج "HTMer.com" فقط؟ اختفت عبارة "الترحيب" التالية، لأنه عند قراءة chr(0)، تعتبر العبارة منتهية.
2. مبدأ تحميل الثغرات الأمنية Chr(0):
افترض أنني قمت بإعداد برنامج ASP لتحميل ملفات jpg فقط، وإليك كيفية استخدام الثغرة الأمنية chr(0) لتحميل حصان طروادة ASP:
افترض هنا أن هناك ملف ASP Trojan يسمى htmer.asp وقمت بإعادة تسميته إلى htmer.asp .jpg هل رأيت مسافة في المنتصف؟ عندما نحصل على اسم الملف، تعتبر هذه المساحة chr(0). وعندما نستخدم right("htmer.asp .jpg",4) لعرضه، فهي في الواقع .jpg، ولكن عندما نقرأ بالفعل htmer.asp . jpg، وعند إنشاء الملف، يعتقد النظام أن الأمر قد انتهى عندما يقرأ chr(0)، لذلك لا يمكن إخراج .jpg اللاحق. يتم إنشاء اسم الملف الذي تم تحميله تلقائيًا كـ htmer.asp. أعتقد أنك يجب أن تعرف ذلك.
3. طرق حل الثغرة الأمنية chr(0).
الحل هو التحقق مما إذا كان هناك chr(0) في اسم الملف الذي تم تحميله، واستبدال حرف chr(0) مباشرة بوظيفة الاستبدال في ASP.