السلام عليكم ورحمه الله وبركاته

اليوم سنشرح نوع جديد من الهجمات البسيطة لكن المفيدة والمؤثرة وحسب علمي قد يخلو الويب العربي من هذا الهجوم لكن اليوم سنتطرق له وسنضيف عدة مواضيع لاحقة حول الاستفادة منه في هجمات واقعية .

أولاً : ما هو HPP ؟ 


HPP هي اختصار لجملة HTTP Parameter Pollution او تلوث متغيرات HTTP  مثل ما نعرف ان HTTP هو بروتكول من بروتكولات TCP/IP وهو مستخدم لنقل البيانات وتواصل المعلومات في WWW  .

لكل طلب HTTP يتم إرساله هناك نوع ولكل نوع خصائص وواجبات سنتظرق الى أكثر ما يتم إستخدامه في HTTP .

طلب GET  :

يرسل البيانات والمعلومات على شكل رابط فقط ولا يحتوي على BODY حين دخلت هذه الصفحة مثلاً تم إرسال طلب HTTP بهذا الشكل :

 

 

حيث foo هي الصفحة المطلوبة وما بعد علامة الإستفهام هي المعلومات او البيانات فالمتغير article_id قيمته هي 12 و علامة & هي تعني نهاية المتغير الأول وبداية متغير أخر والمتغير الثاني هو blogname وقيمته  هي isecur1ty .

 

طلب POST :

يرسل البيانات على شكل body في الطلب مثلاً حين تكتب تعليق انت ترسل طلب بهذا الشكل :

 

الأن فهمنا كيف يتم إرسال الطلب عن طريق HTTP . ولنجد الثغرات علينا أن نبحث في المتغيرات لنتعلم الأن فائدة HPP .

 

ثانياً : أكتشاف HPP  . 


في المثالين السابقين تم إدخال متغير إسمه article_id لكي يطلب من السيرفر أن يجلب ما في قاعدة البيانات من عمود article_id لكي يتم إظهاره او التعديل عليه لكن ماذا إذا وضعنا article_id في الطلب مرتين بقيمة مختلفة ؟ مثلاً

 

http://www.example.com/foo?article_id=12&blogname=isecur1ty&article_id=13

x

ماذا تتوقع أن يتم إظهاره هل سيطلب مقال رقم 12 أم مقال رقم 13 ؟ لن نعرف الجواب إلا بعد الطلب وما سيتم إظهاره . ولكل سيرفر سلوك معين في هذا الأمر فمنها من يقبل الأول فقط ومنها من يقبل الثاني ومنها من يظهر الأثنين معاً بينهما فاصل او يظهرهم على شكل array هذا الجدول يبين تصرف كل سيرفر.

httpPollution

 

في سيرفرات ASP.NET يقوم السيرفر بعرض الأثنين لكن مع وجود فاصلة (,) بين المتغييرين وهذا أمر مهم سنتطرق له لاحقاً . في سيرفرات PHP تظهر القيمة الأخيرة للمتغير ويمكنك الإطلاع على البقية .

 

ثالثاً : فائدة HPP . 


الأن ناتي للجزء المهم وهو ما هي الفائدة من HPP ؟ . للجواب على هذا السؤال سنطرح بعض النقاط ونقوم بشرحها .

 

  • تخطي حدود HTTP المفروضة على بعض المتغيرات .
  • معرفة سلوك السيرفر وتحديد سلوك الweb app .
  • الوصول و ربما إستغلال المتغيرات الغير مسيطر عليها .
  • تخطي حماية المدخلات أو نقاط التحقق الخاصة بالجدران النارية .

 

 

مثال 1 : 

لو فرضنا ان هنالك جدار ناري يقوم بعمل فلترة باستخدام Regular expression لنفرض أنه يقوم بمطالعة كل ما بين قوسين أكبر او أصغر (><) في الطلب فعندما يجد قوسين >< في متغير واحد يقوم بحجب الطلب .

 

Slide1

 

الأن لنفرض ان السيرفر هو ASP .NET وكما نعرف من الجدول السابق فان السيرفر سيقوم بعمل المتغيرين مع وضع فارزة (,) بينهما والجدار الناري يقوم بحظر إدخال أي بيانات تحتوي على <> معاً . لذلك نقوم بعمل HPP  كما ياتي :

 

xxx

 

 

الان بعد ان فصلنا البايلود هنالك إحتمال ان الجدار الناري سيقرأ أول قيمة ويمررها او أن regex ستسمح بمرور هكذا باي لود باعتبار ان بداية الوسم غير مكتملة .

 

 

مثال 2  

الأن سنأخذ مثال حولSQLI لو أنا قمنا بعمل طلب مثال الطلب الأول في الصورة فالسيرفر سوف يقوم بمنع الطلب لوجود SELECT مع WHERE في متغير واحد لكن لو قمنا بفصل الطلب في نفس المتغير بإستعمال  HPP سوف يمرر السيرفر الطلب وتحصل على الحقن الخاص بك.

 

3

 

 

هذا شرح مبسط وهناك عدة امور اخرى يمكن أن تقوم بها سوف نقوم بشرحها في وقت لاحق وسنتطرق للموضع بالتفصيل في دورة إختبار تطبيقات الويب الجديدة .. إنتظرونا .

 

لأي سؤال او إستفسار إترك تعليقاً او تواصل معي .

 

تحياتي وتحيات فريق isecur1ty