شرح حقن القوالب من جانب الخادم (الجزء الثاني)

Safely LocK
0


 



المقدمة:


 البحث عن ثغرات حقن القوالب من جانب الخادم (Server-Side Template Injection)

 

  • الخطوة الأولى في العثور على ثغرات حقن القوالب هي تحديد الأماكن في التطبيق التي تقبل إدخال المستخدم.


 ابحث عن أماكن إدخال المستخدم 

   ابحث عن الأماكن التي يمكنك من خلالها إرسال إدخال المستخدم إلى التطبيق. تشمل هذه الأماكن:  

  • مسارات URL.  
  • المعلمات (parameters).  
  •  الأجزاء (fragments).  
  •  رؤوس وبيانات طلبات HTTP.  
  •  تحميل الملفات.  
  •  وأكثر.  


   عادةً ما تُستخدم القوالب لإنشاء صفحات ويب ديناميكية من البيانات المخزنة أو إدخال المستخدم. على سبيل المثال، تستخدم التطبيقات محركات القوالب لإنشاء صفحات رئيسية مخصصة أو رسائل بريد إلكتروني بناءً على معلومات المستخدم. لذلك، للعثور على ثغرات حقن القوالب، ابحث عن النقاط (endpoints) التي تقبل إدخال المستخدم والذي سيتم عرضه لاحقًا للمستخدم.



اكتشف ثغرات حقن القوالب بإرسال حمولات اختبارية 

   للعثور على ثغرة حقن القوالب، أدخل سلسلة اختبارية في حقول الإدخال التي وجدتها سابقًا. استخدم السلسلة التالية:   `{{1+abcxx}}${1+abcxx}<%1+abcxx%>[abcxx]` ، هذه السلسلة مصممة لإحداث أخطاء في أنظمة القوالب الشائعة: 

  •  `${…}` للقوالب في Java (مثل FreeMarker، Thymeleaf).  
  •  `{{…}}` للقوالب في PHP (مثل Smarty، Twig) وPython (مثل Jinja2).  
  •  `<% … %>` للقوالب في Ruby (مثل ERB).  
  •  `[abcxx]` للتحقق مما إذا كان الخادم يعتبرها قائمة في تعبير.  


هذه السلسلة تحاول استخدام متغير "abcxx" غير موجود. إذا حصلت على خطأ، فهذا يعني وجود ثغرة حقن قوالب (Template Injection vulnerability) لأن الأحرف الخاصة يتم معاملتها كأكواد. إذا لم يظهر خطأ (لأن الخادم يخفي الأخطاء)، جرب طريقة أخرى.

اختبارات إضافية:
  • جرب أيضًا: `${7*7}`، `{{7*7}}`، و `<%7*7%>`:  
  •  `${7*7}` للقوالب في Java.  
  • `{{7*7}}` للقوالب في PHP وPython.  
  • `<%7*7%>` للقوالب في Ruby.  

إذا عاد الموقع بالقيمة "49"، فهذا يعني أن إدخالك يتم تنفيذه ككود، مما يؤكد وجود الثغرة.


  عند اختبار نقاط النهاية (endpoints) لثغرات حقن القوالب، اعلم أن النتائج قد لا تظهر على الفور. قد يتم استخدام إدخالك في قالب لاحقًا، مثل في صفحة ويب أو بريد إلكتروني أو ملف، وقد يكون هناك تأخير. تحقق من علامات النجاح، مثل النظر إلى بريد إلكتروني تم إنشاؤه إذا كان التطبيق يستخدم إدخالك بشكل غير آمن في رسائل البريد الإلكتروني المجمعة.


  •    الحمولات `${7*7}`، `{{7*7}}`، و `<%7*7%>` تعمل إذا تمت إضافة إدخالك كنص عادي في القالب، مثل هذا:

  •    هنا، إدخالك موجود بالفعل داخل `{{...}}`، لذلك لا تحتاج إلى علامات إضافية. فقط أرسل `77` (مثال: `GET /display_name?name=77`) وتحقق مما إذا كانت النتيجة "49". إذا حدث ذلك، فهذا يعني أن الخادم يعامل إدخالك ككود، مما يشير إلى وجود ثغرة.





