
تنسيق اختبار ثغرات الويب مقروء للبشر والآلات

explo هي أداة بسيطة لوصف مشكلات أمن الويب بتنسيق قابل للقراءة من قبل البشر والآلات.
من خلال تعريف سير عمل من الطلبات/الشروط، يمكن لـ explo استغلال المشكلات الأمنية دون الحاجة
إلى كتابة سكريبت. هذا يتيح مشاركة الثغرات المعقدة بتنسيق بسيط قابل للقراءة والتنفيذ.
مثال لاستخراج رمز csrf واستخدامه في نموذج:
name: get_csrf
description: استخراج رمز csrf
module: http
parameter:
url: http://example.com/contact
method: GET
header:
user-agent: Mozilla/5.0
extract:
csrf: [CSS, "#csrf"]
---
name: exploit
description: استغلال ثغرة حقن SQL مع رمز csrf صالح
module: http
parameter:
url: http://example.com/contact
method: POST
body:
csrf: "{{get_csrf.extracted.csrf}}"
username: "' SQL INJECTION"
find: You have an error in your SQL syntax
في هذا المثال من ملف التعريف، يتم اختبار المشكلة الأمنية بتنفيذ خطوتين يتم تشغيلهما من الأعلى إلى الأسفل. تعيد الخطوة الأخيرة نجاحًا أو فشلًا اعتمادًا على وجود السلسلة النصية 'You have an error in your SQL syntax'.
pip install explo
git clone https://github.com/dtag-dev-sec/explo
cd explo
python setup.py install
explo [--verbose|-v] testcase.yaml
explo [--verbose|-v] examples/*.yaml
هناك بعض حالات الاختبار المثالية في مجلد examples/.
$ explo examples/SQLI_simple_testphp.vulnweb.com.yaml
يمكنك أيضًا تضمين explo كمكتبة بايثون:
from explo.core import from_content as explo_from_content
from explo.core import ExploException, ProxyException
def save_log(msg):
print(msg)
try:
result = explo_from_content(explo_yaml_file, save_log)
except ExploException as err:
print(err)
يمكن تعيين وكيل http/https ومهلة الطلبات عبر متغيرات البيئة. المهلة الافتراضية مضبوطة على 15 ثانية.
$ export http_proxy=http://proxy:8089
$ export https_proxy=https://proxy:8090
$ export timeout=10
$ explo ...
يمكن إضافة وحدات لتحسين الوظائف وفئات المشكلات الأمنية.
تسمح وحدة http بإجراء طلب http، واستخراج المحتوى، والبحث/التحقق من المحتوى.
البيانات التالية متاحة للخطوات التالية:
stepname.response.contentstepname.response.cookiesresponse.extracted.variable_nameإذا تم تعيين معامل find_regex، يتم تنفيذ مطابقة تعبير اعتيادي على نص الاستجابة. إذا فشل ذلك، تعيد هذه الوحدة فشلًا وبالتالي إيقاف تنفيذ سير العمل الحالي (وجميع الخطوات).
عند الاستخراج بالتعبيرات الاعتيادية، استخدم مجموعة المطابقة extract لتحديد القيمة المراد استخراجها (انظر أدناه للحصول على مثال).
للإشارة إلى ملفات تعريف الارتباط، ارجع إلى اسم الخطوة السابقة التي يجب أخذ ملفات تعريف الارتباط منها (cookies: the_other_step.response.cookies).
أمثلة المعاملات:
parameter:
url: http://example.com
method: GET
allow_redirects: True
headers:
User-Agent: explo
Content-Type: abc
cookies: stepname.response.cookies
body:
key: value
find: للبحث عن سلسلة نصية
find_regex: للبحث عن (reg|ular)expression
find_in_headers: البحث في الرؤوس
expect_response_code: 200
extract:
variable1: [CSS, '#csrf']
variable2: [REGEX, '<input(.*?)value="(?P<extract>.*?)"']
تسمح وحدة http_header بالتحقق مما إذا كانت الاستجابة تفتقد مجموعة محددة من الرؤوس (والقيم). جميع المعاملات الأخرى مطابقة لوحدة http.
البيانات التالية متاحة للوحدات الأخرى:
stepname.response.contentstepname.response.cookiesأمثلة المعاملات:
parameter:
url: http://example.com
method: GET
allow_redirects: True
headers:
User-Agent: explo
Content-Type: abc
body:
key: value
headers_required:
X-XSS-Protection: 1
Server: . # جميع القيم صالحة
وحدة sqli_blind قادرة على تحديد حقن SQL الأعمى المعتمد على الوقت.
البيانات التالية متاحة للوحدات الأخرى:
stepname.response.contentstepname.response.cookiesأمثلة المعاملات:
parameter:
url: http://example.com/vulnerable.php?id=1' waitfor delay '00:00:5'--
method: GET
delay_seconds: 5
إذا تجاوزت العتبة 5 ثوانٍ (delay_seconds)، يعيد الفحص قيمة صحيحة (وبالتالي يؤدي إلى نجاح).
كتلة البيانات الوصفية هي كتلة خاصة يمكن إضافتها كأول كتلة في ملف .yaml لإضافة بيانات وصفية إلى ثغرة لمزيد من المعالجة. يصبح هذا مفيدًا عند استخدام explo كمكتبة ويمكن قراءة البيانات الوصفية لكل وصف ثغرة باستخدام meta_from_content(content). لا تحتاج هذه الوحدة إلى اسم أو وصف.
أمثلة:
module: metadata
parameter:
cvss: 8.9
author: Robin Verton
---
name: login
description: تسجيل الدخول ببيانات اعتماد اختبارية
module: http
parameter:
url: http://testphp.vulnweb.com/userinfo.php
method: POST
body:
uname: test
pass: test