
توليد إعدادات موجه Caddy من ملفات تعريف C2 الخاصة بـ Cobalt Strike أو Sliver.
CaddySmith هو نص برمجي صغير بلغة Python يقرأ ملف تعريف C2 من Cobalt Strike أو Sliver ويُنشئ منه تكوين خادم ويب Caddy. يقوم ملف Caddyfile الناتج بتحويل جهاز Linux عادي إلى مُوجّه (redirector): حيث يتم توجيه حركة المرور المشروعة للبيكون (beacon) عبر وكيل عكسي إلى خادم الفريق (team server)، بينما يتم توجيه أي شيء آخر (الماسحات، روبوتات البحث، فرق الكشف الزرقاء، أو طلبات curl العشوائية) إلى عنوان URL وهمي.
لقد كتبت هذه الأداة لأن Caddy هو خادم ويب أسهل بكثير في الإعداد السريع مقارنةً بـ Apache؛ فهو ثنائي ثابت واحد، وشهادات Let's Encrypt تلقائية، ولا حاجة لاستخدام a2enmod.
للاستخدام المأذون به فقط. هذه أداة أمنية هجومية. لا تقم بتشغيلها إلا على بيئات لديك إذن كتابي لاختبارها.
يُحدد CaddySmith الصيغة تلقائيًا من محتويات الملف:
set uri "/foo". يتم تحويل كل URI من HTTP-GET / HTTP-POST إلى مسار دقيق خاص به مع تطبيق رؤوس العميل الواردة في الملف.path /api* /static* /resources*) وإجراء مطابقة جزئية لرقم بناء Chrome في سلسلة User-Agent (والتي تبقى ثابتة رغم تغييرات Sliver لـ UA حسب النظام الأساسي).يمكنك أيضًا فرض محلل معين باستخدام --profile-type cobaltstrike أو --profile-type sliver.
بالنظر إلى ملف تعريف، يستخرج النص البرمجي ما يلي:
--server-name)set host_stage)ثم يُنشئ ملف Caddyfile يقوم بما يلي:
.env، /wp-admin، .php، إلخ)pip install)python3 caddysmith.py my.profile \
--backend https://teamserver.internal:443 \
--decoy https://www.example.com/ \
--server-name redirector.example.com \
--email [email protected] \
--forbid-http \
-o redirector.caddy
يكتب هذا التكوين المُنشأ إلى redirector.caddy ويطبع ملخصًا لما فعله إلى stderr.
انسخ الملف المُنشأ إلى المُوجّه وقم بتشغيل Caddy عليه. تحتاج إلى العلم --adapter caddyfile لأن Caddy يستخدم تكوين JSON افتراضيًا:
caddy run --config /etc/caddy/redirector.caddy --adapter caddyfile
لإعادة تحميل نسخة قيد التشغيل بتكوين محدّث:
caddy reload --config /etc/caddy/redirector.caddy --adapter caddyfile
إذا حذّر Caddy من عدم تناسق التنسيق، قم بتنظيفها باستخدام:
caddy fmt --overwrite /etc/caddy/redirector.caddy
ضع الملف في /etc/caddy/ واستورده من ملف Caddyfile الرئيسي:
# /etc/caddy/Caddyfile
import /etc/caddy/redirector.caddy
إذا مررت --email (مُوصى به)، فإن المقتطف المُنشأ يحتوي بالفعل على كتلة الخيارات العامة، لذا يحتاج ملف Caddyfile الرئيسي فقط إلى سطر import. إذا لم تمرر البريد الإلكتروني، أضفه يدويًا في كتلة { } فوق سطر الاستيراد.
ثم تحقق من الصحة وأعد التحميل:
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
سيقوم Caddy بتوفير شهادة Let's Encrypt تلقائيًا للنطاق المحدد في --server-name طالما أن سجل A يُشير إلى المُوجّه.
الوضع strict هو ما تريده عادةً. الوضع lax مفيد عند تصحيح الأخطاء لمعرفة سبب عدم اتصال البيكون الحقيقي.
لنفترض أن لديك ملف تعريف يحاكي نقطة نهاية لـ Amazon وتريد نشره على redirector.0xtb.sh:
python3 caddysmith.py amazon.profile \
--backend https://10.1.1.10:443 \
--decoy https://www.amazon.com/ \
--server-name redirector.0xtb.sh \
--forbid-http \
--policy strict \
-o /etc/caddy/redirector.caddy
سيظهر الملخص المسارات التي تم بناؤها، على سبيل المثال:
Routes built: 2
- [profile-get] /broadcast
- [profile-post] /1/events/com.amazon.csm.csa.prod
إذا قمت بإعادة التوليد ورأيت بدون مسارات، فمن المحتمل أن النص البرمجي فشل في تحليل ملف التعريف الخاص بك — تحقق من التحذيرات على stderr.
لتكوين implant Sliver (JSON):
python3 caddysmith.py sliver-implant.json \
--backend https://10.1.1.10:443 \
--decoy https://www.amazon.com/ \
--server-name redirector.0xtb.sh \
--email [email protected] \
--forbid-http \
--policy strict \
-o /etc/caddy/redirector.caddy
سيخبرك الملخص أنه تم اكتشاف Sliver ويعرض المسار بالبادئة:
Profile type: sliver
Routes built: 1
- [sliver] /api /public /resources /services /static (prefix)
لأن Sliver يُنشئ URIs عشوائيًا من مجموعات مسار × ملف × امتداد، فإن مطابق path المُنشأ يستخدم globs البادئة (path /api* /public* /resources* /services* /static*) بدلاً من المسارات الدقيقة. يستخدم مطابق User-Agent سلسلة فرعية من رقم بناء Chrome (مثل 3921.146)، والتي يحافظ عليها Sliver عبر إعادة كتابة UA الخاصة بكل منصة.
# يجب أن يُرجع HTTP العادي 403 (إذا استخدمت --forbid-http)
curl -I http://redirector.0xtb.sh/
# يجب أن يُعيد اسم المضيف المجرد التوجيه إلى الوهم
curl -kI https://redirector.0xtb.sh/
# يجب أن يُعيد UA السيئ التوجيه أيضًا
curl -kI -A "curl/8.4.0" https://redirector.0xtb.sh/broadcast
# طلب مع UA الصحيح والمسار يجب أن يُمرر (200)
# يجب أيضًا إرسال جميع رؤوس العميل الموجودة في الملف في الوضع strict.
set host_stage "true" (أو لم يتم تعيينه على الإطلاق)، سيقوم النص البرمجي بالتحذير وتخطي URIs التجهيز. أضف set host_stage "false"; إلى ملف التعريف الخاص بك، أو مرر URIs التجهيز صراحةً عبر --extra-uri./api أو /static إلخ. سيتم إرسال مسح ضوئي للماسحات يستخدم هذه البادئات (مثل /api/.env) إلى خادم الفريق بدلاً من حظره محليًا — ولكن نقل HTTP الخاص بـ Sliver يصادق باستخدام معرف implant، لذا يتم رفض الطلبات غير المصرح بها على مستوى C2. لا يزال حاجز UA يبعد معظم الماسحات.--backend. إذا كنت بحاجة إلى خوادم فريق متعددة، قم بتشغيل النص البرمجي عدة مرات وادمج يدويًا.set uri "/path1 /path2"; يعمل (مسارات متعددة في سطر واحد)، لكن التنسيق غير المعتاد قد يُعطل المحلل. تحقق من قائمة المسارات في الملخص للتأكيد.tls_insecure_skip_verify. إذا كان الخادم الخلفي لديه شهادة حقيقية، احذف هذا السطر من الملف المُنشأ.كان Malleable-Redirector القائم على Apache هو نقطة البداية لما يُنشئه هذا النص البرمجي، بنفس نموذج URIs ثلاثي المسارات (URIs الملف / URIs الإضافية / URIs المخففة)، ونفس أوضاع السياسة، ونفس التخطيط العام. يقوم CaddySmith فقط بترجمة المخرجات إلى بناء جملة Caddy بدلاً من Apache .htaccess.
MIT
| العلم | الافتراضي | الوصف |
|---|
profile | (مطلوب) | المسار إلى ملف .profile |
--backend | https://teamserver.local:443 | أين يتم توجيه حركة المرور المطابقة عبر الوكيل |
--decoy | https://www.example.com/ | أين يتم توجيه حركة المرور غير المطابقة |
--server-name | c2.example.com | اسم نطاق المُوجّه الخاص بك |
--policy | strict | strict أو lax أو none |
--profile-type | auto | فرض cobaltstrike أو sliver (الافتراضي: كشف تلقائي) |
--extra-uri PATH | — | URI إضافي لتوجيهه عبر الوكيل (مع فحص UA). يمكن تكراره. |
--lax-uri PATH | — | URI إضافي لتوجيهه عبر الوكيل (بدون فحص). يمكن تكراره. |
--allow-ua STRING | — | UA إضافي مسموح به على مسارات --extra-uri. يمكن تكراره. |
--forbid-http | off | إرجاع 403 على HTTP العادي |
--email EMAIL | — | البريد الإلكتروني لتسجيل Let's Encrypt وإشعارات التجديد |
-o, --output FILE | stdout | كتابة التكوين إلى ملف |