لكن إذا تمت إضافة إدخالك داخل منطق القالب، مثل هذا:





حدد محرك القوالب المستخدم

   بعد تأكيد وجود ثغرة حقن القوالب، حدد محرك القوالب الذي يستخدمه الموقع لاستغلال الثغرة بشكل صحيح. ستحتاج إلى كتابة الحمولة (payload) بلغة يفهمها محرك القوالب ، إذا تسبب إدخالك في حدوث خطأ، فقد تحتوي رسالة الخطأ على اسم محرك القوالب. على سبيل المثال، إرسال `{{1+abcxx}}${1+abcxx}<%1+abcxx%>[abcxx]` إلى تطبيق Python قد يعرض:  

   هذا يعني أن المحرك هو Jinja2.

 



   إذا لم يظهر خطأ، جرب الحمولات التالية:  

 

  • `<%7*7%>` يعيد "49" → المحرك هو ERB.  
  • `${7*7}` يعمل → المحرك قد يكون Smarty أو Mako.  
  • `{{7*7}}` يعيد "49" → المحرك قد يكون Jinja2 أو Twig.  
  • اختبر `{{7'7'}}` بعد ذلك:  
  • إذا كانت النتيجة "7777777" → المحرك هو Jinja2.  
  • إذا كانت النتيجة "49" → المحرك هو Twig.


   هذه الاختبارات مأخوذة من بحث PortSwigger.


   هناك العديد من محركات القوالب، وغالبًا ما تستخدم رموزًا متشابهة، لذلك قد تحتاج إلى اختبارات متعددة للتأكد.



 أتمتة اكتشاف ثغرات حقن القوالب


كتابة استغلالات (exploits) لكل نظام يستغرق وقتًا، ولكن القوالب غالبًا ما تحتوي على ثغرات معروفة تم اكتشافها مسبقًا. عند اكتشاف ثغرة حقن قوالب، يمكنك أتمتة العملية لتوفير الجهد.


أداة tplmap:

تساعد هذه الأداة في فحص الثغرات، وتحديد محرك القوالب، وبناء الاستغلالات. لا تغطي جميع المحركات، لكنها تعمل بشكل جيد مع المحركات الشائعة، مما يجعلها نقطة بداية رائعة الأداه

رابط الأاة من هنا

 كيفية منع هذه الثغرة:

  • 1التحديث المنتظم: حافظ على تحديث إطارات العمل (frameworks) ومكتبات القوالب. الإصدارات الجديدة تحتوي على إصلاحات لثغرات حقن القوالب.

  • 2.منع استخدام قوالب المستخدم:  إذا أمكن، امنع المستخدمين من إرسال قوالبهم الخاصة. إذا لم يكن ذلك ممكنًا، استخدم وضع "الحماية" (sandbox) من محرك القوالب لتقييد الميزات الخطرة — على الرغم من أن هذا ليس حلًا مثاليًا حيث يمكن للمهاجمين أحيانًا تجاوزه.

  • 3. استخدام قائمة السماح (Allowlist): حدد قائمة بالميزات المسموح بها في القوالب لمنع الهجمات الخطرة مثل تنفيذ الأكواد عن بُعد (RCE).

  • 4. إخفاء الأخطاء: لا تعرض رسائل الأخطاء التفصيلية للمستخدمين — فهي تساعد المهاجمين. اعرض صفحة خطأ بسيطة بدلًا من ذلك.

  • 5. تعقيم المدخلات (Sanitize Input): تأكد من فحص وتنظيف مدخلات المستخدم قبل إضافتها إلى القوالب. والأفضل من ذلك، تجنب استخدام مدخلات المستخدم مباشرة في القوالب.


إرسال تعليق

0تعليقات

إرسال تعليق (0)

#buttons=(موافق!) #days=(20)

يستخدم موقعنا ملفات تعريف الارتباط لتحسين تجربتك. تاكد الان
Ok, Go it!