
Uno script per automatizzare le sequenze di tasti tramite un programma desktop grafico.
Uno script per automatizzare le sequenze di tasti attraverso una sessione desktop remota attiva che assiste gli operatori offensivi in combinazione con tecniche di living off the land. Tutti i crediti vanno a nopernik per averlo reso possibile, così mi sono preso la responsabilità di migliorarlo. Volevo qualcosa che aiutasse durante la fase di post-sfruttamento quando si eseguono comandi tramite un desktop remoto. È stato anche possibile realizzare il progetto SCPA per raccogliere risorse in modo organizzato.
Installa le restanti dipendenze secondo il tuo package mananger.``` $ 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
### Configurazione
Installare il programma nel sistema e creare `rks` come collegamento simbolico di `remotekeystrokes`. Verrà utilizzato come alias di comando.```
$ 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")
## Utilizzo
### 0x00 - Autenticazione Remota
#### Leggende
- Il simbolo del dollaro (`$`) indica un prompt di shell unix con privilegi di utente normale e include comandi.
- Le parentesi angolari (`<>`) indicano parametri obbligatori.
- Le parentesi quadre (`[]`) indicano parametri opzionali se non è necessario specificarli.
#### RDP
Per autenticare sistemi operativi moderni, specificare il flag per forzare l'autenticazione come TLS `/sec:tls` oppure come NLA `/sec:nla`.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:<tls | nla> [/d:"<domain_name>"] /u:"<username>" /p:"<password>" /v:<IP>:[<PORT>]
Per autenticare sistemi operativi legacy, specifica il flag /sec:rdp per forzare la vecchia autenticazione.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:rdp [/d:"<domain_name>"] /u:"" /p:"" /v::[]
#### VNC
Per autenticare da remoto una macchina VNC.```
$ remmina -c vnc://<username>:<password>@<IP>
$ ssh [-p ] @
#### Telnet```
$ telnet <IP> [PORT]
Per utilizzare remotekeystrokes (o un alias del comando rks) durante l'esecuzione di comandi sul target Windows con sessione remota autenticata. Prima di eseguirli, è necessario navigare con un nome di finestra (-w); per impostazione predefinita cercherà FreeRDP quando si utilizza xfreerdp. Quando si hanno come target sistemi con un diverso programma di accesso remoto, assicurarsi di specificare il nome della finestra. Specificare il flag -c per impartire comandi. È anche possibile preparare un file di testo per inserire comandi e li leggerà uno per uno. Il flag verificherà se si tratta di una stringa o di un file.
Per programmi desktop remoti grafici come FreeRDP, Remmina e altri programmi di terze parti. A differenza di sessioni di terminale remoto come telnet e ssh, è necessario posizionare il cursore su un'applicazione attiva all'interno della macchina target. Ad esempio, in ambiente Windows è necessario aprire un prompt dei comandi (cmd.exe) o PowerShell (powershell.exe). È possibile che Windows apra programmi con una finestra di dialogo (-m dialogbox) per un avvio rapido. Assicurarsi di eliminare le tracce dalla voce del Registro di sistema quando si è eseguito inizialmente con questo metodo. Si trova in HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU. Vedrete esempi di come potrete eseguire misure offensive rapide utilizzando solo tecniche Living off the Land (LotL).
Enumerazione della macchina locale.``` $ 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!
Per eseguire in un unico comando. Questo è conciso specialmente quando si utilizza con una finestra di dialogo.```
$ 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!
Enumerazione di Active Directory.``` $ 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!
Per eseguire in un singolo comando. Questo è conciso, specialmente se usato con una finestra di dialogo.```
$ 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!
Enumerazione della macchina locale (TODO)``` $ cat recon_local_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox
$ rks -c recon_local_enum_cmdlets.txt
Enumerazione di Active directory (TODO)```
$ cat recon_ad_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox