
यह प्रोजेक्ट स्लीप और पायथन भाषा के बीच एक 'ब्रिज' है। यह मानक GUI क्लाइंट की आवश्यकता के बिना पायथन के माध्यम से Cobalt Strike teamserver के नियंत्रण की अनुमति देता है। नोट: यह प्रोजेक्ट बहुत हद तक BETA में है। लक्ष्य परीक्षण के लिए एक प्लेग्राउंड प्रदान करना है और यह किसी भी तरह से आधिकारिक रूप से समर्थित सुविधा नहीं है। शायद इसे भविष्य में मुख्य उत्पाद में जोड़ा जा सकता है।
यह प्रोजेक्ट स्लीप और पायथन भाषा के बीच एक 'ब्रिज' है। यह मानक GUI क्लाइंट की आवश्यकता के बिना, पायथन के माध्यम से Cobalt Strike टीमसर्वर को नियंत्रित करने की अनुमति देता है।
नोट: यह प्रोजेक्ट अभी पूरी तरह BETA अवस्था में है। इसका लक्ष्य परीक्षण के लिए एक प्लेग्राउंड प्रदान करना है और यह किसी भी तरह से आधिकारिक रूप से समर्थित सुविधा नहीं है। संभवतः भविष्य में इसे मुख्य उत्पाद में जोड़ा जा सकता है।
यह प्रोजेक्ट @BinaryFaultline और @Mcgigglez16 द्वारा https://github.com/emcghee/PayloadAutomation प्रोजेक्ट में किए गए कार्य से प्रेरित है। मैं आप दोनों को विशेष धन्यवाद देना चाहता हूँ!!
इस ब्रिज का मूल एक हेडलेस Cobalt Strike क्लाइंट का पायथन कार्यान्वयन है। यह agscript द्वारा प्रदान किए गए Aggressor Script Console को इंजन के रूप में उपयोग करके प्राप्त किया जाता है। agscript Cobalt Strike के साथ हेडलेस इंटरैक्शन की अनुमति देता है (https://www.cobaltstrike.com/aggressor-script/index.html)। 'ब्रिज' sleepy.py में पायथन हेल्पर फ़ंक्शंस का उपयोग करके काम करता है, ताकि agscript कंसोल द्वारा अपेक्षित आवश्यक स्लीप कमांड उत्पन्न किए जा सकें। स्लीप फ़ंक्शंस लिखने के बजाय, striker.py हेल्पर फ़ंक्शंस प्रदान करता है जो स्लीप को एब्स्ट्रैक्ट करते हैं और पायथन के उपयोग की अनुमति देते हैं।
चूंकि PayloadAutomation प्रोजेक्ट ने इसे प्रेरित किया, इसलिए इसकी शुरुआत काफी हद तक समान कोड के साथ हुई, लेकिन मैं इसे केवल उन घटकों तक सीमित करना चाहता था जो agscript रैपर के रूप में कार्य करने के लिए आवश्यक हैं।
| आइटम | विवरण |
|---|---|
| sleep_python_bridge | वह लाइब्रेरी जो पायथन को Cobalt Strike के साथ इंटरफ़ेस करने की अनुमति देती है |
| output/html | html डेटा व्यूअर्स के लिए पथ |
| output/html/data | डेटा व्यूअर द्वारा उपयोग किए जाने वाले json डेटा के लिए पथ |
| output/payloads | सहेजे गए पेलोड्स के लिए पथ (पेलोड जनरेटर द्वारा उपयोग किया जाता है) |
| payload_scripts | payloadgenerator.py द्वारा लोड की जाने वाली बाहरी स्क्रिप्ट्स के लिए पथ |
| beaconlogtracker.py | बीकन लॉग ट्रैकर का कार्यान्वयन जो बीकन लॉग प्रदर्शित करने के लिए HTML डेटाग्रिड का उपयोग करता है |
| payloadgenerator.py | बीकन पेलोड जनरेटर का कार्यान्वयन जो प्रत्येक लिसनर के लिए पेलोड बनाता है |
| beacongrapher.py | बीकन ग्राफ़ ट्रैकर का कार्यान्वयन जो बीकन के लिए HTML जावास्क्रिप्ट निर्देशित ग्राफ़ का उपयोग करता है |
इस प्रोजेक्ट में उदाहरण समझने का सबसे आसान तरीका हो सकते हैं, लेकिन यह example.py स्क्रिप्ट है।
#!/usr/local/bin/python3
## Import the bridge
from sleep_python_bridge.striker import CSConnector
from argparse import ArgumentParser
from pprint import pp, pprint
###################
## Argparse
def parseArguments():
parser = ArgumentParser()
parser.add_argument('host', help='The teamserver host.')
parser.add_argument('port', help='The teamserver port.')
parser.add_argument('username', help='The desired username.')
parser.add_argument('password', help='The teamserver password.')
parser.add_argument('path', help="Directory to CobaltStrike")
args = parser.parse_args()
return args
## Let's go
def main(args):
cs_host = args.host
cs_port = args.port
cs_user = args.username
cs_pass = args.password
cs_directory = args.path
## Connect to server
print(f"[*] Connecting to teamserver: {cs_host}")
with CSConnector(
cs_host=cs_host,
cs_port=cs_port,
cs_user=cs_user,
cs_pass=cs_pass,
cs_directory=cs_directory) as cs:
# Perform some actions
#
# Get beacon metadata - i.e., x beacons() from the script console
beacons = cs.get_beacons()
print("BEACONS")
pprint(beacons)
# Get list of listners - i.e., x listeners_stageless() from the script console
listeners = cs.get_listeners_stageless()
print("LISTENERS")
pprint(listeners)
if __name__ == "__main__":
args = parseArguments()
main(args)
स्क्रिप्ट को कॉल करें
python3 example.py 127.0.0.1 50050 example password /path/to/cobaltstrike

बीकन लॉग रनटाइम पर टीमसर्वर में या टीमसर्वर पर सहेजी गई बीकन लॉग फ़ाइलों के माध्यम से उपलब्ध होते हैं। डेटा हमेशा मौजूद रहता है, लेकिन हो सकता है कि इसे आपके पसंदीदा तरीके से प्रस्तुत न किया गया हो। यह लॉग ट्रैकर का एक उदाहरण है जो बीकन लॉग को शीघ्रता से देखने के लिए HTML डेटा ग्रिड का उपयोग करता है।
beaconlogtracker.py एक स्क्रिप्ट है जो टीमसर्वर से कनेक्ट होती है, हर 30 सेकंड में चल रहे बीकन लॉग्स को निकालती है, <code>beaconlogs.json` में सहेजती है और एक खोजने योग्य तथा सॉर्ट करने योग्य HTML डेटा ग्रिड में प्रदर्शित करती है।
बीकन लॉग हमेशा logs निर्देशिका में सहेजे जाते हैं, लेकिन यह इन-मेमोरी लॉग्स को एक वैकल्पिक व्यूअर के साथ ट्रैक करने का एक वैकल्पिक तरीका है। यदि टीमसर्वर को पुनः आरंभ किया जाता है तो इन-मेमोरी लॉग्स खो जाते हैं, और आपको टीमसर्वर पर logs निर्देशिका में संग्रहीत लॉग्स को देखना होगा। यह स्क्रिप्ट इन-मेमोरी लॉग्स को beaconlogs.json फ़ाइल के साथ सिंक रखती है। इस तरह आपके पास सभी डेटा को देखने का एक त्वरित और आसान तरीका होता है, बिना logs निर्देशिका में खोजबीन किए, भले ही Cobalt Strike पुनः आरंभ हो जाए।
स्क्रिप्ट को प्रारंभ करें, इसे हर 30 सेकंड में लॉग सिंक करने के लिए अपने टीमसर्वर से कनेक्ट कराएं
उपयोग:
python3 beaconlogtracker.py 127.0.0.1 50050 logtracker password /path/to/cobaltstrike
यह beaconlogs.json को सहेजे गए और चल रहे बीकन लॉग्स के साथ सिंक रखेगा। यह हर 30 सेकंड में सिंक करता है
output/html निर्देशिका से एक वेबसर्वर प्रारंभ करें
python3 -m http.server 8000
http://localhost:8000/beaconlogs.html से कनेक्ट करें
