مقال : شرح تكنيك هجوم HPP
السلام عليكم ورحمه الله وبركاته
اليوم سنشرح نوع جديد من الهجمات البسيطة لكن المفيدة والمؤثرة وحسب علمي قد يخلو الويب العربي من هذا الهجوم لكن اليوم سنتطرق له وسنضيف عدة مواضيع لاحقة حول الاستفادة منه في هجمات واقعية .
أولاً : ما هو 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://www.example.com/foo?article_id=12&blogname=isecur1ty&article_id=13
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 وطريقة عمله
هل لغات ال Web Application زى ال PHP بتشرح ال HTTP باستفاضه ولا كورس ايه بالظبط اللى بيتكلم باستفاضه عن ال HTTP ؟
شكرا اخي العزيز على الشرح الاكثر من رائع
لدي سؤال اذا كان بامكانك الاجابه عليه وطرح شرح له مستقبلا
هذا السؤال يتمحور حول هجمات brute force كيف يتم تخطي اكواد captcha عند شن هذا النوع من الهجمات
يختلف باختلاف الكابتشا
فمثلا الكابتشا الخاصه بقوقل اخر اصدار تم تخطيها عن طريق الجافا سكربت باضافة imacros
باسم bypass captcha
ويلزم ان يكون التخمين او اداة التخمين مكتوبه بالجافا سكربت ايضا
اما بعض الكابتشا الاخرى اللتي تظهر رموز سهل جلبها
وهناك كابتشا تظهر على شكل صوره باستخدام دوال php لتحويل الكود لصوره
فيتم برمجة بوتات ذكيه تقرا الصوره
وهناك اساليب كثيره للتخطي وهناك ايضا كابتشا يستحيل تخطيها
Use some OCR libraries
شرح جميل ومفهوم
شكرا على طرح مثل هذه المواضيع
حسب ما فهمت فالأمر أشبه بالـ ShellShock إلا أن الأمر هنا يتعلق بقواعد البيانات (المرجو التصحيح اذا اخطأت)
جزاكم الله خيراا مع كل موضوع جديد لكم تضهر أفكار جديدة