
Этот проект является «мостом» между sleep и языком python. Он позволяет управлять teamserver Cobalt Strike через python без необходимости использования стандартного GUI-клиента. ПРИМЕЧАНИЕ: Этот проект находится в стадии BETA. Цель — предоставить площадку для тестирования, и это никоим образом не официально поддерживаемая функция. Возможно, в будущем это может быть добавлено в основной продукт.
Этот проект — «мост» между языками Sleep и Python. Он позволяет управлять teamserver Cobalt Strike через Python без необходимости в стандартном GUI-клиенте.
ПРИМЕЧАНИЕ: этот проект находится в стадии BETA. Цель — предоставить полигон для тестирования, и это никоим образом не является официально поддерживаемой функцией. Возможно, в будущем это может быть добавлено в основной продукт.
Проект вдохновлён работой @BinaryFaultline и @Mcgigglez16 в проекте https://github.com/emcghee/PayloadAutomation. Я хочу выразить вам обоим особую благодарность!!
Сердце этого моста — реализация на Python «безголового» клиента Cobalt Strike. Это достигается использованием консоли Aggressor Script, предоставляемой agscript, в качестве движка. Agscript позволяет взаимодействовать с Cobalt Strike без GUI (https://www.cobaltstrike.com/aggressor-script/index.html). «Мост» работает за счёт использования вспомогательных функций Python в sleepy.py для генерации необходимых Sleep-команд, ожидаемых консолью agscript. Вместо написания Sleep-функций striker.py предоставляет вспомогательные функции, которые абстрагируют Sleep и позволяют использовать Python.
Поскольку этот проект вдохновлён PayloadAutomation, он начинался с большей части того же кода, но я хотел урезать его до компонентов, необходимых для работы в качестве обёртки над agscript.
| Элемент | Описание |
|---|---|
| sleep_python_bridge | Библиотека, которая позволяет Python взаимодействовать с Cobalt Strike |
| output/html | Путь для HTML-просмотрщиков данных |
| output/html/data | Путь для JSON-данных, используемых просмотрщиком данных |
| output/payloads | Путь для сохранённых пейлоадов (используется генератором пейлоадов) |
| payload_scripts | Путь для внешних скриптов, загружаемых payloadgenerator.py |
| beaconlogtracker.py | Реализация трекера журналов Beacon, который использует HTML-таблицу данных для отображения журналов Beacon |
| payloadgenerator.py | Реализация генератора пейлоадов Beacon, который создаёт пейлоады для каждого listener |
| beacongrapher.py | Реализация графового трекера Beacon, который использует ориентированный HTML/JavaScript-граф для отображения Beacon |
Возможно, проще всего понять этот проект на примерах, а именно по скрипту 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

Журналы Beacon доступны во время работы на teamserver или через файлы журналов Beacon, сохранённые на teamserver. Данные всегда есть, но могут быть представлены не так, как вам хотелось бы. Это пример трекера журналов, который использует HTML-таблицу данных для быстрого просмотра журналов Beacon.
beaconlogtracker.py — это скрипт, который подключается к teamserver, каждые 30 секунд извлекает текущие журналы Beacon, сохраняет их в <code>beaconlogs.json` и отображает в HTML-таблице данных с возможностью поиска и сортировки.
Журналы Beacon всегда сохраняются в каталог logs, но это альтернативный способ отслеживать журналы в памяти с помощью альтернативного просмотрщика. Если teamserver будет перезапущен, журналы в памяти будут потеряны, и вам придётся обращаться к журналам, хранящимся в каталоге logs на teamserver. Этот скрипт поддерживает журналы в памяти синхронизированными с файлом beaconlogs.json. Так у вас появится быстрый и простой способ визуализировать все данные, не копаясь в каталоге logs, даже если Cobalt Strike будет перезапущен.
Запустите скрипт, подключив его к вашему teamserver для синхронизации журналов каждые 30 секунд
Использование:
python3 beaconlogtracker.py 127.0.0.1 50050 logtracker password /path/to/cobaltstrike
Это будет поддерживать beaconlogs.json синхронизированным с сохранёнными и текущими журналами Beacon. Синхронизация происходит каждые 30 секунд
Запустите веб-сервер из каталога output/html
python3 -m http.server 8000
Подключитесь к http://localhost:8000/beaconlogs.html
