Supongamos estos escenarios:
Tenés una VM recién instalada sin entorno gráfico y hay que ejecutar algunas instrucciones muy largas. Como no tenés portapapeles, a tipear.
Estás haciendo login en una terminal o aplicación que no soporta copiar y pegar y terminás bloqueándote porque tenés una clave tipo "1lI0OG68B".
Estás llenando un campo en una página web que por algún perverso motivo tiene
<input type="text" onpaste="return false" />
Seguro te ha ocurrido cuando te piden un mail y en la verificación no te deja pegar.
La generalización del problema es:
Quiero pegar texto y el portapapeles no funciona.
Entonces pensás. Si hiciste ataque del "falso pendrive" en el cual pusiste un microcontrolador que se registra como un teclado y envía texto, ¿se podría hacer algo parecido con software? ¿Un programa que envíe el texto a la ventana como si fuera el teclado?
Pues existe y si usás X11, no Wayland, se llaman xdotool.
Para saber si usás X11, ejecutás:
$ echo "$XDG_SESSION_TYPE"
o
$ env | grep -E -i 'x11|xorg|wayland'
Para instalar xdotool en Debian y derivados
$ sudo apt install xdotools
Luego, tenés que ejecutar esta secuencia:
- Encontrar la ventana
- Seleccionar la ventana
- Enviar el texto
Por ejemplo:
xdotool search "Virtual" windowactivate --sync type "ls"
¿Fácil? Nada lo es. Si mirás
$ man xdotool
verás que es una herramienta superpower, pero quedémonos con lo más básico y veamos los detalles
Encontrar la ventana
El search viene a ser un /.*PATTERN.*/i
Otra, hay ventanas embebidas, por ejemplo para firefox, te trae todas las solapas:
$ xdotool search "Firefox" | wc -l
Defaulting to search window name, class, and classname
94
Seleccionar la ventana
Es hacerla activa y el --sync es para que espere a que ocurra
Enviar el texto
Esto no debería tener sorpresas hasta que lo probás y el teclado de un host no corresponde con el de destino.
Se debe a que en realidad no se están enviando letras sino keycodes, que es exactamente lo mismo que pasa con el microcontrolador.
O cambiás la disposición del teclado en el destino o tenés que hacer alguna conversión del texto que vas a enviar. Un tr nunca viene mal, hasta que intentás hacerlo y te recomiendo cambiar la disposición.
Si no podés hacerlo y no hay mucho que enviar, te recomiendo que lo mandes como está y luego edites y corrijas, perdí un montón de tiempo con tr.
Retrospectivamente, lo mejor sería escribir un programita que haga el proceso inverso, obtener el keycode de las teclas que habría que mapear y que genere el texto apropiado pero ya es todo un proyectito.
Ponele que no podés cambiar la disposición del teclado, aún queda el Plan Base64.
Primero la falla y luego con base64 |
Después de haber fallado:
- Pasás el texto a base64
- Preparás el comando y ponés el cursos entre las comillas ""
- Enviás el texto
- Ejecutás falla porque el "=" no se transmite...
- Lo arreglás a mano y volvés a ejecutar
- Mostrás el contenido correcto
Ideas adicionales
Lo de los campos a los que no se les puede pegar, que el ejemplo más básico sería una página que abrís directamente del sistema de archivos con este contenido:
<form>
<input type="text" /><br/>
<input type="text" /><br/>
<input type="text" onpaste="return false" />
</form>
lo podés burlar muy fácilmente quitando lo marcado en amarillo desde el navegador con Developer Tools, ahí fué la seguridad de Client Side Validation...
Estos métodos pueden parecer rehacking pero si mirás atentamente sólo estás introduciendo texto, no hay fuga de información, cosa que sí habría en caso de funcionar el portapapeles.
Una idea para facilitar la transcripción de credenciales cuando todo lo demás falla, es que tengan la forma ???_???_???_???, no disminuye la fortaleza y facilita la copia humana.Finalmente, si usás estos métodos con claves, no te olvides de borrar en el historial de comandos...
Bonus: gzalo me avisó que la mayoría de los password managers tiene esta función, en el caso particular de KeePassXC es botón derecho sobre la cuenta, "Perform Auto-Type", que le envía la clave a la última ventana a la que le hayas hecho foco. Probalo con una cuenta inútil y un editor de texto hasta que lo entiendas bien.
Bonus: lo de usar un microcontrolador para almacenar claves es la idea que todos tuvimos pero solo mar fer realizó.
Dejo pegados acá los comandos:
xdotool search "ventana" windowactivate --sync type "txt"
xdotool search "ventana" windowactivate --sync type $( echo "txt" | base64 )
cmd=$( echo "" | base64 -d )
xdotool search "ventana" windowactivate --sync type $( base64 script.sh)
echo "" | base64 -d > script.sh