
إضافة Response Overview لـ BurpSuite - اكتشاف الاستجابات غير المألوفة عبر تجميع أجسام الاستجابات
إضافة نظرة عامة على الاستجابات لـ BurpSuite
المؤلف: Tobias "floyd" Ospelt، @floyd_ch، http://www.floyd.ch
Pentagrid AG، https://www.pentagrid.ch
تقوم هذه الإضافة بتجميع جميع أجسام الاستجابات حسب التشابه وتعرض ملخصًا، طلب/استجابة واحد لكل مجموعة. ستتيح الإضافة للمختبر الحصول على نظرة عامة على استجابات الموقع المُختبَر من جميع الأدوات (الماسح الضوئي، البروكسي، إلخ). وهي توفر "طريقة كشف شبه آلية" إضافية (مقارنة بطرق الكشف المعتادة القائمة على الاستجابة، أو الوقت، أو التفاعل، إلخ). هناك تحسينات متنوعة، لأسباب تتعلق بالأداء بشكل أساسي. تقوم ميزة "إزالة المعاملات" بإزالة معاملات الطلب المنعكسة من الاستجابة قبل المقارنة.
حتى الآن:
الاستخدام بسيط جدًا:
تحلّل هذه الإضافة استجابات HTTP إذا:
عندما تتحقق قيود التصفية أعلاه، تتم مقارنة أجسام الاستجابات الواردة (من جميع أدوات Burp!) بجميع المجموعات التي أنشأناها بالفعل. تُعرَّف المجموعة بعضوها الأول، الذي نحتفظ به في الذاكرة. إذا كانت الاستجابة التي نعالجها متشابهة بنسبة 95% مع ذلك العضو الأول، فإنها تنتمي إلى تلك المجموعة وتزداد فقط قيمة عدّاد "Group Size". وهذا يعني أيضًا أننا لن نخزّن تلك الاستجابة. إذا لم تكن الاستجابة متشابهة بنسبة 95% مع أي مجموعة، فإنها تشكّل مجموعة جديدة وتكون عضوها الأول.
اقترحت النسخة الأولى من نظرة عامة الاستجابات هذه التي تتيح لك إيجاد الحالات الشاذة في عام 2010 على مشروع w3af (انظر أيضًا نقاشًا هنا: https://github.com/andresriancho/w3af/issues/17345) وكانت مكتوبة بلغة Python. لم تصل أبدًا إلى الفرع الرئيسي لـ w3af، لا أتذكر السبب. تعلّمت الكثير عن difflib في Python آنذاك وحسّنت الأداء لحالة الاستخدام. كتبت إضافة مشابهة بلغة Python لـ Burp في عام 2019 وتعلّمت مرة أخرى الكثير عن difflib في Python عندما كنت أعمل لدى modzero AG https://github.com/modzero/burp-ResponseClusterer. ومع ذلك، أدركت في مرحلة ما أن الإضافة قد تستهلك بعضًا من أداء Burp، وهو ما تجاهلته في البداية. في عام 2021 تعطّلت الإضافة تمامًا إذ لم تعد تعمل مع إصدارات Jython الأحدث، وأثناء إعادة مراجعة الكود أدركت أنني كتبت إضافة غير فعّالة من ناحية الذاكرة. لذا ها نحن هنا، هذه إضافة جديدة في عام 2021 بلغة Kotlin مع ميزات جديدة، وتعلّمنا مرة أخرى الكثير من difflib في Python وميزات مختلفة. أجريت تحسينًا في الأداء لأنني أدركت أن حسابات معينة غير ضرورية إذا قارنّا دائمًا مع نفس النصوص (كما هو مُنفَّذ بالفعل في كود Python). مات Response Clusterer، عاشت Response Overview.
من الناحية النظرية، قد تؤدي الإعدادات الافتراضية إلى أداء غير جيد لـ Burp. ومع ذلك، من غير المرجح جدًا حدوث ذلك. في اختبار كانت فيه جميع الاستجابات بالحجم الافتراضي الأقصى (حوالي 1 ميغابايت) يجب مقارنتها ببعضها، استغرقت المقارنة حتى 30 مللي ثانية مع تحسين bByteCount المحسوب مسبقًا (الحالة العادية) وحتى 80 مللي ثانية بدون هذا التحسين (يحدث مرة واحدة فقط لكل مدخل). مضروبًا في الحد الأقصى لعدد المجموعات (1000)، يعني هذا في أسوأ الحالات المطلقة وقت معالجة يصل إلى 80 ثانية. وبما أن هناك خيطًا (thread) منفصلًا، فإن هذا سيكون محتملًا، إذ ستستغرق المقارنة التالية عندئذٍ وقتًا أقصى قدره 30 ثانية فقط. لكن أي تطبيق ويب لديه العديد من الاستجابات المختلفة بحجم 1 ميغابايت تقريبًا؟ لنأمل ألا يكون كثيرًا. ولا تنسَ أيضًا أنه إذا اختلف طول الاستجابات بأكثر من 2%، فإن مطابقة التشابه لا تستغرق وقتًا على الإطلاق بفضل تحسين veryQuickRatio.