
This project is 'bridge' between the sleep and python language. It allows the control of a Cobalt Strike teamserver through python without the need for for the standard GUI client. NOTE: This project is very much in BETA. The goal is to provide a playground for testing and is in no way an officially support feature. Perhaps this could be something added in the future to the core product.
यह प्रोजेक्ट स्लीप और पायथन भाषा के बीच एक 'ब्रिज' है। यह मानक 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 रैपर के रूप में कार्य करने के लिए आवश्यक हैं।
इस प्रोजेक्ट में उदाहरण समझने का सबसे आसान तरीका हो सकते हैं, लेकिन यह 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 से कनेक्ट करें

रेड टीम ऑपरेटरों द्वारा अक्सर अनुरोधित एक सुविधा Cobalt Strike GUI की आवश्यकता के बिना प्रोग्रामेटिक रूप से पेलोड्स बनाने की क्षमता है। संदर्भ प्रोजेक्ट ने इसे एक पेलोड जनरेटर के साथ किया। यह बहुत अच्छा था, लेकिन एक अनोखी चुनौती है। एग्रेसर पेलोड के निर्माण के तरीके को प्रभावित करने के लिए कई हुक प्रदान करता है। इन हुक्स का उपयोग विभिन्न किट्स (जैसे, artifact kit, sleep mask kit, या UDRL kit) द्वारा किया जाता है। इनका उपयोग सामान्यतः GUI के माध्यम से एक एग्रेसर स्क्रिप्ट लोड करके किया जाता है। इस प्रोजेक्ट को बाहरी स्क्रिप्ट्स लोड करने की अनुमति देने के लिए विस्तारित किया गया था। इसके बिना, इन पेलोड हुक्स का उपयोग करना कठिन होता। इस कोड को आसानी से विस्तारित किया जा सकता है ताकि पेलोड्स को बाहरी फ़ंक्शंस में पास करके कस्टम ऑबफस्केशन जोड़ा जा सके, कस्टम लोडर में एम्बेड किया जा सके, या कोई अन्य संशोधन किया जा सके।
पेलोड जनरेटर स्क्रिप्ट टीमसर्वर से कनेक्ट होती है, अतिरिक्त स्क्रिप्ट्स लोड करती है, और पेलोड्स बनाती है।
python3 payloadgenerator.py 127.0.0.1 50050 payloads password /path/to/cobaltstrike चलाएँयह उदाहरण Arsenal kit को जोड़ने के चरणों को सूचीबद्ध करेगा, जिसमें artifact और sleep mask किट्स सक्षम हैं।
cp -r /path/to/arsenal_kit/dist/* /path/to/sleep_python_bridge/payload_scriptspython3 payloadgenerator.py 127.0.0.1 50050 payloads password /path/to/cobaltstrike चलाएँसामान्यतः GUI का उपयोग करते समय बाहरी स्क्रिप्ट्स फीडबैक या डिबगिंग के लिए उपयोगी जानकारी को Script Console में आउटपुट करने हेतु println एग्रेसर फ़ंक्शन का उपयोग कर सकती हैं। payloadgenerator.py का उपयोग करते समय println आउटपुट खो जाता है और केवल elog फ़ंक्शन ही उपलब्ध विकल्प होता है। elog का उपयोग करते समय Event Log में जानकारी देखने के लिए GUI की आवश्यकता होती है।
'with external kit' उपयोग उदाहरण से आगे बढ़ते हुए, /path/to/sleep_python_bridge/payload_scripts/arsenal_kit.cna फ़ाइल को अपडेट करें और println की दोनों घटनाओं को elog में बदलें। इस परिवर्तन के साथ अब सभी arsenal kit लॉगिंग GUI Event Log में उपलब्ध होगी।
बाहरी स्क्रिप्ट्स लोड करना हमेशा आवश्यक नहीं होता, सिवाय उन पेलोड संशोधन स्क्रिप्ट्स के जिनमें पेलोड हुक शामिल होते हैं (जैसे, artifact, sleep mask, और udrl किट्स)। यदि आप Cobalt Strike GUI से स्क्रिप्ट्स लोड करते हैं, तो पेलोड्स GUI से इन स्क्रिप्ट्स का सम्मान करेंगे, लेकिन agscript क्लाइंट से नहीं (ये अलग क्लाइंट हैं)। आपको स्क्रिप्ट्स और सहायक फ़ाइलों को payload_scripts निर्देशिका में जोड़ना होगा।
payloadgenerator.py स्वचालित रूप से payload_scripts निर्देशिका के शीर्ष स्तर पर स्थित किसी भी .cna स्क्रिप्ट को लोड करेगा। उपनिर्देशिका में स्थित कोई भी .cna स्क्रिप्ट लोड नहीं की जाएगी।
Arsenal Kit के साथ उदाहरण निर्देशिका संरचना।
$ ls -1R ./payload_scripts
./payload_scripts:
arsenal_kit.cna
artifact
sleepmask
./payload_scripts/artifact:
artifact32big.dll
artifact32big.exe
artifact32.dll
artifact32.exe
artifact32svcbig.exe
artifact32svc.exe
artifact64big.exe
artifact64big.x64.dll
artifact64.exe
artifact64svcbig.exe
artifact64svc.exe
artifact64.x64.dll
artifact.cna
./payload_scripts/sleepmask:
sleepmask.cna
sleepmask_pivot.x64.o
sleepmask_pivot.x86.o
sleepmask.x64.o
sleepmask.x86.o
@mgeeky द्वारा प्रदान किए गए हालिया अपडेट के लिए धन्यवाद, payloadgenerator.py स्क्रिप्ट अब 4.8 में जोड़े गए नए artifact_payload फ़ंक्शन मापदंडों का समर्थन करने के लिए अतिरिक्त तर्कों का समर्थन करती है। इन तर्कों के साथ अब आपके पास कौन से पेलोड्स उत्पन्न होते हैं, इस पर अधिक नियंत्रण होता है।
$ python3 payloadgenerator.py --help
------------------------
Beacon Payload Generator
------------------------
usage: payloadgenerator.py [-h] [-o path] [-l name] [-a arch] [-t types] [-e exit] [-c method] host port username password path
positional arguments:
host The teamserver host.
port The teamserver port.
username The desired username.
password The teamserver password.
path Directory to CobaltStrike
optional arguments:
-h, --help show this help message and exit
optional parameters:
-o path, --payload-path path
Where to save generated payloads. Default: output/payloads/
-l name, --listener name
Specify listener name to get payloads for. Default: payloads for all listeners will be produced
-a arch, --arch arch Specify payload architecture. Choices: x86, x64. Default: payloads for both are generated
-t types, --payload-types types
Comma separated list of payload types to generate keyed by file extensions. Choices: exe,dll,svc.exe,bin,ps1,py,vbs or use 'all' to compile all at once.
Default: exe,dll,bin
-e exit, --exit exit Payload exit method. Choices: thread, process. Default: process
-c method, --call-method method
System call method. Choices: indirect, direct, none. Default: <empty> (backwards compatible with Cobalt pre 4.8)
$python3 payloadgenerator.py 127.0.0.1 50050 payloads password /path/to/cobaltstrike -o /share/payloads/ -c indirect -a x64
------------------------
Beacon Payload Generator
------------------------
[*] Connecting to teamserver: 127.0.0.1
Loading cna scripts from ./payload_scripts
Scripts
-------
arsenal_kit.cna
console.cna
[*] Creating stageless payloads for listener: http1
[*] Creating http1.x64.exe
[*] Creating http1.x64.dll
[*] Creating http1.x64.bin
$python3 payloadgenerator.py 127.0.0.1 50050 payloads password /path/to/cobaltstrike -o /share/payloads/ -c indirect -a x64 -t exe
------------------------
Beacon Payload Generator
------------------------
[*] Connecting to teamserver: 127.0.0.1
Loading cna scripts from ./payload_scripts
Scripts
-------
arsenal_kit.cna
console.cna
[*] Creating stageless payloads for listener: http1
[*] Creating http1.x64.exe
$python3 payloadgenerator.py 127.0.0.1 50050 payloads password /path/to/cobaltstrike -o /share/payloads/
------------------------
Beacon Payload Generator
------------------------
[*] Connecting to teamserver: 127.0.0.1
Loading cna scripts from ./payload_scripts
Scripts
-------
arsenal_kit.cna
console.cna
[*] Creating stageless payloads for listener: http1
[*] Creating http1.x86.exe
[*] Creating http1.x86.dll
[*] Creating http1.x86.bin
[*] Creating http1.x64.exe
[*] Creating http1.x64.dll
[*] Creating http1.x64.bin

यह बीटा कोड है जो बीकन को निर्देशित ग्राफ़ में प्रदर्शित करेगा।
यह स्क्रिप्ट output/data/beacons.json फ़ाइल को अपडेट करती है
एक वेबसर्वर प्रारंभ करें और http://localhost:8000/beacons.html खोलें
उपयोग:
python3 beacongrapher.py 127.0.0.1 50050 grapher password /path/to/cobaltstrike
यह javascript ग्राफ़र द्वारा उपयोग की जाने वाली beacons.json फ़ाइल बनाएगा।
output/html निर्देशिका से एक वेबसर्वर प्रारंभ करें
python3 -m http.server 8000
http://localhost:8000/beacons.html से कनेक्ट करें
| आइटम | विवरण |
|---|
| 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 जावास्क्रिप्ट निर्देशित ग्राफ़ का उपयोग करता है |