السلام عليكم ورحمه الله وبركاته
اليوم سنشرح نوع جديد من الهجمات البسيطة لكن المفيدة والمؤثرة وحسب علمي قد يخلو الويب العربي من هذا الهجوم لكن اليوم سنتطرق له وسنضيف عدة مواضيع لاحقة حول الاستفادة منه في هجمات واقعية .
أولاً : ما هو HPP ؟
HPP هي اختصار لجملة HTTP Parameter Pollution او تلوث متغيرات HTTP مثل ما نعرف ان HTTP هو بروتكول من بروتكولات TCP/IP وهو مستخدم لنقل البيانات وتواصل المعلومات في WWW .
لكل طلب HTTP يتم إرساله هناك نوع ولكل نوع خصائص وواجبات سنتظرق الى أكثر ما يتم إستخدامه في HTTP .
طلب GET :
يرسل البيانات والمعلومات على شكل رابط فقط ولا يحتوي على BODY حين دخلت هذه الصفحة مثلاً تم إرسال طلب HTTP بهذا الشكل :
GET /foo?article_id=12&blogname=isecur1ty HTTP/1.1 User-Agent: Mozilla/5.0 Host: isecur1ty.org Accept: */*x
حيث foo هي الصفحة المطلوبة وما بعد علامة الإستفهام هي المعلومات او البيانات فالمتغير article_id قيمته هي 12 و علامة & هي تعني نهاية المتغير الأول وبداية متغير أخر والمتغير الثاني هو blogname وقيمته هي isecur1ty .
طلب POST :
يرسل البيانات على شكل body في الطلب مثلاً حين تكتب تعليق انت ترسل طلب بهذا الشكل :
POST /foo HTTP/1.1 User-Agent: Mozilla/5.0 Host: isecur1ty.org Accept: */*x Content-Length: 19 comment=nice&article_id=12
الأن فهمنا كيف يتم إرسال الطلب عن طريق HTTP . ولنجد الثغرات علينا أن نبحث في المتغيرات لنتعلم الأن فائدة HPP .
ثانياً : أكتشاف HPP .
في المثالين السابقين تم إدخال متغير إسمه article_id لكي يطلب من السيرفر أن يجلب ما في قاعدة البيانات من عمود article_id لكي يتم إظهاره او التعديل عليه لكن ماذا إذا وضعنا article_id في الطلب مرتين بقيمة مختلفة ؟ مثلاً
http://ift.tt/28IXp9x
GET /foo?article_id=12&blogname=isecur1ty&article_id=13 HTTP/1.1
User-Agent: Mozilla/5.0
Host: isecur1ty.org
Accept: */*x
x
ماذا تتوقع أن يتم إظهاره هل سيطلب مقال رقم 12 أم مقال رقم 13 ؟ لن نعرف الجواب إلا بعد الطلب وما سيتم إظهاره . ولكل سيرفر سلوك معين في هذا الأمر فمنها من يقبل الأول فقط ومنها من يقبل الثاني ومنها من يظهر الأثنين معاً بينهما فاصل او يظهرهم على شكل array هذا الجدول يبين تصرف كل سيرفر.
في سيرفرات ASP.NET يقوم السيرفر بعرض الأثنين لكن مع وجود فاصلة (,) بين المتغييرين وهذا أمر مهم سنتطرق له لاحقاً . في سيرفرات PHP تظهر القيمة الأخيرة للمتغير ويمكنك الإطلاع على البقية .
ثالثاً : فائدة HPP .
الأن ناتي للجزء المهم وهو ما هي الفائدة من HPP ؟ . للجواب على هذا السؤال سنطرح بعض النقاط ونقوم بشرحها .
- تخطي حدود HTTP المفروضة على بعض المتغيرات .
- معرفة سلوك السيرفر وتحديد سلوك الweb app .
- الوصول و ربما إستغلال المتغيرات الغير مسيطر عليها .
- تخطي حماية المدخلات أو نقاط التحقق الخاصة بالجدران النارية .
مثال 1 :
لو فرضنا ان هنالك جدار ناري يقوم بعمل فلترة باستخدام Regular expression لنفرض أنه يقوم بمطالعة كل ما بين قوسين أكبر او أصغر (><) في الطلب فعندما يجد قوسين >< في متغير واحد يقوم بحجب الطلب .
الأن لنفرض ان السيرفر هو ASP .NET وكما نعرف من الجدول السابق فان السيرفر سيقوم بعمل المتغيرين مع وضع فارزة (,) بينهما والجدار الناري يقوم بحظر إدخال أي بيانات تحتوي على <> معاً . لذلك نقوم بعمل HPP كما ياتي :
الان بعد ان فصلنا البايلود هنالك إحتمال ان الجدار الناري سيقرأ أول قيمة ويمررها او أن regex ستسمح بمرور هكذا باي لود باعتبار ان بداية الوسم غير مكتملة .
مثال 2
الأن سنأخذ مثال حولSQLI لو أنا قمنا بعمل طلب مثال الطلب الأول في الصورة فالسيرفر سوف يقوم بمنع الطلب لوجود SELECT مع WHERE في متغير واحد لكن لو قمنا بفصل الطلب في نفس المتغير بإستعمال HPP سوف يمرر السيرفر الطلب وتحصل على الحقن الخاص بك.
هذا شرح مبسط وهناك عدة امور اخرى يمكن أن تقوم بها سوف نقوم بشرحها في وقت لاحق وسنتطرق للموضع بالتفصيل في دورة إختبار تطبيقات الويب الجديدة .. إنتظرونا .
لأي سؤال او إستفسار إترك تعليقاً او تواصل معي .
تحياتي وتحيات فريق isecur1ty
الهكر الاخلاقي http://ift.tt/28Jb0ur
| روابط هذه التدوينة قابلة للنسخ واللصق | |
| URL | |
| HTML | |
| BBCode | |
kamindoz
