المقال المثبتمواضيع عامةمواضيع ومقالات

مقال : شرح تكنيك هجوم 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 هذا الجدول يبين تصرف كل سيرفر.

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

عبدالله حسام

مبرمج ومختبر اختراق من العراق مهتم بأمن المعلومات والثغرات البرمجية للتواصل معي عبر تويتر https://twitter.com/Abdulahhusam

مقالات ذات صلة

‫7 تعليقات

  1. مشكور اخى ع الموضوع
    بس استفسار بسيط
    ايه الكورس اللى بيشرح بروتوكول ال HTTP وطريقة عمله
    هل لغات ال Web Application زى ال PHP بتشرح ال HTTP باستفاضه ولا كورس ايه بالظبط اللى بيتكلم باستفاضه عن ال HTTP ؟

  2. شكرا اخي العزيز على الشرح الاكثر من رائع
    لدي سؤال اذا كان بامكانك الاجابه عليه وطرح شرح له مستقبلا
    هذا السؤال يتمحور حول هجمات brute force كيف يتم تخطي اكواد captcha عند شن هذا النوع من الهجمات

    1. يختلف باختلاف الكابتشا

      فمثلا الكابتشا الخاصه بقوقل اخر اصدار تم تخطيها عن طريق الجافا سكربت باضافة imacros
      باسم bypass captcha
      ويلزم ان يكون التخمين او اداة التخمين مكتوبه بالجافا سكربت ايضا

      اما بعض الكابتشا الاخرى اللتي تظهر رموز سهل جلبها

      وهناك كابتشا تظهر على شكل صوره باستخدام دوال php لتحويل الكود لصوره

      فيتم برمجة بوتات ذكيه تقرا الصوره

      وهناك اساليب كثيره للتخطي وهناك ايضا كابتشا يستحيل تخطيها

  3. حسب ما فهمت فالأمر أشبه بالـ ShellShock إلا أن الأمر هنا يتعلق بقواعد البيانات (المرجو التصحيح اذا اخطأت)

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى