
نص برمجي بلغة Python لجمع بيانات الحملات من Gophish وإنشاء تقرير
يقبل هذا البرنامج النصي معرف (معرفات) حملة Gophish الخاصة بك كمعامل، ثم يجمع نتائج الحملة لعرض الإحصائيات وإجراء تحليل لوكيل المستخدم والبحث الجغرافي لعناوين IP. يقوم جوريبورت بإنشاء قوائم بعناوين IP وأنظمة التشغيل وأنواع المتصفحات وإصداراتها ومواقعها مع أعداد مرات ظهور كل منها أثناء الحملة.
ملاحظة حول الإحصائيات: سيقوم جوريبورت بالإبلاغ عن العدد الإجمالي للأحداث وعدد مستلمي البريد الإلكتروني الذين شاركوا في كل حدث. بعبارة أخرى، سيظهر جوريبورت عدد المرات التي سجل فيها Gophish حدث "نقر على الرابط" وعدد المستلمين الذين نقروا على الرابط. هذان رقمان مختلفان جدًا. يمكن أن تحتوي حملة مرسلة إلى 10 أشخاص على 9 أحداث نقر على الرابط بينما نقره فقط 3 مستلمين. معرفة أن المستلمين نقروا على رابط أو أرسلوا بيانات أكثر من مرة هي معلومات قيمة، لكن تأكد من الحفاظ على الأرقام صحيحة.
يتطلب هذا البرنامج النصي خادم Gophish، وحملة نشطة أو مكتملة، ومفتاح API الخاص بتطبيق Gophish الخاص بك. احصل على هذا المفتاح بالنقر على علامة التبويب "الإعدادات". سيتم العثور على مفتاح API في الصفحة الأولى. كل حساب مستخدم Gophish له مفتاح API خاص به يعمل كطريقة مصادقة لذلك المستخدم لواجهة برمجة تطبيقات Gophish. إذا كنت تستخدم حسابات متعددة مع Gophish، فتأكد من الحصول على مفتاح API للمستخدم الصحيح.
مكتبات Python هذه مطلوبة أيضًا:
تحتاج إلى القيام ببعض الأمور للبدء:
pip install -r requirements.txt.سيفترض هذا المثال أن Gophish موجود على خادم آخر ويتم استخدام HTTPS. للوصول إلى نقطة نهاية API، ستحتاج إلى استخدام إعادة توجيه المنفذ SSH مع المنفذ 3333 (أو أي منفذ محلي آخر ترغب في استخدامه):
[Gophish]
gp_host: https://127.0.0.1:3333
api_key: <YOUR_API_KEY>
[ipinfo.io]
ipinfo_token: <IPINFO_API_KEY>
[Google]
geolocate_key: <GEOLOCATE_API_KEY>
python3 Goreport.py --id 26 --format excel
سيؤدي ذلك إلى جلب نتائج الحملة 26 من https://localhost:3333/api/campaigns/26/?api_key=<مفتاح_API_الخاص_بك> وإخراج النتائج إلى ملف xlsx.
يمكن تقديم معرفات متعددة في وقت واحد لتقارير متعددة. يمكن تقديم المعرفات باستخدام قائمة مفصولة بفواصل، أو نطاق، أو كليهما.
مثال: python3 Goreport.py --id 26,29-33,54 --format csv
إذا كنت تستخدم حسابات مستخدمين متعددة لـ Gophish أو خوادم متعددة، فسيكون لديك مفاتيح API متعددة. لتسهيل التبديل بين المفاتيح، يتيح لك خيار --config في جوريبورت تجاوز ملف التكوين الافتراضي، gophish.config، بملف تكوين تسميه. إذا تم تقديم هذه الوسيطة بملف تكوين صالح وقابل للقراءة، فسيستخدم جوريبورت هذا الملف بدلاً من gophish.config لإعداد اتصالات API.
قد تستخدم هذا الخيار إذا كان لديك، على سبيل المثال، ثلاثة خوادم تصيد تعمل بـ Gophish. يمكنك إعداد ثلاثة ملفات تكوين، كل منها بمفتاح API مختلف لـ Gophish، ثم استخدامها حسب الحاجة.
مثال: python3 Goreport.py --id 26,29-33,54 --format csv --config phish_server_2.config
إذا قمت بتشغيل حملات متعددة باستخدام نفس الإعدادات لمجموعات مستهدفة مختلفة، فقد ترغب في تشغيل جوريبورت ضد هذه الحملات دفعة واحدة ثم دمج النتائج في تقرير واحد. يمكن تحقيق ذلك عن طريق إضافة علامة --combine من جوريبورت.
مثال: python3 Goreport.py --id 26,29-33,54 --format excel --combine
سيقوم هذا الأمر بجمع نتائج الحملات 26 و29 و30 و31 و32 و33 و54. عادةً، كان جوريبورت سيخرج سبعة ملفات xlsx، ولكن إضافة --combine تخبر جوريبورت بدمج النتائج وإخراج تقرير واحد فقط كما لو كانت جميعها حملة واحدة كبيرة.
يمكن لجوريبورت إخراج إما جدول بيانات Excel (xlsx) أو مستند Word (docx). هناك أيضًا خيار تقرير "سريع". ما عليك سوى تحديد التنسيق المفضل لديك باستخدام وسيطة سطر الأوامر --format، كما هو موضح أعلاه في قسم الاستخدام النموذجي. ليس هناك الكثير ليقوله عن تنسيق csv.
تم بناء مستند Word من قالب، template.docx. ضع ملف القالب الخاص بك، المسمى template.docx، في دليل جوريبورت مع البرنامج النصي الرئيسي. يجب أن يتضمن قالبك نمط جدول تريد استخدامه وأنماط عنوان للعنوان 1 والعنوان 2. قم بتسمية نمط الجدول المفضل لديك "Goreport" وقم بإعداد أنماط العنوان 1 و 2.
لا تتردد في إنشاء نمط مخصص أو استخدام نمط موجود. الشيء الوحيد المهم هو وجود ملف template.docx وأنه يحتوي على نمط جدول "Goreport".
لإعادة تسمية نمط، انقر بزر الماوس الأيمن على النمط، وحدد تعديل نمط الجدول، وقم بتعيين اسم جديد.
يخرج خيار Excel مصنف Excel منسق بشكل جيد مع أوراق عمل متعددة لمجموعات مختلفة من النتائج والإحصائيات. هذا خيار جيد إذا كنت تريد بسهولة فرز أو تصفية جداول النتائج.
أخيرًا، هناك خيار "سريع". لا يقوم هذا بإنشاء مستند تقرير. بدلاً من التقرير، يقوم بإخراج معلومات أساسية حول الحملة إلى محطة الأوامر الخاصة بك. هذا مفيد للتحقق بسرعة من تقدم الحملة أو الرجوع إلى النتائج بعد اكتمال الحملة.
إذا كنت تريد تعيين حالة حملة إلى "مكتملة" عند تشغيل تقريرك، يمكن لجوريبورت مساعدتك في القيام بذلك تلقائيًا باستخدام علامة --complete. إذا قدمت هذه العلامة، فسيستخدم جوريبورت API لوضع علامة على كل معرف حملة على أنه "مكتمل" لإنهاء الحملة وتحديث الحالة في Gophish.
يقوم Gophish بعمليات البحث الجغرافي الخاصة به باستخدام عناوين IP ويعيد خطوط الطول والعرض. هذا يعمل بشكل جيد إلى حد ما، لكنه قد يفشل ويعيد إحداثيات 0,0 أو قد يعيد معلومات قديمة.
لدى جوريبورت خياران قد يستخدمان لتحسين نتائج الموقع. الأول، والخيار الموصى به، هو واجهة برمجة تطبيقات ipinfo.io. الوصول إلى API مجاني طالما أنك تقوم بأقل من 1000 استعلام كل 24 ساعة. لا ينبغي أن يكون ذلك صعبًا جدًا لحملة تصيد.
إذا تمت إضافة مفتاح API لـ ipinfo.io إلى ملف التكوين، فسيستخدم جوريبورت تلقائيًا ipinfo.io لجمع معلومات الموقع الجغرافي الحالية لكل عنوان IP فريد.
الخيار الثاني هو واجهة برمجة تطبيقات خرائط Google. استخدم الإصدار 1.0 من جوريبورت واجهة برمجة تطبيقات الخرائط عندما كانت مجانية. تفرض Google الآن رسومًا قدرها 0.005 دولار لكل طلب لواجهة برمجة تطبيقات الموقع الجغرافي (كما تسمى الآن). إذا كنت تفضل عدم استخدام ipinfo.io، فقم بتنشيط واجهة برمجة تطبيقات الموقع الجغرافي من خرائط Google على حساب Google وأضف مفتاح API إلى ملف تكوين جوريبورت. ثم أضف علامة --google إلى أمر جوريبورت الخاص بك في أي وقت تريد أن يستخدم جوريبورت API للبحث عن إحداثيات Gophish للحصول على عنوان منسق.
إذا كنت ترغب في مراجعة الكود، إليك مخطط أساسي للعملية:
يستخدم Goreport.py Python 3 ومكتبة أدوات إنشاء واجهة سطر الأوامر (CLICK). عند تشغيل البرنامج النصي، يتم إنشاء كائن جوريبورت جديد. تقوم وظيفة __init__ لفئة جوريبورت بإنشاء اتصال بخادم Gophish الخاص بك باستخدام مفتاح API المقدم للمصادقة. ثم يتم استدعاء وظيفة run().
تستخدم Run() خيارات سطر الأوامر لبدء إعداد التقارير. يتم استخدام حلقة For للتكرار خلال جميع معرفات الحملة المقدمة مع --id. يتم الاتصال بخادم Gophish الخاص بك للحصول على تفاصيل الحملة لكل معرف فردي.
أولاً، يتم استدعاء collect_all_campaign_info() لتخزين معلومات الحملة الأساسية في متغيرات. يتضمن ذلك بيانات مثل اسم الحملة، وقت تشغيلها، حالتها، خادم SMTP المستخدم، اسم القالب، والمزيد.
ثانيًا، يتم استدعاء process_timeline_events() للحصول على نموذج الجدول الزمني الخاص بـ Gophish للمعرف. يتضمن ذلك الأحداث التي سجلها Gophish. تعمل هذه الوظيفة في المرتبة الثانية لأنها تملأ بعض القوائم التي يتم مراجعتها بواسطة process_results().
ثالثًا، يتم استدعاء process_results() للحصول على نموذج النتائج الخاص بـ Gophish للمعرف. يوفر هذا بيانات مثل عدد الأهداف في الحملة.
يستخدم جوريبورت هذه الخطوات لإعداد بعض القوائم لتحديد النتائج الأساسية للحملة، على سبيل المثال، من تم إرسال بريد إلكتروني إليه بنجاح، وأي المستلمين نقروا على رابط، وأي المستلمين قدموا بيانات.
مع هذا الأساس، يمكن لجوريبورت ترتيب البيانات بأي عدد من الطرق للتقرير. في أي وقت، يمكن الاستعلام عن القوائم للتحقق مما إذا كان عنوان بريد إلكتروني معين في نموذج النتائج يظهر في قائمة targets_clicked لتأكيد ما إذا كان هذا المستلم قد نقر على رابط. يمكن أن يؤدي ذلك بعد ذلك إلى مراجعة نموذج الجدول الزمني لجمع التفاصيل. يحتفظ Gophish بالتفاصيل مثل عنوان IP ووكيل المستخدم في نموذج الجدول الزمني والمعلومات الأساسية في نموذج النتائج.