
Cobalt Strike या Sliver C2 प्रोफाइल से Caddy redirector configs जनरेट करें।
CaddySmith एक छोटा Python स्क्रिप्ट है जो Cobalt Strike या Sliver C2 प्रोफ़ाइल को पढ़ता है और उससे Caddy वेब सर्वर कॉन्फ़िगरेशन बनाता है। उत्पन्न Caddyfile एक सामान्य Linux बॉक्स को रीडायरेक्टर में बदल देता है: वैध बीकन ट्रैफ़िक को आपके टीम सर्वर पर रिवर्स-प्रॉक्सी किया जाता है, और बाकी सब कुछ (स्कैनर, सर्च बॉट, ब्लू टीम प्रोब, रैंडम कर्ल) को एक डिकॉय URL पर भेज दिया जाता है।
मैंने इसे इसलिए लिखा क्योंकि Caddy Apache की तुलना में तेज़ी से खड़ा करने के लिए बहुत ही अनुकूल वेब सर्वर है — एकल स्थिर बाइनरी, स्वचालित Let's Encrypt प्रमाणपत्र, कोई a2enmod डांस नहीं।
केवल अधिकृत अभियान। यह आक्रामक सुरक्षा उपकरण है। इसे केवल उन परिवेशों के विरुद्ध चलाएँ जिनके परीक्षण के लिए आपके पास लिखित अनुमति है।
CaddySmith फ़ाइल सामग्री से स्वचालित रूप से प्रारूप का पता लगाता है:
set uri "/foo" निर्देश होते हैं। प्रत्येक HTTP-GET / HTTP-POST URI अपने स्वयं के सटीक-पथ मार्ग में बदल जाता है जिसमें प्रोफ़ाइल के क्लाइंट हेडर लागू होते हैं।path /api* /static* /resources*) और UA से Chrome बिल्ड नंबर पर सबस्ट्रिंग मैच करता है (जो 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 स्वचालित रूप से --server-name में डोमेन के लिए Let's Encrypt प्रमाणपत्र प्रदान करेगा जब तक 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 पर चेतावनियाँ जाँचें।
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 × file × extension संयोजनों से यादृच्छिक रूप से उत्पन्न करता है, उत्पन्न 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) मिलना चाहिए
# आपको सख्त मोड में प्रोफ़ाइल के सभी क्लाइंट हेडर भी भेजने होंगे।
set host_stage "true" है (या बिल्कुल सेट नहीं है), तो स्क्रिप्ट चेतावनी देगी और स्टेजर URIs को छोड़ देगी। अपनी प्रोफ़ाइल में set host_stage "false"; जोड़ें, या --extra-uri के माध्यम से स्टेजर URIs स्पष्ट रूप से पास करें।/api, /static, आदि से शुरू होने वाले किसी भी URL को दावा करता है। स्कैनर प्रोब जो संयोग से उन उपसर्गों का उपयोग करते हैं (जैसे /api/.env) स्थानीय रूप से अवरुद्ध होने के बजाय टीम सर्वर पर भेजे जाएँगे — लेकिन Sliver का अपना HTTP ट्रांसपोर्ट इम्प्लांट ID के माध्यम से प्रमाणित करता है, इसलिए अनधिकृत अनुरोध C2 परत पर अस्वीकार कर दिए जाते हैं। UA गेटिंग अभी भी अधिकांश स्कैनर को बाहर रखती है।--backend पर प्रॉक्सी होता है। यदि आपको कई टीम सर्वरों की आवश्यकता है, तो स्क्रिप्ट को कई बार चलाएँ और हाथ से मर्ज करें।set uri "/path1 /path2"; काम करता है (एक लाइन पर कई पथ), लेकिन असामान्य फ़ॉर्मेटिंग पार्सर को ट्रिप कर सकती है। सारांश में मार्ग सूची की जाँच करें।tls_insecure_skip_verify शामिल है। यदि आपके बैकएंड में वास्तविक प्रमाणपत्र है, तो उत्पन्न फ़ाइल से उस पंक्ति को हटा दें।Apache-आधारित Malleable-Redirector वह शुरुआती बिंदु था जिससे यह स्क्रिप्ट जनरेट होती है — उसी तीन-ट्रैक URI मॉडल (प्रोफ़ाइल URIs / अतिरिक्त URIs / ढीले URIs), वही पॉलिसी मोड, वही सामान्य लेआउट। CaddySmith बस आउटपुट को Apache .htaccess के बजाय Caddy सिंटैक्स में अनुवादित करता है।
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 | — | --extra-uri मार्गों पर अनुमत अतिरिक्त UA। दोहराया जा सकता है। |
--forbid-http | बंद | सादे HTTP पर 403 लौटाएँ |
--email EMAIL | — | Let's Encrypt पंजीकरण और नवीनीकरण सूचनाओं के लिए ईमेल |
-o, --output FILE | stdout | कॉन्फ़िगरेशन को एक फ़ाइल में लिखें |